记一次系统进程数超限runtime/cgo: pthread_create failed: Resource temporarily unavailable

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次系统进程数超限runtime/cgo: pthread_create failed: Resource temporarily unavailable相关的知识,希望对你有一定的参考价值。

出现runtime/cgo: pthread_create failed: Resource temporarily unavailable错误


情况描述:docker ps 查看运行的容器,发现提示一大堆的英文代码,其中提示一句

runtime/cgo: pthread_create failed: Resource temporarily unavailable一脸懵逼,怎么会出现这些东西,我之前运行的容器呢,怎么就不见了。不过恰好容器搭建的网站可以正常访问。就是docker ps 显示不正常的数据,运行的容器没有显示出来。如下图↓

记一次系统进程数超限runtime/cgo:


通过top查看一下进程,free -mh 查看一下剩余内存,剩余内存300M左右,top查看负载也不是很高。然后多执行几次top or free -mh命令,发现提示fork: Cannot allocate memory错误。

记一次系统进程数超限runtime/cgo:



原因:

进程数超限导致。系统内部总进程数达到了pid_max时,再创建新进程时会报“fork: Cannot allocate memory”错。


处理步骤:

1.执行以下命令,查看系统pid_max值。(最大的进程数)

sysctl -a |grep pid_max

发现返回结果是fork: Cannot allocate memory”错。

证明总进程数已经超限了,需要临时调大pid_max

echo 65535 > /proc/sys/kernel/pid_max


再次执行命令,查看系统pid_max的值,命令执行成功,已经成功调大系统总进程数值。

cat /etc/sys/kernel/pid_max

2.执行以下命令,查看系统内部总进程数。


pstree -p | wc -l


(pstree的命令执行不成功,需要自己安装 yum -y install psmisc

系统默认总进程数32768,下面是程序更新后某个项目进程数减少的数值。

记一次系统进程数超限runtime/cgo:



ps -efL 命令,可以定位启动进程较多的程序


3.如果让修改的最大进程数阈值永久生效,需要修改配置文件

kernel.pid_maxd的值修改为 65535

kernel.pid_maxd=65535


sysctl -p



问题解决,docker ps 显示容器正常

以上是关于记一次系统进程数超限runtime/cgo: pthread_create failed: Resource temporarily unavailable的主要内容,如果未能解决你的问题,请参考以下文章

记一次Oracle session数过多引起进程数超过processes限制最终导致客户端无法连接的问题

记一次僵尸进程的处理

记一次应急响应2

runtime/cgo: pthread_create failed: Resource temporarily unavailable or fork: Cannot allocate mem

记一次JAVA进程导致Kubernetes节点CPU飙高的排查与解决

记一次机器socket连接数持续增长的问题