华为云服务器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实例。
执行以下命令,查看系统当前已运行的进程数。

ps -eLf | wc -l

结果如下:

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

执行以下命令,查看系统配置的最大进程数。

cat /proc/sys/kernel/pid_max

32768

如果系统当前已经运行的进程数接近或达到系统配置的最大进程数,则说明需要增大/proc/sys/kernel/pid_max的数值。

根据业务需要,执行以下命令,调整/proc/sys/kernel/pid_max的数值。

以调整为65530为例:

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)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家