vaynedu / nginx-1.16.0

学习nginx架构设计与实现,翻译nginx的源码,写nginx的测试代码, 在issue中记录nginx的精妙设计及其常见问题https://github.com/vaynedu/nginx-1.16.0/issues 。 myexercise内存池、哈希表、链表、md5、crc测试代码,mymodule中有hello自定义模块代码。通过nginx将自己整个知识体系连接起来
https://github.com/vaynedu/nginx-1.16.0/issues
BSD 2-Clause "Simplified" License
12 stars 2 forks source link

fork: Cannot allocate memory问题? #70

Open vaynedu opened 3 years ago

vaynedu commented 3 years ago

某个晚上运维同学说 进程满了? fork失败

fork: Cannot allocate memory

打开top一看都是这个进程 image

查看支持最大进程数

sysctl kernel.pid_max
kernel.pid_max = 32768

查看当前的进程数

ps -aux | wc -l

很明显都超过创建的进程的数量,超过了最大进程数量限制 修改最大 进 程数后系统恢复


echo 1000000 > /proc/sys/kernel/pid_max

永久生效
echo "kernel.pid_max=1000000 " >> /etc/sysctl.conf
sysctl -p

除此之外,为什么会出现非常多的lego_agent? 判断当前进程数量, 不能采用如果 进程数量==0,启动, 因为ps有时候不准确,采用的是镜像,不是那么准确,某一刻如果取进程数量不正确,那么就会进入无限创建进程的死循环, 这里最好使用小于 或者 大于

huiofficial commented 3 years ago

可能是挂掉的进程没有释放内存,又不断有新的进程加入,导致系统内存崩溃。