系统报“fork:Cannot allocate memory” 报错的解决方法
系统报“fork:Cannot allocate memory” 报错的解决方法
“fork:Cannot allocate memory” 报错的解决方法
- 现象描述
- 可能原因
- 解决方法
1. 现象描述
系统日志里或者运行命令时出现报错信息 fork:Cannot allocate memory。
2. 可能原因
可能是内存不足或者进程数超限导致。
当系统内部的总进程数达到了 pid_max 时,再创建新进程时会报 fork:Cannot allocate memory错。
3. 解决方法
1. 查看系统内存使用率是否过高,确定内存不足后禁用内存占用较多的无关服务或者添加内存。
通过 free、top 命令查看内存使用情况
root@uos-pc:~# top......root@uos-pc:~# free -mtotal used free shared buff/cache availableMem: 15032 1224 12179 13 1628 13541Swap: 16383 0 16383
查看 /var/log/message 是否存在 oom 的记录。
root@uos-pc:~# grep "Out of memory" /var/log/messages
> Linux 内核有个机制叫OOM killer(Out Of Memory killer)。该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。
2. 核实总进程数是否超限,并修改总进程数 pid_max 配置。
查看系统 pid_max 值。 pid_max 默认值为32768。
root@uos-pc:~# sysctl kernel.pid_maxkernel.pid_max = 32768
查看系统内部总进程数。 若总进程数达到了 pid_max,则系统在创建新进程时会报 fork Cannot allocate memory 错。
root@uos-pc:~# pstree -p | wc -l744
执行 ps -efL 命令,定位启动进程较多的程序。
root@uos-pc:~# ps -efL......
临时增加总进程数 pid_max
root@uos-pc:~# sysctl -w kernel.pid_max=65535kernel.pid_max = 65535
永久修改总进程数 pid_max,使配置立即生效。
root@uos-pc:~# echo "kernel.pid_max = 65535" >> /etc/sysctl.conf
root@uos-pc:~# sysctl -p
kernel.pid_max = 65535
浙公网安备 33010602011771号