我遇到了一个奇怪的问题,Fedora Linux VPS 服务器报告 CPU 100%,并且实际上变得无法使用,但我不知道原因,因为高负载阻止我通过 SSH 进入它来查看问题所在。
我如何确定优先级或配置 SSH,以便即使某个进程正在消耗所有其他 CPU,我仍然能够连接?
答案1
如果这确实是与 CPU/负载相关的问题,您可以(重新)优化服务器上的 sshd 进程,使其具有更高的优先级。要使其持久,您可以在 sshd init 脚本中添加 nice。
答案2
创建一个记录进程的脚本:
#!/bin/bash
top -b -c -n 1 -d 1 > /tmp/top-$(date "+%Y-%m-%d_%H-%M-%S")
设置一个 cron 作业,每分钟运行一次脚本:
*/1 * * * * /path/to/script.sh
下次您的系统无响应时,您将记录导致此问题的原因。
答案3
我正在运行的代码占用了 Docker 的所有资源,因此我通过以下方式启动容器,从而限制了容器可能消耗的 CPU 数量
--cpus=7.5
因为我有 8 个核心,这意味着我应该始终有半个核心用于将 SSH 会话处理到运行容器的实际服务器(除非其他进程也占用了这些资源)。
为了更好地衡量,我还限制了容器的内存使用量
--memory=4g
https://docs.docker.com/config/containers/resource_constraints/#cpu
答案4
如果您不介意的话,我认为您问错了问题。您确实想知道是什么占用了如此多的资源,以至于您无法登录。我多次遇到过这个问题,解决方案是不断跟踪服务器上发生的事情。我想出了一个尽可能轻量的解决方案,减少了被资源占用大户阻止的可能性:
http://linuxtech.ie/wordpress/2012/09/05/finding-a-severe-resource-hog-on-your-server/
我希望这能有所帮助