资源过度利用是否真的会导致用户无法通过 SSH 连接到 Linux?

资源过度利用是否真的会导致用户无法通过 SSH 连接到 Linux?

我工作的夜间支持人员倾向于重新启动机器,理由是他们无法通过 ssh 登录并首先弄清楚发生了什么。这样做非常违反公司政策(作为负责设备上代码的人,这至少违反了我的政策)

但是,撇开政策和政治不谈,实际上从来没有出现过资源过度利用会完全瘫痪机器到根本无法 ssh 的情况,不是吗?根据我的经验,你会得到一个极其缓慢的终端,但 ssh 每两分钟就会得到一两个周期,你可以杀死有问题的进程,并可能得到堆栈转储。

重新启动机器可能是权宜之计,但我认为“如果我们杀死它,我们就不会学到任何东西”。因此,如果有人能给我一些弹药来证明重新启动不是解决办法,并提供一些故障排除指南来帮助过度劳累的夜班人员 ssh 登录到几乎已关闭的机器,那么我可以使用一些帮助。

答案1

如果服务器的CPU 被完全消耗,它将没有周期来服务您的ssh请求。

如果它完全消耗了内存,它将无法fork为您创建新的 sshd 进程。

我发现 ssh 经常无法工作,这是由于资源过度利用造成的。

也就是说,在没有找出根本原因的情况下,反复采取重锤式重启的做法似乎是不明智和短视的。

答案2

这实际上只是一个评论太长的评论。

您问题的简短回答是:

是的。资源过度利用可能会破坏服务器拥有的每一项功能。每个进程都需要内存。当记忆耗尽时,悲伤的时刻。

长答案

如果您无法在机器陷入困境时恢复机器,那么找到根本原因就会更加困难。

下次机器出现故障时,请尝试挽救它。立即让它停止做你已经知道它正在做的事情。不要浪费宝贵的时间尝试运行诊断命令。首先让它停止做你知道它正在做的事情。它是一个Web服务器,立即杀死所有apache/nginx/lighttpd进程。如果它运行电子邮件,请立即终止所有电子邮件进程。如果它是数据库服务器,请勿直接终止数据库进程,而是立即发出停止命令(如果所有数据库请求都来自网站或某些应用程序,则只需终止为该应用程序提供服务的网络服务器或服务)。

您需要关闭向您的服务器提供越来越多进程的任何内容,以阻止您的服务器盲目地尝试回答所有请求并因内存不足而死亡。

一旦它在某种程度上得到控制,并且假设您无法通过诊断找到任何内容,那么您唯一的希望就是日志。如果是网络/电子邮件/数据库服务器,请检查日志中是否有特定时间范围内发出请求的 IP 数量等信息,比较服务器出现故障的次数与正常运行的次数。检查资源问题发生之前和期间发出的 Web 或电子邮件请求的类型。检查写入磁盘的数据库查询数量,磁盘 I/O 问题很容易导致服务器崩溃。您可能会发现长时间运行/磁盘写入数据库查询和/或滥用电子邮件/网络用户的问题。

此外,一旦服务关闭并且您正在寻找线索,请检查进程列表中是否有任何不应以系统用户身份运行的现有进程。例如,您关闭 apache,它以“nobody”身份运行,查看是否有任何其他脚本正在由“nobody”运行。有时你可以通过这种方式找到恶意 shell 和上传到 tmp 的东西。

使用 top 查找占用大量内存的任何内容,如果您不确定该过程,请对其进行调查。使用 lsof 等命令和其他系统工具来查看该进程正在运行的目录,以及任何可以为您提供非法进程线索的信息。

你很可能会找到这样的东西。如果你不能因为日志记录很糟糕,那么至少打开/启用日志记录,如果它再次发生,你将获得更多数据。如果它是文件服务器(ftp、scp 等),请启用日志记录,以便您可以看到文件何时上传/下载。您网络上的人们是否同时进行大量上传/下载?

这些只是冰山一角,您可以做很多事情,但请将其视为调查,您需要线索来开展工作。

相关内容