背景

在启动java应用的时候,报OOM错误,如下:

Caused by: java.lang.OutOfMemoryError: unable to create new native thread

检查了应用配置,jvm配置,发现配置也没有问题,但是其他应用也是同样配置,就不会报错。在想重启这个应用的时候,不经意间发现以下错误:

sh stop-bash: fork: Cannot allocate memory

貌似也是内存相关的错误。网上搜一下网友说是sysctl.conf的最大进程数限制,如下:

[root@localhost-203-root-all srm]# ps -eLf|wc -l
10047

查看,确实进程数有点多,这里需要记住ps -eLf,-L指的是线程数,需要注意的是线程数也统计在Pid_max里面,,临时加了最大进程数,如下:

echo 1000000 > /proc/sys/kernel/pid_max

再重启java应用,发现没有报错,于是确定原因是最大进程数的问题,永久解决这个问题需要修改sysctl.conf配置,如下:

vi /etc/sysctl.conf
添加
kernel.pid_max = 65530
sysctl -p

总结

这里主要学习了ps -eLf这个命令,可以查看当前打开的总进程数,以及pid_max,这个系统最大进程数限制参数

附上另外一个最大连接数问题: https://blog.51cto.com/riverxyz/5377323