#CentOS安裝系統狀態命令,如下性能指標命令沒有的能夠嘗試安裝 yum install -y sysstat
#查看整機系統性能命令 top -H # -H 能夠查看由某個進程啓動的全部線程 ,p指定要看的進程 top -Hp 6106
說明:該命令用來從全局的角度查看整機系統性能。java
#top命令的簡化版 [root@localhost home]# uptime 22:43:42 up 1:06, 2 users, load average: 0.97, 0.74, 0.40
#每兩秒採樣一次,共採樣3次 [root@localhost home]# vmstat -n 2 3 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 427172 2116 342488 0 0 23 4 494 564 3 7 91 0 0 1 0 0 427172 2116 342520 0 0 0 65 4586 4940 20 26 54 0 0 2 0 0 427172 2116 342524 0 0 0 0 4589 4940 20 25 54 0 0
項目 | 含義 |
---|---|
r | 運行和等待cpu時間片的進程數,原則上1核的cpu的運行隊列不要超過2,整個系統的運行隊列不要超過總核數的2倍 |
b | 等待資源的進程數,好比正在等待磁盤I/O、網絡I/O等 |
項目 | 含義 |
---|---|
us | 用戶進程消耗cpu時間百分比,us值高,表明用戶進程消耗cpu時間多,若是長期大於50%,須要優化程序 |
sy | 內核進程消耗的cpu時間百分比,us+sy參考值爲80%,超過此閾值代表cpu負荷過大 |
id | 處於空閒的cpu百分比 |
wa | 系統等待IO的cpu時間百分比 |
st | 來自於一個虛擬機竊取的cpu時間百分比 |
說明:該命令主要用來查看cpu的一些指標(包含但不限於)。ios
#查看全部cpu核心的信息,2秒採樣一次共三次,-P {|ALL} 表示監控哪一個CPU, cpu在[0,cpu個數-1]中取值 mpstat -P ALL 2 3
說明:查看全部cpu核信息,其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPUs系統裏,其不但能查看全部CPU的平均情況信息,並且可以查看特定CPU的信息。服務器
#查看cpu的信息,每秒鐘採樣1次共採樣5次,-p指定具體進程編號 pidstat -u 1 5 -p 1796 #查看內存信息,每秒鐘採樣1次共採樣5次,-p指定具體進程編號 pidstat -r 1 5 -p 1796 #查看磁盤信息,每秒鐘採樣1次共採樣5次,-p指定具體進程編號 pidstat -d 1 5 -p 1796
說明:查看某個具體的進程使用cpu的信息。網絡
#默認單位kb free #指定單位mb free -m #指定單位gb free -g
#查看磁盤剩餘空間 df -h
#查看磁盤IO情況,2秒採樣一次共三次 iostat -xdk 2 3
項目 | 含義 |
---|---|
rkB/s | 每秒讀取數據量kb |
wkB/s | 每秒寫入數據量kb |
svctm | IO請求的平均服務時間,單位毫秒 |
await | IO請求的平均等待時間,單位毫秒,值越小越好 |
util | 一秒中有百分之幾的時間用於IO操做,接近100%時,表示磁盤帶寬盤滿,須要優化程序或增長磁盤 |
說明:rkB/s、wkB/s長期超大的數據讀寫,確定不是正常現象;svctm與await值很接近,表示幾乎沒有IO等待,磁盤性能好,若是await值遠高於svctm的值,表示IO等待時間太長,待優化。性能
#查看網絡IO情況 ifstat 1
製造一個簡單的CPU密集計算的java程序,而後再服務器上跑起來,以此實例來模擬生產環境CPU佔用太高的場景。
優化
#編譯 javac WhileTrueDemo.java -d #運行示例程序,形成CPU密集計算 nohup java com.jayway.WhileTrueDemo &
說明:經過top命令基本能夠看出PID爲6106的進程CPU佔用過大。spa
#採用ps命令進一步查看搞事的java程序 [root@localhost home]# ps -ef | grep java | grep -v grep root 6106 1460 99 22:09 pts/0 00:52:15 java com.jayway.WhileTrueDemo #採用java自帶命令查看 [root@localhost home]# jps -l 6106 com.jayway.WhileTrueDemo 6238 sun.tools.jps.Jps
#-m 顯示全部的線程 #-p pid進程使用CPU的時間 #-o 該參數後是用戶自定義格式 ps -mp 6106 -o THREAD,tid,time
說明:從上圖可知6107這個線程佔用的CPU最多而且佔用CPU時間也最多,從它下手繼續分析。線程
#轉換線程號6107爲16進制英文小寫,結果爲:17db printf "%x\n" 6107
# 進程號爲6106,查找問題線程號17db(16進制英文小寫) jstack 6106 | grep 17db -C10
說明:從上圖就能夠看出WhileTrueDemo文件的第八行代碼是問題的根源。3d