每隔几天,我的系统就会在不同的时间开始疯狂地交换,负载变得非常高,导致系统响应速度非常慢。有时我等了 4 个小时才恢复,其他时候我只是使用 Magic SysRq 键重新启动或关闭(所以是的,内核仍然响应正常并且响应迅速)。交换空间和操作系统位于一对镜像 SSD 上。
当系统变得疯狂时,kswapd
CPU 的使用率始终最高,而顶部附近的其余任务也会发生变化。这是系统疯狂时的输出
示例。 top
4.5GB 左右的内存使用量对于系统来说是正常的。
有时删除缓存解决问题。其他时候则不然。有时停止新进程启动工作以恢复系统,有时则不停止 - 例如停止cron
(我安排了几个常规进程)或nagios
(触发常规插件)
有时我发现 OOM 杀手杀死了一些进程以恢复一些内存,但这并不总是能修复系统。
该系统上的负载很长一段时间没有真正改变,突然这种情况开始发生。我认为它可能是在我升级到内核 4.16.* 时开始的,但我恢复到内核 4.15.* 并且没有修复它。
我确实编写了一个脚本来定期收集各种信息,从中我可以清楚地看到系统开始疯狂的时间。我目前没有可用的数据,下次系统出现问题时我必须提供该数据。
以下是加载过程,由我编写的脚本记录: 负荷进展历史
当它说“尝试修复高负载”时,它正在尝试使用以下方式删除缓存sync;echo 3 > /proc/sys/vm/drop_caches
有什么想法我应该看什么吗?我需要一些帮助来弄清楚发生了什么事。谢谢
答案1
系统显然在几个时间点内存不足,OOM 杀手事件和交换使用应该告诉您这一点。
然而,在 16GB RAM 下并在同一台服务器上运行 MythTV+MySQL+Nagios+Apache、pserver、CVS 和天知道还有什么(我只是从你的top
输出中猜测)可能对它来说太多了。 RAM 和 I/O 中。
我们也不知道 Nagios 中有多少事件,以及它们的日程安排如何。时间太短,事件太多,它们会在完整运行之前就开始发射,并且会吃掉任何机器,无论它有多强大。当机器开始变得饥饿时,他们可能没有时间全面运转,突然间,你有大量的 Nagios 检查正在进行。最重要的是你说你有cronjobs......
我会考虑拥有更多资源,并使用所有这些服务运行几台机器和/或虚拟机。消费类计算机也无法承受如此多的 I/O,在某些时候,如果您正在做一些严肃的工作,则必须采用服务器级。
显然,在某些时候,您还必须进行一些 Nagios 和 MySQL 适当的配置管理/DBA 干预来管理可用资源。
如何组织所有这些超出了本答案的范围。正如一句古老的格言所说,不要把所有的鸡蛋放在一个篮子里。
附言。在这里阅读你的顶部图片,看看每个进程大致使用了多少内存(他们可能使用更多的交换空间,但你知道他们至少正在使用它。算一下)。该顶部是一个非常粗略的指标,表明您的 RAM 计算结果远远低于系统所需的值。
PS2。我主要是猜测事情,显然不知道你的具体配置。将文本作为一般推荐指南。