我的服务用的是ImageMagic + JMagick来对图片进行压缩,web容器是tomcat,系统是CentOS6.0。最近发现tomcat有时崩掉了,在catalina.out文件里发现了这行出错信息:


libgomp: Thread creation failed: Resource temporarily unavailable


各种Google后,网上的普遍说法是进程数达到了系统设置的上限,所以不能创建新的进程。CentOS对每个用户创建的最大进程数默认设置是1024个(max user processes = 1024),可以用ulimit -u看到。我用ps命令查看,平时也就200+个进程,高峰时间也绝对不会超过 1024个。


后来,我终于发现了问题的答案。原来,在linux上,线程也是特殊进程,叫Light Weight Process(LWP) ,轻量级进程。如果算上线程,那么在同一时刻,整个系统的进程肯定 多,因为光tomcat就会创建很多线程来处理请求。具体的数可以用 ps -eLf 查看。


问题找到了,解决方案就简单 了。用root权限打开 /etc/security/limits.d/90-nproc.conf , 将 nproc 的的值设置大一些,我暂时设置成了10240,如下:


*          soft    nproc     10240


10240要是不够用,以后再改大点就是了。改完保存,再用ulimit -u确认下, 搞定!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐