前沿:
CPU和內存是系統層面影響應用性能的重要因素
一.CPU性能監控
查看系統的cpu使用率是否有異常的常用命令有top,vmstat,ps等。
1.top命令
通過命令 top 查看CPU使用情況,按P查看佔用cpu最高的進程
top ##監控系統負載工具
%cpu
- us 表示用戶進程處理所佔的百分比
- sy 表示爲內核線程處理所佔的百分比
- ni 表示被nice命令改變優先級的任務所佔的百分比
- id 表示cpu的空閒時間所佔的百分比
- wa 表示爲在執行過程中等待io所佔的百分比
- hi 表示爲硬件中斷所佔的百分比
- si 表示爲軟件中斷所佔的百分比
- st 表示虛擬cpu等待實際cpu的時間的百分比
cpu性能監控主要通過us(用戶進程所佔用百分比)這個數據來看異常的進程信息。當us接近100%甚至更高時,可以確定是cpu繁忙造成的響應緩慢。一般說來,cpu繁忙的原因有以下幾個:
- 線程中有無限空循環、無阻塞、正則匹配或者單純的計算
- 頻繁的gc
- 多線程頻繁的上下文切換
top顯示進程信息詳解
字段 | 說明 |
---|---|
top | 系統當期時間 |
up | 系統運行時長 |
user | 登錄當前系統的用戶數量 |
load average | 平均負載1 ,5,15 分鐘的隊列長度 |
task | 任務 |
Mem | 物理內存 |
swap | 交換分區佔用 |
%cpu | cpu佔用百分比 |
top字段解釋
字段 | 解釋 |
---|---|
PID | 進程ID |
USER | 用戶名稱 |
PR | 優先級 |
NI | nice值。負值表示高優先級,正值表示低優先級 |
VIRT | 進程使用的虛擬內存總量 |
RES | 進程使用的、未被換出的物理內存大小 |
SHR | 共享內存大小 |
S | 進程狀態 (D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=殭屍進程 ) |
%CPU | 佔用cpu百分比 |
%MEM | 佔用內存百分比 |
TIME+ | 進程使用的CPU時間總計 |
COMMAND | 進程名稱 |
top內部參數
參數 | 說明 |
---|---|
P | cpu百分比排序 |
M | 內存百分比 |
T | 累計佔用cpu時間 |
l | 開啓/關掉uptime信息 |
t | 開啓/關閉task&cpu信息 |
s | 調整刷新頻率 |
k | 終止進程 |
u | 查看指定用戶進程 |
2.ps命令
ps ax -o %cpu,comm,pid --sort -%cpu | head -n 10 ##按照cpu負載進行排序
查使用CPU最多的K個進程
ps -aux | sort -k4nr | head -K
命令解釋:
- ps -aux (a指代all——所有的進程,u指代userid——執行該進程的用戶id,x指代顯示所有程序,不以終端機來區分)
- sort -k4nr中(k代表從第幾個位置開始,後面的數字4即是其開始位置,結束位置如果沒有,則默認到最後;n指代numberic sort,根據其數值排序;r指代reverse,這裏是指反向比較結果,輸出時默認從小到大,反向後從大到小。)。本例中,可以看到%MEM在第4個位置,根據%MEM的數值進行由大到小的排序。
- head -K(K指代行數,即輸出前幾位的結果)
- |爲管道符號,將查詢出的結果導到下面的命令中進行下一步的操作
3.vmstat
- in 每秒CPU的中斷次數,包括時間中斷
- cs 每秒上下文切換次數
- us 用戶CPU時間。
- sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。
- id 空閒 CPU時間,一般來說,id + us + sy = 100,一般我認爲id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
- wt 等待IO CPU時間
二.內存性能監控
1.top命令
通過命令 top 查看內存使用情況,按M查看佔用內存最高的進程
2.ps命令
ps ax -o %mem,comm,pid --sort -%mem | less ##按照內存負載進行排序
查看使用內存最多的進程
ps -aux | sort -k3nr | head -K