Linux

很少使用的 Ubuntu 12.04 伺服器每 8 小時顯示一次高 CPU / 磁碟 I/O

  • May 27, 2015

我有一個基本的基於雲的伺服器,只在這里和那裡用於測試。自從我安裝 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)。
  • 一些安全測試表明伺服器沒有受到威脅。

這是什麼意思呢?有什麼我需要做的嗎?

(a) “查找(根)”的 CPU 問題非常高

這可能是重建定位數據庫的更新腳本,或者出於某種原因掃描您的磁碟的其他腳本。如果您ps auxwwf在問題發生時鍵入,則可以看到程序樹;查找導致問題的“查找”程序,然後查看執行它的內容(可能類似於“updatedb”)。

丹(曾經)很可能是正確的。我用這個文章和另一個文章來解決我的問題,

我有一個有類似問題的 VMWare Linux Mint 17.1。啟動幾分鐘後,90-100% 的 CPU 消耗了 15 分鐘左右——它有一個相當大的共享目錄,其中包含大量遺傳數據。

我使用 top 來獲取查找程序 ID(12788)。由於它消耗了所有 CPU 功率,因此它是最上面的第一行。這裡的一個區別是違規過程由“沒有人”擁有。

然後我執行 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”。然後我刪除了定位包。

命令行工具的另一個好答案是在 Unix Stack Exchange 上關於禁用 l​​ocate/updatedb

引用自:https://serverfault.com/questions/575458