在 CPU 负载过高的情况下如何优先保证 SSH 正常工作

在 CPU 负载过高的情况下如何优先保证 SSH 正常工作

我遇到了一个奇怪的问题,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/

我希望这能有所帮助

相关内容