最近公司的項目很不穩定,經常莫名其妙的down機,而且響應速度感覺也很不理想。於是懷疑產生了記憶體流失問題。在網上看了關於一些測試載入器的介紹,認為JProfiler比較合適,最新版本是4.x,但是找不到破解,只找到了3.3的破解,於是下載了3.3。是:
http://www.ej-technologies.com/download/jprofiler/version3.php
網上很多關於JProfiler的介紹都是被監控的應用程式(或web應用)和Jprofiler裝在同一台機器上的情況。如果一定要這樣,感覺意義就不大了,因為想要監控的往往就是遠端linux伺服器的web應用,而監控結果當然希望在本地windows pc上以圖形介面的方式看到。在本地windows上裝了jprofiler3和破解後,發現確實有remote session的選項。於是開始幹活:
第一步,除了下載windows版的jprofiler3並在本地安裝外,在下載一個linux版。Linux版包括rpm安裝版,.sh安裝版和.tar.gz壓縮版,我下的是.sh版,用./jprofiler3.sh –q安裝後,在linux上,jprofile被安裝在了/var/jprofiler3路徑下(我沒改任何設定檔直接執行的安裝就是這個結果,目的只是使用它所以不想花時間研究)。
第二步,本地運行圖形介面的jprofiler,在菜單中選擇Session->Integration Wizard->New Remote Integration,
然後選擇“on a remote computer”,系統選Linux X86,
後面幾部就不帖圖了,就是傻瓜操作,問啥填啥,直到看到這一步:
這個裡面的提示是根據你填的東西不同而產生的個性資訊,copy下來,待會要用到,然後下一步,選“No, I will start the session later.”。
第三步,就要在linux伺服器上進行配置了,這就需要剛才產生的個性配置資訊。其中 –Xint –Xrunjprofiler:port=8849 –Xbootclasspath/a:/opt/jprofiler3/bin/agent.jar是附加的啟動java程式時跟在”java”後面的命令列參數,由於我用的是tomcat,那就在tomcat的啟動指令碼startup.sh中的JAVA_OPTS參數中添加入這一行東西。(其實還會遇到很多細節問題導致的失敗,這都是後話了,比如這些命令列參數和原先的參數可能衝突,我開始做了好多次都失敗,JVM都出了bug報告,開始不知道怎麼回事,耽誤了很多時間,其實就是參數衝突)。還有一個個性配置資訊就是要有一個叫LD_LIBRARY_PATH的環境變數,那我就修改了catalina.sh,在裡面加入export LD_LIBRARY_PATH=/opt/jprofiler3/bin/linux-x86。
第四步,這時候就用修改過的startup.sh啟動tomcat,可以在catalina.out日誌中看到提示我們遠程監控程式可以串連了。
第五步,我們在本地windows pc中啟動並執行jprofiler的菜單中選擇“Session -> Open Session”,選擇剛才建立的remote session,然後狂點好幾個OK就行了。
如果沒有問題,監控程式就運行成功了!我們就可以看到好多可愛的監控結果,比如記憶體堆棧的分配和使用方式、對象建立的多少情況、cpu使用的情況,還可以針對每個類或每個對象或每個線程、或每個函數對記憶體、cpu的使用方式,還可以看java虛擬機器中自動垃圾收集的運行情況,這一切都是可愛的圖形介面!還可以產生靜態報告,告訴你各種線程、類、對象的調用關係、運行堆棧和每個具體單元佔用的資源和時間等等,功能還是非常super的,而且好多東西還沒搞懂呢,反正給我的感覺就是它能告你的東西比你想知道的還要多好多,毛主席教育我們,jprofiler是個好東東。