今天早上我注意到一个 php 错误,抱怨无法访问设备。经过进一步调查,我发现这是由于虚拟内存已使用 100% 造成的。重启后(我想暂时清理一下)又出现了一个新问题。内存现在为 0%,但是没有进程可以写入它。
很长时间没有发生任何变化,因此我不确定问题可能出在哪里。没有日志表明可能是什么原因,尽管有些人抱怨无法写入虚拟内存(这显然是结果而不是原因)
你知道去哪儿寻找罪魁祸首吗?
服务器上正在运行的一些软件及其重启后的状态
opendkim - failed to start
postfix - failed to start
courrier - running
clamav - running
svnserve - running
mongodb - running (failing to read/write)
mysqld - failed to start
vsftpd - running
apache2 - success
答案1
感谢您发布所需信息。您的 RAM 为 2GB,但容量不足。您应该升级它,因为您有许多服务在其上运行。
但是,您的问题似乎是由于以下原因引起的,
Filesystem Size Used Avail Use% Mounted on
rootfs 10G 9.6G 0 100% /
/dev/root 10G 9.6G 0 100% /
清理根分区 / 中的某些文件以释放空间并重新启动服务。看起来您的某些服务无法写入 / 文件系统,因此出现错误。
从长远来看,您还应该考虑为 / 分区增加空间,因为您可能会反复遇到此问题。您的 /home 分区有 850GB,但使用率只有 3% :)
答案2
内存现在为 0%,但是没有进程可以对其进行写入。
这种说法毫无意义。如果你的虚拟内存不可写,那么系统将无法启动,你当然也不会有足够的权限进行如此深入的诊断。
您的意思是交换空间为 0%?
通过查看您发布的图片,我发现您使用的软件使用了错误的术语。(提示:虚拟内存是系统上可用的整个可寻址内存 - 对于 PC 类型的机器,这通常意味着 RAM 和交换:实际内存就是虚拟内存 - 交换也是如此)。
我认为你的第一步应该是阅读一些记忆,至少这样你就能掌握术语。
陷入这种状态的 Linux 服务器一定存在严重问题 - OOM 终止程序应该清除一些进程。(并且记录下它正在做什么)。
服务无法启动意味着机器在重启后仍然有问题 - 问题远不止简单的内存泄漏。如果您的交换空间不可写且进程无法启动,那么最可能的原因是磁盘正在翻转为只读(如果只是文件系统,那么它不会影响交换,除非您使用交换文件而不是交换分区 - 这很少是一个好主意)。有关更多信息,请参阅 hdparm 的手册页。
内存填满和磁盘切换为只读之间没有直接联系。这意味着 2 个不同的问题,尽管我建议使用基于主机的 IDS 对安装进行完整的完整性检查 - 当然,如果您还没有指纹数据库,那么您唯一的选择就是使用 rootkit 检测器。