背景
在启动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