cenots7.6系统报“fork:Cannot allocate memory” 报错的解决方法(实操)

今日早晨上班上报一台虚拟机无法ssh连接,想着大抵是关机了,又或是存储满了(经常遇到这样的事情,因为基本上都是做的厚置备,所以会导致分配容量大于实际容量)。

打开后台查看报警事件,没有!

预感到此事不大简单。。。。

进入控制台,输入

w

好家伙,输出

fork:Cannot allocate memory

翻译一下:内存不足或者进程数超限

再次尝试输入

free

想查看当前内存使用情况,同样命令不执行,无法查看

在与使用人沟通后,直接关闭电源重启虚拟机解决。

ps:可执行命令解决方法

1. 查看系统内存使用率是否过高,确定内存不足后禁用内存占用较多的无关服务或者添加内存。

通过 free、top 命令查看内存使用情况

# top
top - 10:43:05 up 6 days,  1:05,  1 user,  load average: 0.00, 0.01, 0.05
Tasks: 133 total,   1 running, 132 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8009256 total,  5404700 free,   273716 used,  2330840 buff/cache
KiB Swap:  8257532 total,  8257532 free,        0 used.  7412252 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    9 root      20   0       0      0      0 S   0.3  0.0   4:46.06 rcu_sched
 1878 root      20   0   21692   1324   1000 S   0.3  0.0   1:59.66 irqbalance
 9540 root      20   0       0      0      0 S   0.3  0.0   0:57.49 kworker/0:1
15937 root      20   0  162096   2268   1592 R   0.3  0.0   0:00.05 top
22101 root      20   0       0      0      0 S   0.3  0.0   0:23.94 kworker/1:4
26850 root      20   0  275292   5028   3756 S   0.3  0.1  13:30.88 vmtoolsd

# free -m   -m 参数就是用 M显示内容使用情况
              total        used        free      shared  buff/cache   available
Mem:           7821         266        5278          16        2276        7238
Swap:          8063           0        8063


total=used+free
total:表示物理,内存总量–机器总的物理内存 单位为:M
used:用掉的内存{ 总计分配给缓存(包含Buffer和cache)使用的数量,但其中可能部分缓存并未实际使用 }
free: 空闲的物理内存–未被分配的内存
shared:共享内存,一般系统不会用到,这里也不讨论
buffers:系统分配但未被使用的buffers数量
cached:系统分配但未被使用的cache数量

2.查看 /var/log/message 是否存在 oom 的记录。

# grep "Out of memory" /var/log/messages
#

> Linux 内核有个机制叫OOM killer(Out Of Memory killer)。该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉。

3. 核实总进程数是否超限,并修改总进程数 pid_max 配置。

查看系统 pid_max 值。 pid_max 默认值为32768。

root@:~# sysctl kernel.pid_max
kernel.pid_max = 32768

查看系统内部总进程数。 若总进程数达到了 pid_max,则系统在创建新进程时会报 fork Cannot allocate memory 错。

# yum install psmisc   
pstree -p | wc -l  如没有此命令先安装
744
ps -eLf | wc -l

临时增加总进程数 pid_max

# sysctl -w kernel.pid_max=65535
kernel.pid_max = 65535

永久修改总进程数 pid_max,使配置立即生效。

# echo "kernel.pid_max = 65555" >> /etc/sysctl.conf
# sysctl -p
kernel.pid_max = 65555
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马搏士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值