golang program exceeds 10000-thread limit

前端之家收集整理的这篇文章主要介绍了golang program exceeds 10000-thread limit前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Go程序出现panic

runtime: program exceeds 10000-thread limit
fatal error: thread exhaustion

...

goroutine 1120575 [runnable]:
syscall.Syscall(0x1,0x3,0xc4600fe000,0x96,0x0)
    /usr/local/go/src/syscall/asm_linux_amd64.s:18 +0x5
syscall.write(0x3,0x400,0x0,0xc46018da20,0x7)
    /usr/local/go/src/syscall/zsyscall_linux_amd64.go:1064 +0x55
syscall.Write(0x3,0x460422,0xedb6a0,0x1)
    /usr/local/go/src/syscall/syscall_unix.go:181 +0x49
os.(*File).write(0xc4200b4560,0xc46018dab0,0x42974e,0xc400000008)
    /usr/local/go/src/os/file_unix.go:186 +0x6c
os.(*File).Write(0xc4200b4560,0xb45cc6,0xf,0x96)
    /usr/local/go/src/os/file.go:142 +0x7c

...

这个问题是因为golang在执行syscall.Syscall的时候,会创建新的线程,当并发大的时候不断创建线程,导致线程数超过限制。

建议:

  1. 降低系统调用的并发
  2. 使用SetMaxThreads增加线程阀值,但是不建议这样使用

猜你在找的Go相关文章