一、模擬程式出現問題,代碼如下:
import java.util.UUID;
public class MangoDemo {
public static void main(String[] args) {
while (true){
System.out.println(UUID.randomUUID());
}
}
}
將MangoDemo.java檔案放到Linux服務器,然后運行,效果如下圖:

二、診斷思路:
1、通過top命令查詢整個服務器資源被占用情況,主要看下圖2中的CPU和記憶體占用情況,以及下圖1系統的負載均衡,load average:后面三個數字,分別代表1分鐘,5分鐘,15分鐘系統的平均負載值,3個值相加除以3 再乘以100%,如果大于60%,說明系統負載嚴重,

如果要查詢load average,也可以用uptime命令,

2、使用 vmstat 命令查看CPU: vmstat -n 2 3 (表示每2秒采樣一次,總共采樣三次),

主要是看r , b , us , sy , id,這幾個引數,
- procs
r : 運行和等待CPU時間片的行程數,原則上1核的CPU的運行佇列不要超過2個,整個系統的運行佇列不能超過總核數的兩倍,否則表示系統壓力過大,
b : 等待資源的行程數,比如正在等待磁盤I/O、網路I/O等, - cpu
us : 用戶行程消耗CPU時間百分比,us值越高,用戶行程消耗CPU時間越多,如果長期大于50%,優化程式,
sy : 內核行程消耗的CPU時間的百分比,
id : 處于空閑的CPU百分比,
us+sy+id = 100%; us + sy 如果大于40%,也即id 小于60%說明CPU可能不足,
2.1、查看所有CPU核資訊: mpstat -P ALL 2
usr 等于 上圖的us;sys 等于上圖的sy;idle 等于上圖的id,

2.2、每個行程使用cpu的用量分解資訊:pidstat -u 1 -p 行程編號

3、使用 free 命令查看系統記憶體:free -m

3.1、也可以使用 pidstat -p 行程號 -r 采樣間隔秒數 命令查看記憶體被占用的情況,

4、查看磁盤剩余空閑數:df -h

5、查看磁盤I/O: iostat -xdk 2 3

主要看%util欄位:util表示一秒鐘有百分幾的時間用于I/O操作,接近100%時,表示磁盤帶寬跑滿了,需要優化程式或者增加磁盤,
5.1、也可以使用 pidstat -d 采樣間隔秒數 -p 行程號 命令來查看磁盤I/O,

6、網路I/O:ifstat

總結:診斷服務器和性能評估,基本就這些命令和步驟,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263732.html
標籤:其他
