系統(tǒng)很慢,是我們對(duì)性能出現(xiàn)瓶頸的直觀感受。那么怎樣診斷一個(gè)變慢了的系統(tǒng)的性能瓶頸呢?
CPU
1.top
可以查看CPU的整體使用率和空閑率
top -n 1只顯示一次,查看進(jìn)程消耗的CPU占比。
2. 查看CPU的數(shù)量/proc/cpuinfo和lscpu
3. 查看感興趣進(jìn)程的更多信息ps -lf3001
4. 查看此進(jìn)程機(jī)器父進(jìn)程的更多信息ps -o state,user,pid,ppid,nice,%cpu,cmd -p 3000,3001
5. 查看更多ps --forest -eouser,pid,ppid,%cpu,cmd
Memory:
free查看內(nèi)存使用情況
查看 out of memory killer情況。journalctl | grep "Out of memory"。
檢查某個(gè)特定進(jìn)程的 memory 使用情況ps -eouser,pid,ppid,%mem,rss,vsize,comm | grep PROCESS_NAME
vmstat-n 10 5
Disk:
1.iostat-x 10 3查看是否有I/O帶寬平并。跟vmstat一樣,不要看第一次輸出,那是從開(kāi)機(jī)到目前的平均值,從第二次輸出看起。
iowait值很高,CPU在等I/O,當(dāng)然這并不意味著就是在等磁盤。
r/s ,w/s 便是沒(méi)秒完成的讀和寫,await表示請(qǐng)求等待的平均時(shí)間(毫秒),%util表示此設(shè)備出來(lái)I/O請(qǐng)求用的CPU百分比。
2.mount命令查看掛載的磁盤
3. 如果找不到可以用ls -la /dev/dm-1
find -L /dev -samefile/dev/dm-1尋找所有鏈接到 .dev.dm-1的鏈接。
4.lvdisplay顯示邏輯卷,用pvdisplay查看邏輯卷背后的物理卷。
5. 查找處于Uninterruptible sleep的進(jìn)程,因?yàn)槠淇赡苷加煤芏郔/O。ps -elf | grep " D "。再次用ps -elf --forest獲得用戶啟動(dòng)的處于D狀態(tài)的進(jìn)程的詳細(xì)信息。
6. 查看相關(guān)進(jìn)程機(jī)器父進(jìn)程使用了多少I/O,cat /proc/PROCESS_ID/io
7.ps -elf | grep PROCESS_NAME查看進(jìn)程id是否變化,查看此進(jìn)程是否是一個(gè)存活時(shí)間很短的進(jìn)程。
8. 用iotop來(lái)查看那些進(jìn)程使用I/O最多。
Network:
ifstat跟vmstat和iostat一樣,都需要從第二個(gè)輸出看。
歷史統(tǒng)計(jì)數(shù)據(jù)比較
/etc/cron.d/sysstat設(shè)置了sysstat定時(shí)運(yùn)行的計(jì)劃,/etc/sysstat/sysstat中可以查看到日志文件保存的目錄。/var/log/sa/和/var/log/sysstat/分別是RHEL7和Ubuntu 16.04的默認(rèn)log存放路徑。
sar也可以查看iostat, top 以及vmstat查看到的信息。
CPU:
sar -u,查看某一天(7日)的用sar -f /var/log/sysstat/sa07 -u。
Memory:
sar -r
Disk:
sar -d -p
Network:
sar -n DEV