问题描述
临下班的突然收到接口异常消息,立马进入服务器执行命令一直报Cannot allocate memory。
[root@home ~]# ps -ef | grep project
-bash: fork: Cannot allocate memory
[root@home ~]#
[root@home ~]# apache-tomcat-project/bin/startup.sh
apache-tomcat-project/bin/startup.sh: fork: Cannot allocate memory
当时背心发凉,什么情况呢,首先查看整台服务器的内存、CPU、流量都比较正常。
搜索发现网上也有很多类似文章。
重启应用服务后,发现重启后的服务线程一直在快速增加,从最初的二千多,慢慢增长到一万多,初步判断是将系统进程最大数占用满后导致。
同时该服务早上被重新部署过,怀疑是添加新的功能导致,恢复到更新前的版本后线程增长正常。
常用命令
1、查看系统最大进程数
sysctl kernel.pid_max
2、查看系统占用最大进程数
ps -eLf | wc -l
修改最大进程数的方法
3、临时修改,系统重启后还原
echo 1000000 > /proc/sys/kernel/pid_max
4、永久修改生效
echo "kernel.pid_max=1000000 " >> /etc/sysctl.conf
sysctl -p
查看tomcat启动多少线程
5、查看tomcat进程ID号
ps -ef | grep <Tomcat名称>
6、统计该tomcat进程内的线程个数
ps -Lf <进程ID> | wc -l
最后排查的原因是项目rabbitmq配置信息错误,导致程序进程一直等待链接中…