作爲java程序員需要掌握的 Linux 常用性能分析命令
性能分析
vmstat
虛擬內存統計
用法
其中
- r : 運行和等待 CPU 時間片的進程數。若該值大於系統 CPU 個數,則說明 CPU 不足
- b : 表示等待資源的進程數
- swpd : 切換到內存交換區的內存大小(單位 KB)
- free: 空閒的物理內存的大小,我的機器內存總共2G,剩餘92M。
- buff: Linux/Unix系統是用來存儲,目錄裏面有什麼內容,權限等的緩存
- cache:直接用來記憶我們打開的文件,給文件做緩衝,把空閒的物理內存的一部分拿來做文件和目錄的緩存,是爲了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用
- si:每秒從磁盤讀入虛擬內存的大小,如果這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。
- so:每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上。
- bi:塊設備每秒接收的塊數量(讀磁盤)(kb/s)
- bo:塊設備每秒發送的塊數量(寫磁盤)(kb/s)
- in:每秒CPU的中斷次數,包括時間中斷
- cs:每秒上下文切換次數。
- us:用戶進程消耗 CPU 時間百分比
- sy:內核進程消耗 CPU 時間百分比,sy 的值較高時,則說明內核消耗的 CPU 資源很多
- id:空閒 CPU 時間百分比
- wt:IO 等待 CPU 時間百分比
free
內存使用狀況
load average: 系統 1分鐘,5分鐘,15分鐘的平均負荷
netstat
當前網絡信息
用法
其中
- -a (all)顯示所有選項,默認不顯示LISTEN相關
- -t (tcp)僅顯示tcp相關選項
- -u (udp)僅顯示udp相關選項
- -n 拒絕顯示別名,能顯示數字的全部轉化成數字
- -l 僅列出有在 Listen (監聽) 的服務狀態
- -p 顯示建立相關鏈接的程序名
- -r 顯示路由信息,路由表
- -e 顯示擴展信息,例如uid等
- -s 按各個協議進行統計
- -c 每隔一個固定時間,執行該netstat命令。
提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到
top
其中
第一行:
- 14:36:14 當前系統時間
- days, 4:43 系統已經運行了2天4小時43分鐘(在這期間沒有重啓過)
- 1 users 當前有1個用戶登錄系統
- load average: 0.00, 0.01, 0.05 ,後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
第二行:Tasks 任務(進程),
- 系統現在共有10個進程,其中處於運行中的有2個,108個在休眠(sleep),stoped狀態的有0個,zombie狀態(殭屍)的有0個。
第三行:cpu狀態
- us 用戶空間佔用CPU的百分比
- sy 內核空間佔用CPU的百分比
- ni 改變過優先級的進程佔用CPU的百分比
- id 空閒CPU百分比
- wa IO等待佔用CPU的百分比
- hi 硬中斷(Hardware IRQ)佔用CPU的百分比
- si 軟中斷(Software Interrupts)佔用CPU的百分比
第四行:內存狀態
- total 物理內存總量
- free 空閒內存總量
- used 使用中的內存總量
- buff/cache 緩存的內存量
第五行:swap交換分區
- total 交換區總量
- free 空閒交換區總量
- used 使用的交換區總量
- avail Mem 緩衝的交換區總量
第六行:各進程(任務)的狀態監控
- PID 進程id
- USER 進程所有者
- PR 進程優先級
- NI nice值。負值表示高優先級,正值表示低優先級
- VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
- RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
- SHR 共享內存大小,單位kb
- S 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=殭屍進程
- %CPU 上次更新到現在的CPU時間佔用百分比
- %MEM 進程使用的物理內存百分比
- TIME+ 進程使用的CPU時間總計,單位1/100秒
- COMMAND 進程名稱(命令名/命令行)
監控java線程數:
1
ps -eLf grep java wc -l
監控網絡客戶連接數:
netstat -n grep tcp grep 偵聽端口 wc -l