kagxin / blog

个人博客:技术、随笔、生活
https://github.com/kagxin/blog/issues
7 stars 0 forks source link

docker pthread_create failed: Resource temporarily unavailable #39

Open kagxin opened 5 years ago

kagxin commented 5 years ago

原因分析

linux 的 Systemd会对资源进行控制,TasksMax Systemd / Linux功能可能会导致与创建新进程相关的各种操作问题,包括启动容器的失败和设置运行容器的iptables规则的失败。 受此问题影响的客户将会出现Docker守护程序无法创建比TasksMax配置的限制更多的进程。

异常堆栈

$ docker ps
runtime/cgo: pthread_create failed: Resource temporarily unavailable
runtime/cgo: pthread_create failed: Resource temporarily unavailable
SIGABRT: abort
PC=0x7fd204a43428 m=3 sigcode=18446744073709551610

goroutine 0 [idle]:
runtime: unknown pc 0x7fd204a43428
stack: frame={sp:0x7fd204007998, fp:0x0} stack=[0x7fd2038082f0,0x7fd204007ef0)
00007fd204007898:  00007fd20541a5f8  0000000000000000
...
00007fd2040078a8:  00007fd205426168  00007fd204007a08

runtime: unknown pc 0x7fd204a43428
stack: frame={sp:0x7fd204007998, fp:0x0} stack=[0x7fd2038082f0,0x7fd204007ef0)
00007fd204007898:  00007fd20541a5f8  0000000000000000
...
00007fd2040078a8:  00007fd205426168  00007fd204007a08

goroutine 1 [chan receive, locked to thread]:
runtime.gopark(0x1883d68, 0xc42008a058, 0x17d28c3, 0xc, 0xc420046e17, 0x3)
  /usr/local/go/src/runtime/proc.go:291 +0x11a
runtime.goparkunlock(0xc42008a058, 0x17d28c3, 0xc, 0x17, 0x3)
  /usr/local/go/src/runtime/proc.go:297 +0x5e
runtime.chanrecv(0xc42008a000, 0x0, 0x1, 0x41a4c8)
  /usr/local/go/src/runtime/chan.go:518 +0x2f2
runtime.chanrecv1(0xc42008a000, 0x0)
  /usr/local/go/src/runtime/chan.go:400 +0x2b
runtime.gcenable()
  /usr/local/go/src/runtime/mgc.go:217 +0x6f
runtime.main()
  /usr/local/go/src/runtime/proc.go:161 +0x11e
runtime.goexit()
  /usr/local/go/src/runtime/asm_amd64.s:2361 +0x1

rax    0x0
...
gs     0x0

解决办法重新设置TasksMax允许的最大值

# Comment TasksMax if your systemd version does not supports it. # Only systemd 226 and above support this option. TasksMax=512

systemctl status docker | grep Tasks

Tasks: 469 (Limit: 512)

ref: docker issue Docker Success Center 给出的解决方案 pthread_create failed原因排查