runtime/cgo: pthread_create failed: Resource temporarily unavailable
用户执行docker ps后,报错:
$ docker ps
runtime/cgo: pthread_create failed: Resource temporarily unavailable
SIGABRT: abort
PC=0x7efca7dad387 m=0 sigcode=18446744073709551610
goroutine 0 [idle]:
runtime: unknown pc 0x7efca7dad387
stack: frame={sp:0x7ffdbda3a6c8, fp:0x0} stack=[0x7ffdbd23ba98,0x7ffdbda3aad0)
00007ffdbda3a5c8: 000055af6e558e7f <runtime.(*mheap).growAddSpan+271> 00007ffdbda3a600
00007ffdbda3a5d8: 000055af6e54fe0e <runtime.(*mTreap).end+78> 0000000000000000
00007ffdbda3a5e8: 00007efc00000001 0000000000000000
00007ffdbda3a5f8: 00007ffdbda3a630 000055af6e57e7d7 <runtime.step+327>
00007ffdbda3a608: 000055af708fbdf2 0000000000d08e00
00007ffdbda3a618: 0000000000d08e00 00007ffdbda3a658
00007ffdbda3a628: 000055af6e57e7a3 <runtime.step+275> 00007ffdbda3a6d8
00007ffdbda3a638: 000055af6e57daba <runtime.pcvalue+346> 000055af70918a3f
......
这里有一行报错是,runtime/cgo: pthread_create failed: Resource temporarily unavailable,
即资源缺乏。
我尝试用limit -u 10000来扩大用户的限制参数,再次执行docker ps后不再报错。
说明这个处理方法是对的,但这是临时的,要想长期保持,需要更改配置文件。
1. 在文件/etc/security/limits.d/20-nproc.conf末尾添加
renyi soft nproc 60000
2. 在/etc/security/limits.conf末尾添加
renyi soft nproc 65535
renyi hard nproc 65535
renyi soft nofile 60000
renyi hard nofile 65535
如此,可以永久性的解决资源匮乏问题。
附注:nproc:示意max number of processes
nofile:示意max number of open file descriptors
hard与soft:soft是一个警告值,而hard则是一个真正意义的阀值,超过改值就会报错。
结束。