几乎不使用的 Ubuntu 12.04 服务器每 8 小时显示高 CPU/磁盘 I/O

几乎不使用的 Ubuntu 12.04 服务器每 8 小时显示高 CPU/磁盘 I/O

我有一个基本的基于云的服务器,仅偶尔用于测试。自从我安装了 New Relic(昨天)以来,它每 8 小时就会报告一次高磁盘 I/O 和高 CPU 问题(>90%),每次总共约 25 分钟。

New Relic 似乎存在以下问题:

(a) very high CPU issue with "find (root)"
(b) high usage of dev/xvda1

我的服务器提供商不知道问题是什么,因为他们没有看到任何东西。

  • 我的日志显示使用量为零 — 当时没有访问者。
  • 该服务器上的 PHP/Apache 没有问题(根据 New Relic)。
  • 一些安全测试表明该服务器并未受到威胁。

这一切意味着什么?我需要做什么吗?

答案1

(a)“find (root)”时 CPU 占用非常高的问题

这可能是更新脚本重建定位数据库,或者出于某种原因扫描磁盘的其他脚本。如果您ps auxwwf在问题发生时键入,则可以看到进程树;查找导致问题的“find”进程,然后查看正在运行该进程的进程(可能是“updatedb”之类的进程)。

答案2

Dan 很可能是正确的。我使用这篇文章和另一篇文章来解决我的问题,

我有一个 VMWare Linux Mint 17.1,它有类似的问题。启动几分钟后,90-100% 的 CPU 被消耗了 15 分钟左右——它有一个相当大的共享目录,其中包含大量基因数据。

我使用 top 来获取查找进程 ID (12788)。由于它消耗了所有 CPU 能力,因此它位于顶部的第一行。这里的一个区别是,有问题的进程由“nobody”拥有。

然后我运行 ps -auxwwf 并找到了这棵树——注意最后一行的 find 命令。

root      1334  0.0  0.0  12780   960 ?        Ss   07:15   0:00 anacron -s
root     12676  0.0  0.0   4440   652 ?        S    07:20   0:00  \_ /bin/sh -c run-parts --report /etc/cron.daily
root     12677  0.0  0.0   4332   648 ?        S    07:20   0:00      \_ run-parts --report /etc/cron.daily
root     12749  0.0  0.0   4440   652 ?        S    07:20   0:00          \_ /bin/sh /etc/cron.daily/locate
root     12754  0.0  0.0   4440   744 ?        SN   07:20   0:00              \_ /bin/sh /usr/bin/updatedb.findutils
root     12762  0.0  0.0   4440   336 ?        SN   07:20   0:00                  \_ /bin/sh /usr/bin/updatedb.findutils
root     12788  0.0  0.0  86152  2384 ?        SN   07:20   0:00                  |   \_ su nobody -s /bin/sh -c /usr/bin/find / -ignore_readdir_race      \( -fstype NFS -o -fstype nfs -o -fstype nfs4 -o -fstype afs -o -fstype binfmt_misc -o -fstype proc -o -fstype smbfs -o -fstype autofs -o -fstype iso9660 -o -fstype ncpfs -o -fstype coda -o -fstype devpts -o -fstype ftpfs -o -fstype devfs -o -fstype mfs -o -fstype shfs -o -fstype sysfs -o -fstype cifs -o -fstype lustre_lite -o -fstype tmpfs -o -fstype usbfs -o -fstype udf -o -fstype ocfs2 -o      -type d -regex '\(^/tmp$\)\|\(^/usr/tmp$\)\|\(^/var/tmp$\)\|\(^/afs$\)\|\(^/amd$\)\|\(^/alex$\)\|\(^/var/spool$\)\|\(^/sfs$\)\|\(^/media$\)\|\(^/var/lib/schroot/mount$\)' \) -prune -o -print0

我没有安装 rpm,因此我使用了 Synaptic 软件包管理器 GUI,并在软件包和名称中搜索“updatedb”。使用 updatedb 安装的唯一软件包是“locate”。然后我删除了locate 软件包。

使用命令行工具的另一个好答案是关于禁用locate/updatedb的Unix Stack Exchange

相关内容