為了能准確獲得程序的性能信息,需要使用各種輔助工具。以下主要介紹了Linux上關於Java的系統性能分析工具,掌握這些工具,對於性能瓶頸定位、系統故障排查都有幫助。
1、top命令
1 [root@localhost ~]# top 2 top - 10:00:05 up 4 days, 22:16, 1 user, load average: 0.00, 0.01, 0.05 3 Tasks: 211 total, 1 running, 210 sleeping, 0 stopped, 0 zombie 4 Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 5 Mem: 8064684k total, 3277888k used, 4786796k free, 202912k buffers 6 Swap: 8142844k total, 0k used, 8142844k free, 2503844k cached 7 8 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9 18730 root 20 0 15196 1220 840 R 0.3 0.0 0:00.06 top 10 1 root 20 0 19408 1576 1252 S 0.0 0.0 0:00.87 init 11 2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd 12 3 root 20 0 0 0 0 S 0.0 0.0 0:00.31 ksoftirqd/0 13 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 14 7 root RT 0 0 0 0 S 0.0 0.0 0:00.03 migration/
【釋義】
第一行:top - 10:00:05 up 4 days, 22:16, 1 user, load average: 0.00, 0.01, 0.05
任務隊列信息:與uptime命令執行結果一樣。
10:00:05 | up 4 days, 22:16 | 1 user | load average: 0.00, 0.01, 0.05 |
當前系統時間 | 系統運行時間,格式為時:分 | 當前登錄用戶數 | 系統負載,即任務隊列的平均長度。 三個數值分別為 1分鍾、5分鍾、15分鍾前到現在的平均值。 |
第二行:Tasks: 211 total, 1 running, 210 sleeping, 0 stopped, 0 zombie
進程統計信息:
211 total | 1 running | 210 sleeping | 0 stopped | 0 zombie |
進程總數 | 正在運行的進程數 | 睡眠的進程數 | 停止的進程數 | 僵屍進程數 |
第三行:Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
CPU統計信息:
0.0%us | 0.0%sy | 0.0%ni | 100.0%id | 0.0%wa | 0.0%hi | 0.0%si | 0.0%st |
用戶空間CPU占用率 | 內核空間CPU占用率 | 用戶進程空間內改變過優先級的進程CPU占用率 | 空閑CPU占用率 | 等待輸入輸出的CPU時間百分比 | 硬件中斷請求 | 軟件中斷請求 | Steal Time |
第四、五行:Mem: 8064684k total, 3277888k used, 4786796k free, 202912k buffers
Swap: 8142844k total, 0k used, 8142844k free, 2503844k cached
內存信息:
Mem | 8064684k total | 3277888k used | 4786796k free | 202912k buffers |
物理內存總量 | 已使用的物理內存 | 空閑物理內存 | 內核緩存使用量 | |
Swap | 8142844k total | 0k used | 8142844k free | 2503844k cached |
交換區總量 | 使用的交換區總量 | 空閑交換區大小 | 緩存交換區大小 |
第六行:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
進程信息:
PID | USER | PR | NI | VIRT | RES |
進程id |
進程所有者的用戶id | 優先級 | nice值。負值表示高優先級,正值表示低優先級 | 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES | 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA |
SHR |
S | %CPU | %MEM | TIME+ | COMMAND |
共享內存大小,單位kb | 進程狀態。 D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程 |
上次更新到現在的CPU時間占用百分比 | 進程使用的物理內存百分比 | 進程使用的CPU時間總計,單位1/100秒 | 命令名/命令行 |
還有其他的一些參數,這里沒有列出,了解請查看《Java程序性能優化-讓你的Java程序更快、更穩定》這本書的第300頁。
另外,top命令還有一些比較使用的交互命令:
f | o | h | k | q | c | M | P | T | 數字1 |
可以進行列的選擇 | 可以更改列的顯示順序 | 顯示幫組信息 | 終止一個進程 | 退出程序 | 切換顯示命令名稱和完整命令行 | 根據駐留內存大小進行排序 | 根據CPU使用百分比大小進行排序 | 根據時間/累積時間進行排序 | 顯示所有CPU負載情況 |
注意:使用top命令可以從宏觀上觀察系統各個進程對CPU的占用情況以及內存使用情況
2、sar命令
3、vmstat命令
4、iostat命令
5、pidstat命令