What Do I Do If Error "Cannot allocate memory" Is Displayed?
Symptom
A Linux ECS has sufficient memory, but the error "Cannot allocate memory" is displayed during command execution or service start.
Command output:
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
Possible Causes
The number of running processes or threads in the system reaches the upper limit. The upper limit is specified by the kernel parameter /proc/sys/kernel/pid_max.
Solution
- Remotely log in to the ECS.
- Run the following command to check the number of running processes:
The command output is as follows:
32753
You can also run the sar –q command to view the number of running processes in the plist-sz column.
If "command not found" is displayed, run the command to install the software package first.
- CentOS: yum install sysstat
- Ubuntu: apt install sysstat
sar -q
The command output is as follows:
... 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
- Run the following command to check the maximum number of processes configured in the system:
32768
If the number of running processes is close to or has reached the maximum number of processes, you need to increase the value of /proc/sys/kernel/pid_max.
-
Run the following commands to change the value of /proc/sys/kernel/pid_max, for example, to 65530.
echo "kernel.pid_max=65530" >> /etc/sysctl.conf
sysctl -p
The command output is as follows:
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
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot