更新时间:2024-04-18 GMT+08:00
Linux实例执行命令或启动服务时出现错误:Cannot allocate memory
问题描述
Linux操作系统的ECS实例内存充足,但是在执行命令或启动服务时,出现错误提示“Cannot allocate memory”。
命令及执行结果如下:
root@localhost:~# free -m total used free shared buffers/cached available Mem: 3890 125 3179 2 504 3463 Swap: 0 0 0 root@localhost:~# uname -a -bash: fork: Cannot allocate memory
可能原因
出现该错误信息表示系统的进程ID(PID),即系统中运行的进程/线程数达到了最大限制,该限制由内核参数/proc/sys/kernel/pid_max控制。
解决方案
- 远程登录ECS实例。
- 执行以下命令,查看系统当前已运行的进程数。
结果如下:
32753
也可以通过执行以下命令,通过观测plist-sz列数值查看系统已运行的进程数变化情况。
如果执行sar –q命令后提示“command not found”,请先执行以下命令安装软件包:
- CentOS系统:yum install sysstat
- Ubuntu系统:apt install sysstat
sar -q
结果如下:
... 00:00:01 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:45:01 0 32722 0.10 0.12 0.16 0 10:46:01 1 32730 0.21 0.15 0.17 0 10:47:01 2 32752 0.07 0.11 0.15 0
- 执行以下命令,查看系统配置的最大进程数。
32768
如果系统当前已经运行的进程数接近或达到系统配置的最大进程数,则说明需要增大/proc/sys/kernel/pid_max的数值。
- 根据业务需要,执行以下命令,调整/proc/sys/kernel/pid_max的数值。
echo "kernel.pid_max=65530" >> /etc/sysctl.conf
sysctl -p
结果如下:
vm.swappiness = 0 net.core.somaxconn = 1024 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_max_syn_backlog = 1024 kernel.pid_max = 65530
父主题: 操作系统类(Linux)