JAVA性能優化工具小記

好記性不如爛筆頭,戊戌年的最後一個工做日,把本身平時在開發過程當中使用的一些java性能優化工具作一個簡單的小結,php

主要包括 jvisualvm、jfr、gdb和查看內存對象信息的幾個linux命令。java

注:當前系統屬性 Mac OS X 10.13.6,jdk版本 1.8.0_151linux

1:jvisualvm(當前java自帶的工具)

能夠看到jvisualvm不只支持本地應用程序的追蹤還支持遠程。性能優化

而後打開對應的本地項目:服務器

 這裏面確實有不少項目的信息,CPU、堆棧信息等。網絡

我目前使用它就是用它的抽樣器,查看當前項目裏的對象數及對象佔用的內存大小。eclipse

這樣對項目中某個對象個數過多或者對象過大,就能夠方便的查看到,而後去優化它。jvm

2:JFR

jfr的優勢:ide

VisualVM功能強大,支持圖形化界面操做,能夠很快定位代碼問題。可是它對應用性能的影響也很是大,因此不適合在生產環境下使用。工具

還有這些軟件(好比GDB(下面介紹))要attach到jvm進程上,生產環境通常網絡隔離,很難作到。

使用jfr不須要在現有應用上額外添加任何參數、重啓進程等,直接在命令行執行便可,實時生效,100%無入侵,且穩定可靠,不影響線上應用運行。

 jfr的使用:

2.1:本地使用:

1:須要在項目jvm加上配置 vm options:-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

2:打開jmc

3:打開對應的進程ID,就能夠追蹤本項目的堆棧、CPU等信息

2.2:在服務器上使用:

1:因爲JFR須要JDK的商業證書,這一步須要解鎖jdk的商業特性:

  jcmd <PID> VM.unlock_commercial_features

2:啓動jrf,開始輸出jfr文件

  jcmd <PID> JFR.start name=test duration=60s filename=/tmp/output.jfr

3:拿到jfr文件後,在本地打開jmc圖形化工具後,選擇文件直接打開,而後就能夠看到服務器上duration時間間隔的項目信息。

固然不管是本地運行仍是在服務器上運行,Java飛行記錄器都支持建立一個模板。

在高級模式中,你能夠自定義本身想要的信息。

 建立好模板後,不管是在本地仍是複製到遠程服務器上,

jcmd <PID> JFR.start name=test duration=60s settings=template.jfc filename=/tmp/output.jfr

settings=template.jfc就能夠指定使用templayte.jfc這個模板的配置去收集項目信息。

3:GDB(參考文章:https://www.atlassian.com/blog/archives/so-you-want-your-jvms-heap

首先機器上須要安裝gdb,gdb的安裝就不贅述了,

sudo apt-get install gdb

sudo yum install gdb

brew install gdb

1:使用gdb生成java heap文件

1.1:生成進程core文件

sudo gdb -p <PID>

. . .bunch of info. . .

(gdb)gocre /tmp/jvm.core

  Saved corefile /tmp/jvm.core

(gdb) detach

(gdb) quit

1.2:根據core文件生成java heap文件

sudo jmap -dump:format=b,file=/tmp/jvm.hprof /usr/bin/java (本身機器java路徑) /tmp/jvm.core

2:運行MAT找出內存泄漏根源(MAT下載:https://www.eclipse.org/mat/downloads.php

 

 點擊finish,而後就能夠看到當前java進程的堆棧信息。

 4:經常使用的查看java進程堆棧信息命令

JVM學習----查看堆棧信息這篇文章較全面的寫了jstat、jmap的詳細用法,下面我列舉本身經常使用的一些命令:

每3秒鐘輸出一次當前進程已使用空間佔總空間的百分比

命令:jstat -gcutil <PID>  3000   

打印進程堆存活的各個對象個數和所佔大小

命令:jmap -histo:live <PID> | more

使用jcmd不加任何參數便可獲取jvm進程列表

命令:jcmd

使用jcmd help可以獲取某個jvm進程其餘可用的診斷命令

命令:jcmd <PID> help

它所列舉的commands都是可使用的。

5:參考文章相關連接:

Java Performance Tuning Guide:http://java-performance.info/

JVM學習----查看堆棧信息:https://blog.csdn.net/eos2009/article/details/78522901

JVM’s heap:https://www.atlassian.com/blog/archives/so-you-want-your-jvms-heap

相關文章
相關標籤/搜索