【人在營運囧途_01】20個Linux系統內建監視工具:top 人在營運囧途、常常纏綿著伺服器的效能問題、如:I/O、CPU、記憶體、網路等瓶頸 那麼系統營運、豈能酣眠?以下工具有提神醒腦之功效喲~(@^_^@)~ ⑴ top 寫在前面的話、這裡 Rocky 想澄清一點、竊以為、top 最佳實務應該是: "想要找出最損耗 CPU 資源的那個進程" 找出來之後、按【P】、強制以 CPU 使用排序 有別於 ps 的靜態輸出、top 可持續監測進程的工作狀態、預設重新整理頻率為 5 次/s、不過選項【-d】可進行修改 top 預設以 CPU 使用率(%CPU)排序、按【M】則以記憶體(%MEM)排序、恢複按【P】、退出按【q】 top 輸出結果可分 2 部分:整個系統的資源使用狀況和每個進程的資源使用方式 先看上半部分的輸出案例: [plain] top - 00:09:57 up 3:22, 2 users, load average: 0.06, 0.17, 0.12 Tasks: 153 total, 2 running, 150 sleeping, 0 stopped, 1 zombie Cpu(s): 1.2%us, 1.2%sy, 0.1%ni, 96.6%id, 0.8%wa, 0.0%hi, 0.0%si, 0.1%st Mem: 1998848k total, 825504k used, 1173344k free, 77180k buffers Swap: 0k total, 0k used, 0k free, 421704k cached ① 第一行【top】顯示的內容: ● 目前時間:00:09:57 ● 開機到目前為止所經過的時間:3:22 時 ● 已經登入系統的使用者人數:2 ● 系統在每 1、5、15分鐘的平均使用負載、越小代表系統越閑置、若 >1 則要注意 ② 第二行【Tasks】顯示的內容: 目前程式的總量和每個程式在神馬狀態(running、sleeping、stopped、zombie) 需要注意的是zombie、如果非0、那麼需要注意 使用 "ps -lef | grep defunct"找出殭屍進程 有些zombie進程即便kill -9照舊置若罔聞、佔著茅坑不拉屎 [plain] [root@Rocky ~]# ps -lef | grep defunct 1 Z root 8519 8487 0 78 0 - 0 exit Mar28 ? 00:00:00 [Xsession] <defunct> 0 R root 17710 8875 0 78 0 - 1282 - 00:41 pts/1 00:00:00 grep defunct 完全清除zombie進程方法如下: ⒈ kill -18 PPID(ppid是其父進程、這裡是8487) ##告訴父進程、其子已死、請收回所配資源 ##如果不行、請看第 2 點 ⒉ 殺死zombie的父進程、不過、這之前先得把zombie的兄弟給幹掉 kill -15 PID1 PID2 而後、"kill -9 PPID" ③ 第三行【Cpu(s)】顯示CPU的整體負載: 特別注意【%wa】、這個代表 I/O wait、通常你機器變慢 I/O 是其主要的貢獻者 另外、如果是多核、按【1】卻換不同 CPU的負載率 ④ 注意 Swap 的使用率、越小越好 再來看下半部分的輸出案例: [plain] PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 470 root 15 0 53820 10m 5720 S 3.9 0.5 0:27.10 Xorg 1 root 15 0 2176 652 556 S 0.0 0.0 0:03.12 init 2 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0 3 root 34 19 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 5 root 10 -5 0 0 0 S 0.0 0.0 0:00.04 events/0 6 root 12 -5 0 0 0 S 0.0 0.0 0:00.00 khelper ① PID:每個進程的id ② USER:每個進程的所屬使用者 ③ PR:priority的簡寫、進程的優先執行順序、越小越好 ④ NI:nice的簡寫、 ⑤ %CPU:CPU 使用率 ⑥ %MEM:記憶體使用量率 ⑦ TIME+ :累計 CPU 的使用時間 下面介紹一些常見的用法 Ⅰ 每 2 秒更新一次 top: top -d 2 Ⅱ 將 top 輸出 2 次並把結果重新導向到/tmp/top.txt:top -b -n 2 > /tmp/top.txt Ⅲ 指定 某個進程的 top 輸出:top -p PID