1、查看Linux系統CPU個數
#????grep 'model name' /proc/cpuinfo | wc -l
2窃肠、每次發(fā)現系統變慢時包个,我們通常做的第一件事,就是執(zhí)行top或者uptime命令
#????uptime?
2.1糯而、如果1分鐘天通、5分鐘、15分鐘的三個值基本相同熄驼,或者相差不大像寒,那就說明系統負載很平穩(wěn)。?
2.2瓜贾、但如果1分鐘的值遠小于15 分鐘的值萝映,就說明系統最近1分鐘的負載在減少,而過去15分鐘內卻有很大的負載阐虚。
2.3序臂、反過來,如果1分鐘的值遠大于 15 分鐘的值实束,就說明最近1分鐘的負載在增加奥秆,這種增加有可能只是臨時性的,也有可能還會持續(xù)增加下去咸灿,所以就需要持續(xù)觀察构订。一旦1分鐘的平均負載接近或超過了CPU的個數,就意味著系統正在發(fā)生過載的問題避矢,這時就得分析調查是哪里導致的問題悼瘾,并要想辦法優(yōu)化了。
??eg:假設我們在一個單 CPU 系統上看到平均負載為 1.73审胸,0.60亥宿,7.98,那么說明在過去 1 分鐘內砂沛,系統有 73% 的超載烫扼,而在 15 分鐘內,有 698% 的超載碍庵,從整體趨勢來看映企,系統的負載在降低。? ?
2.4静浴、當平均負載高于 CPU 數量70%的時候堰氓,你就應該分析排查負載高的問題了。一旦負載過高苹享,就可能導致進程響應變慢双絮,進而影響服務的正常功能。?
2.5、CPU 使用率掷邦,是單位時間內 CPU 繁忙情況的統計白胀,跟平均負載并不一定完全對應
2.5.1椭赋、CPU 密集型進程抚岗,使用大量 CPU 會導致平均負載升高,此時這兩者是一致的哪怔;
2.5.2宣蔚、I/O 密集型進程,等待 I/O 也會導致平均負載升高认境,但 CPU 使用率不一定很高胚委;
2.5.3、大量等待 CPU 的進程調度也會導致平均負載升高叉信,此時的CPU使用率也會比較高亩冬。
3、使用工具iostat(stress)硼身、mpstat硅急、pidstat 等工具,找出平均負載升高的根源
#????yum install -y epel-release
#????yum install -y stress
??#????yum install -y sysstat
3.1佳遂、stress 是一個 Linux 系統壓力測試工具营袜,這里我們用作異常進程模擬平均負載升高的場景??
3.2、而 sysstat 包含了常用的 Linux 性能工具丑罪,用來監(jiān)控和分析系統的性能荚板。我們的案例會用到這個包的兩個命令 mpstat 和 pidstat。?
3.2.1吩屹、mpstat 是一個常用的多核 CPU 性能分析工具跪另,用來實時查看每個 CPU 的性能指標,以及所有CPU的平均指標煤搜。
3.2.2罚斗、pidstat 是一個常用的進程性能分析工具,用來實時查看進程的 CPU宅楞、內存针姿、I/O 以及上下文切換等性能指標
場景一:CPU 密集型進程(需要開三個終端,登錄到同一臺 Linux 機器中)
首先厌衙,在第一個終端運行 stress 命令距淫,模擬一個 CPU 使用率 100% 的場景
#????stress --cpu 1 --timeout 600
接著,在第二個終端運行uptime查看平均負載的變化情況
#????watch -d uptime ???????????????????????? ### -d 參數表示高亮顯示變化的區(qū)域???
最后婶希,在第三個終端運行mpstat查看 CPU 使用率的變化情況
#????mpstat -P ALL 5? ? ? ? ? ? ? ? ? ? ? ? ?### -P ALL 表示監(jiān)控所有CPU榕暇,后面數字5表示間隔5秒后輸出一組數
那么到底是哪個進程壁晒,導致 iowait 這么高呢?我們還是用 pidstat 來查詢
#????pidstat -u 5 1 ???????????????? ???? ### 間隔5秒后輸出一組數據业栅,-u表示CPU指標 秒咐,從這里可以明顯看到,stress進程的CPU使用率為100%碘裕。
場景二:I/O 密集型進程
首先還是運行 stress 命令携取,但這次模擬 I/O 壓力,即不停地執(zhí)行 sync
#????stress -i 1 --timeout 600
還是在第二個終端運行uptime查看平均負載的變化情況
#????watch -d uptime
然后帮孔,第三個終端運行mpstat查看 CPU 使用率的變化情況
#????mpstat -P ALL 5 1 ???????????????????? # 顯示所有CPU的指標雷滋,并在間隔5秒輸出一組數據
那么到底是哪個進程,導致 iowait 這么高呢旷偿?我們還是用 pidstat 來查詢
#????pidstat -u 5 1 ???????????????????? ???????? # 間隔5秒后輸出一組數據烹俗,-u表示CPU指標?
### ?可以發(fā)現,還是 stress 進程導致的萍程。??
場景三:大量進程的場景
當系統中運行進程超出 CPU 運行能力時幢妄,就會出現等待 CPU 的進程。比如茫负,我們還是使用 stress蕉鸳,但這次模擬的是 4 個進程
#????stress -c 8 --timeout 600
由于系統只有 1 個CPU,明顯比 4 個進程要少得多忍法,因而潮尝,系統的 CPU 處于嚴重過載狀態(tài),平均負載高達3.71
#????uptime
接著再運行pidstat來看一下進程的情況
#????pidstat -u 5 1 # 間隔5秒后輸出一組數據饿序,-u表示CPU指標