fork:无法分配内存

fork:无法分配内存

我在几台服务器上遇到了一些问题,这些服务器的连接数相当多。

服务器只是挂起等待新的网络连接(尽管 haproxy 中的负载平衡功能似乎正常工作)。我无法连接到 ssh,并且服务器无法连接到其他套接字。

我保持通过屏幕上的一个控制台连接到服务器。然后发生错误,我无法通过屏幕执行任何命令。

# ls
-bash: fork: Cannot allocate memory 

我无法执行“free -m”来显示内存数量,但我得到的监控表明,最后发送的值是(可用RAM、可用缓冲区、可用交换空间)(3597MB、5793、5783)。

尽管我将 tcp_fin_timeout 更改为 15(9155 TIME_WAIT,55 ESTABLISHED),但服务器在 netstat 中仍有许多 TIME_WAIT 连接。我只能运行 ulimits -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 88064
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 88064
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited 

PS. 这不是VPS. 这是DELL.

答案1

如果您知道哪些进程导致了这一切(即 Apache),您可以尝试使用命令 来从这种情况中恢复exec killall -9 httpd。这将用 killall 程序替换当前 shell,这有望消除有问题的进程,让您进一步分析问题。但请注意,这是一次性尝试,之后您的屏幕会话中的 shell 将消失,因此如果此操作失败,您将需要硬重启。

相关内容