记一次系统进程数超限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 显示不正常的数据,运行的容器没有显示出来。如下图↓
通过top查看一下进程,free -mh 查看一下剩余内存,剩余内存300M左右,top查看负载也不是很高。然后多执行几次top or free -mh命令,发现提示fork: Cannot allocate memory错误。
原因:
进程数超限导致。系统内部总进程数达到了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,下面是程序更新后某个项目进程数减少的数值。
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限制最终导致客户端无法连接的问题
runtime/cgo: pthread_create failed: Resource temporarily unavailable or fork: Cannot allocate mem