Java性能監控與調優工具(Linux、Windows篇)

編程語言 Java Linux Windows CPU javafirst 2018-12-17
作者:像風一樣i
來源:https://www.cnblogs.com/yueshutong/p/9801354.html
Java性能監控與調優工具(Linux、Windows篇)

1.Linux命令行工具

推薦:CentOS 7

1.1 top命令

top命令的輸出如下:

Java性能監控與調優工具(Linux、Windows篇)

top命令的輸出可以分為兩部分:前半部分是系統統計信息,後半部分是進程信息。在統計信息中,

第1行是任務隊列信息,它的結果等同於 uptime 命令。從左到右依次表示:系統當前時間、系統運行時間、當前登錄用戶數。最後的 load average 表示系統的平均負載,即任務隊列的平均長度,這3個值分別表示1分鐘、5分鐘、15分鐘到現在的平均值。

第2行是進程統計信息,分別有進程總數量、正在運行的進程數、睡眠進程數、停止的進程數、殭屍進程數。

第3行是CPU統計信息,us 表示用戶空間CPU的佔用率、sy表示內核空間CPU佔用率、ni表示用戶進程空間改變過優先級的進程CPU的佔用率、id表示空閒CPU佔用率、wa表示等待輸入輸出的CPU的時間百分比、hi表示硬件中斷請求、si表示軟件中斷請求。

第4行,在Mem行中,從左到右,依次表示物理內存總量、已使用的物理內存。空閒物理內存、內核緩衝使用量。

第5行,Swap行依次表示交換區總量、空閒交換區大小、緩衝交換區大小。

top 命令的第2部分是進程信息區,顯示了系統內各個進程的資源使用情況。在這張表格中,可能出現的列及其含義如下:

  • PID:進程id。
  • PPID:父進程id。
  • RUSER:Real user name。
  • UID:進程所有者的用戶id。
  • USER:進程所有者的用戶名。
  • GROUP:進程所有者組名。
  • TTY:啟動進程的終端名。不是從終端啟動的進程則顯示為?。
  • PR:優先級。
  • NI:nice值。負值表示高優先級,正值表示低優先級。
  • P:最後使用的CPU,僅在多CPU環境下有意義。
  • %CPU:上次更新到現在的CPU時間佔用百分比。
  • TIME:進程使用的CPU時間總計,單位秒。
  • TIME+:進程使用的CPU時間總計,單位1/100秒。
  • %MEM:進程使用的物理內存百分比。
  • VIRT:進程使用的虛擬內存總量,單位KB。VIRT=SWAP+RES。
  • SWAP:進程使用的虛擬內存中被換出的大小,單位KB。
  • RES:進程使用的、未被換出的物理內存大小,單位KB。RES=CODE+DATA。
  • CODE:可執行代碼佔用的物理內存大小,單位KB。
  • DATA:可執行代碼以外的部分(數據段+棧)佔用的物理內存大小,單位KB。
  • SHR:共享內存大小,單位KB。
  • nFLT:頁面錯誤次數。
  • nDRT:最後一次寫入到現在,被修改過的頁面數。
  • S:進程狀態。D表示不可中斷的睡眠狀態;R表示運行;S表示睡眠;T表示跟蹤/停止;Z表示殭屍進程。
  • COMMAND:命令名/命令行。
  • WCHAN:若該進程在睡眠,則顯示睡眠中的系統函數名。
  • Flags:任務標誌,參考 sched.h。

在top命令下,按下 f 鍵,可以進行列的選擇,使用 o 鍵可以更改列的顯示順序。此外,top 命令還有一些實用的交互指令:

  • h:顯示幫助信息。
  • k:終止一個進程。
  • q:退出程序。
  • c:切換顯示命令名稱和完整命令行。
  • M:根據駐留內存大小進行排序。
  • P:根據CPU使用百分比大小進行排序。
  • T:根據時間/累計時間進行排序。
  • 數字1:顯示所有CPU負載情況。

1.2 sar命令

sar命令也是 Linux 系統中最重要的性能監測工具之一。它可以週期性地對內存和CPU使用情況進行採樣。基本語法如下:

sar [options] [<interval> [<count>] ]

interval 和 count 分別表示採樣週期和採樣數量。

options 選項可以指定sar命令對哪些性能數據進行採樣(不同版本的sar命令,選項可能有所不同,可以通過sar-h命令查看)。

  • -A:所有報告的總和。
  • -u:CPU利用率。
  • -d:硬盤使用報告。
  • -b:I/O 的情況。
  • -q:查看隊列長度。
  • -r:內存使用統計信息。
  • -n:網絡信息統計。
  • -o:採樣結果輸出到文件。

下列使用sar命令獲取內存使用情況,每秒鐘採樣一次,共計採樣3次:

Java性能監控與調優工具(Linux、Windows篇)

  • kbmemfree 空閒的物理內存大小
  • kbmemused 使用中的物理內存大小
  • %memused 物理內存使用率
  • kbbuffers 內核中作為緩衝區使用的物理內存大小,kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache.
  • kbcached 緩存的文件大小
  • kbcommit 保證當前系統正常運行所需要的最小內存,即為了確保內存不溢出而需要的最少內存(物理內存+Swap分區)
  • commit 這個值是kbcommit與內存總量(物理內存+swap分區)的一個百分比的值

1.3 vmstat命令

vmstat 和 sar 工具類似,可以指定採樣週期、採樣頻率,統計CPU、內存使用情況、swap使用情況等信息。

Java性能監控與調優工具(Linux、Windows篇)

Java性能監控與調優工具(Linux、Windows篇)

1.4 iostat命令

iostat可以提供詳細的磁盤IO信息。基本使用如下:

Java性能監控與調優工具(Linux、Windows篇)

iostat 1 2 該命令顯示了CPU的使用概況和磁盤IO的信息。輸出信息每1秒採樣1次,合計採樣2次。如果只需要顯示磁盤情況,不需要顯示CPU使用情況,則可以使用命令:iostat -d 1 2

-d 表示輸出磁盤使用情況。結果表中,各個列的含義如下:

  • tps:該設備每秒的傳輸次數。
  • kB_read/s:每秒從設備讀取的數據量。
  • kB_wrtn/s:每秒向設備寫入的數據量。
  • kB_read:讀取的總數據量。
  • kB_wrtn:寫入的總數據量。

如果需要得到更多的統計信息,可以使用-x選項。如:iostat -x 1 2

1.5 pidstat工具

pidstat是一個性能強大的性能監測工具,它也是sysstat的組件之一。

1)CPU使用率監控

先是通過jps命令找到Java程序的PID,

Java性能監控與調優工具(Linux、Windows篇)

然後使用pidstat命令輸出程序的CPU使用情況。

Java性能監控與調優工具(Linux、Windows篇)

pidstat 的參數-p用於指定進程ID,-u表示對CPU使用率的監控。最後的參數1 3表示每秒鐘採樣1次,合計採樣3次。從這個輸出中可以看到,該應用程序CPU佔用率達0.00%。pidstat可以進一步監控線程的信息。 使用以下命令:

pidstat -p 3489 1 3 -u -t

-t 參數將系統性能的監控細化到線程級別。

使用以下命令可以導出指定Java應用程序的所有線程:

jstack -l 3489 >/usr/local/t.txt

2)I/O使用監控

磁盤I/O也是常見的性能瓶頸之一,使用pidstat也可以監控進程內線程的I/O情況。

在程序運行過程中,使用以下命令監控程序I/O使用情況。其中28475是通過jps命令查詢到的進程ID,-d參數表明監控對象為磁盤I/O。1 3表示每秒鐘採樣一次,合計採樣3次。

pidstat -p 28475 -d -t 1 3

3)內存監控

使用 pidstat 命令。還可以監控指定進程的內存使用情況。

Java性能監控與調優工具(Linux、Windows篇)

  • minflt/s:表示該進程每秒 minor faults(不需要從磁盤中調出內存頁)的總數。
  • majflt/s:表示該進程每秒 major faults(需要從磁盤中調出內存頁)的總數。
  • VSZ:表示該進程使用的虛擬內存大小,單位為KB。
  • RSS:表示該進程佔用的物理內存大小,單位為KB。
  • %MEM:表示佔用內存比率。

2.Windows工具

2.1 任務管理器

快捷鍵 Ctrl+ Alt+ .

Java性能監控與調優工具(Linux、Windows篇)

Java性能監控與調優工具(Linux、Windows篇)

2.2 perfmon性能監控工具

可以用於監視CPU使用率、內存使用率、硬盤讀寫速度、網絡速度等。Perfmon提供了圖表化的系統性能實時監視器、性能日誌和警報管理,系統的性能日誌可定義為二進制文件、文本文件、SQLSERVER表記錄等方式,可以很方便地使用第三方工具進行性能分析。perfmon.exe 文件位於C:\Windows\System32目錄下。

快捷鍵 win+ R打開運行,輸入 perfmon :

Java性能監控與調優工具(Linux、Windows篇)

打開性能監控工具

Java性能監控與調優工具(Linux、Windows篇)

點擊綠色的+號添加計數器,Process表示進程,Thread表示線程。

下面我們將對QQ的部分線程進行監控,選中實例,點擊添加,確定。

Java性能監控與調優工具(Linux、Windows篇)

生成報告。可以看到線程ID,佔用CPU的多少。

Java性能監控與調優工具(Linux、Windows篇)

2.3 Process Explorer

由Sysinternals開發的Windows系統和應用程序監視工具,目前已併入微軟旗下。不僅結合了Filemon(文件監視器)和Regmon(註冊表監視器)兩個工具的功能,還增加了多項重要的增強功能。包括穩定性和性能改進、強大的過濾選項、修正的進程樹對話框(增加了進程存活時間圖表)、可根據點擊位置變換的右擊菜單過濾條目、集成帶源代碼存儲的堆棧跟蹤對話框、更快的堆棧跟蹤、可在 64位 Windows 上加載 32位 日誌文件的能力、監視映像(DLL和內核模式驅動程序)加載、系統引導時記錄所有操作等。

下載地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer

Java性能監控與調優工具(Linux、Windows篇)

2.4 pslist命令行

pslist是一個windows下的命令行工具。

下載地址:https://docs.microsoft.com/en-us/sysinternals/downloads/pslist

基本用法如下:

pslist [-d] [-m] [-x] [-t] [-s [n] [-r n] [name|pid]
  • -d:顯示線程詳細信息。
  • -m:顯示內存詳細信息。
  • -x:顯示進程、內存和線程信息。
  • -t:顯示進程間父子關係。
  • -s[n]:進入監控模式。n指定程序運行時間,使用ESC鍵退出。
  • -r n:指定監控模式下的刷新時間,單位為秒。
  • name:指定監控的進程名稱,pslist將監控所有以給定名字開頭的進程。
  • -e:使用精確匹配,打開這個開關,pslist將只監控name參數指定的進程。
  • pid:指定進程ID。

顯示的欄位:

  • Pri:優先級
  • Thd:線程數
  • Hnd:句柄數
  • VM:虛擬內存
  • WS:工作集
  • Priv:專用虛擬內存
  • Priv Pk:專用虛擬內存峰值
  • Faults:頁面錯誤
  • NonP:非頁面緩衝池
  • ge:頁面緩衝池
  • Cswtch:上下文切換

參考

《Java程序性能優化》葛一鳴著

相關推薦

推薦中...