Java 效能最佳化系列之4[Java效能調優工具],效能最佳化調優

來源:互聯網
上載者:User

Java 效能最佳化系列之4[Java效能調優工具],效能最佳化調優
Linux 命令列工具

1.top 命令

即時顯示系統中各個進程的資源佔用狀況。

top 命令的輸出可以分為兩個部分: 前半部分是系統統計資訊, 後半部分是進程資訊。


在統計資訊中:

 第1行是任務隊列資訊,它的結果等同於uptime命令。從左至右依次表示: 系統目前時間、系統已耗用時間、當前登入使用者數。 load average表示系統的平均負載,即任務隊列的平均長度,這三個值分別表示1分鐘、5分鐘、15分鐘到現在的平均值。

 第2行是進程統計資訊,分別有正在啟動並執行進程數、睡眠進程數、停止的進程數、殭屍進程數。

 第3行是CPU統計資訊, us 表示使用者空間CPU佔有率、sy表示核心空間CPU佔有率、ni表示使用者進程空間改變優先順序的進程CPU的佔有率、id表示空閑CPU佔有率、wa表示等待輸入輸出的CPU時間百分比、hi表示硬體插斷要求、si表示軟體插斷要求; 在Mem行中, 從左至右,依次表示實體記憶體總量、已使用的實體記憶體、空閑實體記憶體、核心緩衝使用量。 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

SWAP: 進程使用的虛擬記憶體中被換出的大小

RES: 進程使用的、未被換出的實體記憶體大小

CODE: 可執行代碼佔用的實體記憶體大小

DATA: 可執行代碼以外的部分佔有的實體記憶體大小

SHR: 共用記憶體大小

nFLT: 分頁錯誤次數

nDRT: 最後一次寫入到現在, 被修改過的頁面數

S: 進程狀態。D 表示不可中斷的睡眠狀態; R表示運行; S表示睡眠; T表示跟蹤/停止; Z表示殭屍進程

COMMAND: 命令名/命令列

WCHAN: 若該進程正在睡眠,則顯示睡眠中的系統函數名。

Flags: 任務標誌。


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

h : 顯示協助資訊

k: 終止一個進程

q: 退出程式

c: 切換顯示命令名稱和完整命令列

M: 根據駐留記憶體大小進行排序

P: 根據CPU使用百分比大小進行排序

T: 根據時間/累計時間進行排序

數值1: 顯示所有CPU負載情況


2.  sar 命令

sar 命令也是linux 系統中重要的效能監測工具之一, 它可以周期性地對記憶體和CPU使用方式進行採樣

sar [options1] [<interval> [<count>]]

interval: 採樣周期

count: 採樣數量

-A :所有報告的總和

-u: CPU利用率

-d: 硬碟使用報告

-b: I/O 的情況

-q: 查看隊列長度

-r: 記憶體使用量統計資訊

-n: 網路資訊統計

-o: 採樣結果輸出到檔案


3. vmstat

它可以統計CPU 記憶體使用量情況、swap使用方式等資訊。

和sar 類似, vmstat 也可以指定採樣周期和採樣次數




4. iostat 命令

提供詳盡的I/O 資訊。


5. pidstat 工具

一個功能強大的效能監測工具, 它也是Sysstat 的組件之一。 可以到

http://www.icewalkers.com/Linux/Software/59040/Sysstat.html

下載。 下載後安裝即可。

pidstat 的強大之處在於, 它不僅可以監視進程的效能情況, 也可以監視線程的效能情況。

要監控程式的CPU使用率, 可以先使用jps 命令找到PID.然後使用pidstat命令輸出程式的CPU使用方式。

pidstat 的參數-p 用於指定進程ID, -u 表示對CPU使用率的監控。

使用pidstat 可以

  -- CPU 使用率監控

  -- I/O 使用監控

  -- 記憶體監控


Windows 工具

1. 工作管理員

2. perfmon 效能監控工具

在命令列中使用  perfmon 命令。


3. Process Explorer

到 

https://technet.microsoft.com/en-us/sysinternals/bb896653 

下載。

Process Explorer 不僅顯示了系統內所有的進程, 還進一步顯示了進程 見的父子關係。


4. pslist 命令列

可以到:

https://technet.microsoft.com/en-us/sysinternals/bb896682

下載。

基本用法:

pslist [-d][-m][-x][-t][-s [n] [-r n] [name|pid]

-d 顯示線程詳細資料

-m 顯示記憶體詳細資料

-x: 心事進程、記憶體和線程資訊

-t: 顯示進程間父子關係

-s[n]: 進入監控模式。 n 指定程式已耗用時間, 使用ESC鍵退出。

-r n 指定監控模式下的重新整理時間,單位為秒

name: 指定監控的進程名稱

-e: 使用精確匹配

pid: 指定進程ID 



JDK 命令列工具

工具在JDK安裝目錄的bin 目錄中


這些exe  可執行檔只是 Java程式的一層封裝, 真正實現是在tools.jar中

以jps 工具為例, 執行這個exe 和使用命令列 

java -classpath %Java_HOME%/lib/tools.jar sun.tools.jps.Jps 命令是等價的。

1. jps 命令

類似於Linux下的ps, 但它只用於列出Java的進程。直接運行jps不加任何參數, 可以列出Java程式的進程ID以及Main函數等名稱。

-q 指定jps 只輸出進程ID

-m 用於輸出傳遞給Java進程的參數

-l 用於輸出主函數的完整路徑

-v 可以顯示傳遞給JVM的參數


2. jstat

可以用於觀察Java應用程式運行時資訊的工具。可以通過它,查看堆資訊的詳細情況, 基本使用文法為:

jstat -<option> [-t] [-h<lines>]<vmid>[<interval> [count]]

-class:  顯示ClassLoader的相關資訊

-compiler: 顯示JIT編譯的相關資訊

-GC: 顯示與GC相關的堆資訊

-gccapacity: 顯示各個代的容量及使用方式

-gccause: 顯示垃圾收集相關資訊, 同時顯示最後一次或當前正在發生的垃圾收集的誘發原因

-gcnew: 顯示新生代資訊

-gcnewcapacity: 顯示新生代大小與使用方式

-gcold: 顯示老年代和永久代的資訊

-gcoldcapacity: 顯示永久代的大小

-gcutil: 顯示垃圾收集資訊

-printcompilation: 輸出JIT編譯的方法資訊


-g 參數可以在輸出資訊前加上一個Timestamp列,顯示程式的已耗用時間

-h 參數可以在周期性資料輸出時,輸出多少行資料後,跟著輸出一個表頭資訊

interval 參數用於指定輸出統計資料的周期,單位為毫秒

count 用於指定一共輸出多少次資料


3. jinfo 命令

用來查看正在啟動並執行Java 應用程式的擴充參數,甚至支援在運行時修改部分參數, 基本文法為:

jinfo <option><pid>

-flag<name>: 列印指定JVM的參數值

-flag [+|-]<name>: 設定指定JVM參數的布爾值

-flag <name>=<value>: 設定指定JVM參數的值


4.  jmap 命令

可以產生Java應用程式的堆快照和對象的統計資訊

例如

jmap -histo 2972 >c:\s.txt


5. jhat 命令

用於分析Java 應用程式的堆快照內容。


6. jstack 命令

用於匯出Java應用程式的線程堆棧:

jstack [-l] <pid>

-l: 用於列印鎖的附加資訊


7. jstatd

在以上工具中, 一些監控工具也支援對遠端電腦的監控(jps,jstat). 為了啟用遠程監控,則需要配合使用jstatd工具。


8. hprof 工具

hprof 不是獨立的監控工具,它只是一個Java agent工具,它可以用於監控Java應用程式在運行時的CPU資訊和堆資訊。



JConsole 工具
JConsole 工具是JDK內建的圖形化效能監控工具。 可以查看Java應用程式的運行概況, 監控堆資訊、永久區使用方式、類載入情況等。
1. JConsole串連Java程式JConsole 程式在 %JAVA_HOME%/bin 目錄下。啟動後, 可以串連本地進程也可以串連遠端進程。

串連本地進程就不用多介紹了。 如果串連的是遠端進程。則需要在遠程Java應用程式啟動時, 加上如下參數:
-Djava.rmi.server.hostname=127.0.0.1-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=8888-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false

-Djava.rmi.server.hostname 用於指定運行Java應用程式的電腦IP地址, -Dcom.sun.management.jmxremote.port 用於指定通過JMX管理該進程的連接埠號碼。

2. Java 程式概況 以上四張折線圖顯示了堆記憶體的使用方式、系統線程數量、載入類的數量以及CPU 的使用率
3. 使用外掛程式除了準系統外, JConsole 還支援外掛程式擴充. 在JDK的安裝目錄下, 就有一個內建的JConsole外掛程式, 它位於 %JAVA_HOME%\demo\management\JTop 下。 可以使用如下命令讓JConsole 載入外掛程式並啟動
jconsole -pluginpath %JAVA_HOME%/demo/management/JTop/JTop.jar
JTop 外掛程式按照CPU 佔用時間排序, 將佔用CPU時間最長的線程顯示在表格頂端。器的哦2. Visual VM 多合一工具
Visual VM是一個功能強大的多合一故障診斷和效能監控的視覺化檢視, 它整合了多種效能統計工具的功能, 使用Visual VM可以代替jstat,jmap,jhat,jstack 甚至JConsle. 在JDK 6 Update 7 以後, Visual VM 便作為JDK的一部分發布, 它完全免費。作為獨立的軟體安裝, 也可以在http://visualvm.java.net 下載。Visual VM也可以安裝一些外掛程式:

可以通過離線下載外掛程式檔案 *.nbm, 然後在Plugin 對話方塊的Downloaded 頁面下, 添加已下載的外掛程式。
1. Visual VM 支援多種方式串連應用程式, 最常用的就是本地串連。只要本機電腦內有Java應用程式正在執行, 在Visual VM的Local 節點下, 就會出現這些應用。
雙擊應用程式或者右鍵開啟, 就能夠監控應用程式運行。由於Visual VM 本身也是Java應用程式, 因此, 自身也在列表內。






著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.