我在几台服务器上遇到了一些问题,这些服务器的连接数相当多。
服务器只是挂起等待新的网络连接(尽管 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 将消失,因此如果此操作失败,您将需要硬重启。