JDK5.0內置工具的使用詳解
JDK5.0內置工具的使用是什么情況呢?首先我們看看JDK5.0包括的調試工具有哪些?
我們在這里對JDK5.0內置工具做大致的概念性的介紹,然后希望通過介紹我自己在實際工作中使用這些工具解決問題的實例來讓大家對這些工具有更深入的了解。
JDK5.0內置工具里面加入了jstack, jconsole, jinfo, jmap, jdb, jstat, jps, 下面對這些工具做簡單介紹:
jstack -- 如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發生問題。另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
jconsole – jconsole是基于 Management Extensions (JMX)的實時圖形化監測工具,這個工具利用了內建到JVM里面的JMX指令來提供實時的性能和資源的監控,包括了程序的內存使用,Heap size, 線程的狀態,類的分配狀態和空間使用等等。
jinfo – jinfo可以從core文件里面知道崩潰的Java應用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。
jmap – jmap 可以從core文件或進程中獲得內存的具體匹配情況,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。
jdb – jdb 用來對core文件和正在運行的Java進程進行實時地調試,里面包含了豐富的命令幫助您進行調試,它的功能和Sun studio里面所帶的dbx非常相似,但 jdb是專門用來針對Java應用程序的。
jstat – jstat利用了JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控等等。
jps – jps是用來查看JVM里面所有進程的具體狀態, 包括進程ID,進程啟動的路徑等等。
另外,還有些其他附帶的工具在這里沒有列出,比如Heap Analysis Tool, kill -3 方法等等,這些在JDK5.0之前就有,同樣也是非常有用的性能調優工具,大家可以參照相應的文檔資料來學習,在文章后面也會推薦一些相應的文檔給大家作為參考。
好,說了這么多,讓我們來看看JDK5.0內置工具在現實工作能給我們帶來什么幫助,下面是我和ISV一起共同工作的實際例子,在這里把它們簡單闡述出來,希望對大家有所幫助。
jconsole和jstack使用實例:
在做過的項目中,曾經有幾個是使用jstack和jconsole來解決問題的。在下面的例子中,由于部分代碼涉及到公司名字,我使用了xxx來代替。
1. 其中的一個是Web2.0的客戶,由于目前Sun Microsystem公司推出的Niagara系列非常適合網絡方面的多線程應用,并且已經在業界非常出名,所以他們決定使用T2000來測試一下如果應用到他們自己的應用是否能夠獲得出眾的性能。
整個應用的架構如下:
- Apache 2.0.59 + Resin EE 2.1.17 + Jdk 1.5.0.07 + 9
- 運行的操作系統:
- Solaris 10 Update 3 (11/06), EIS patches包.
- 測試工具:Apache benchmark tool.
在客戶的測試環境中,我們分別做了Apache, Resin, Solaris的相應調整,其中包括了Apache使用Prefork模式,并且調整了httpd.conf文件里面相應的ServerLimit, ListenBacklog,Maxclient等等值,Resin服務器調整Jvm heap size, 并行回收new generation和old generation, ***線程數,oracle連接數等等參數,Solaris操作系統做了網絡和系統的相應調整,最終把整套系統搬進了生產環境,一切順利進行,但當進入其中的一個論壇系統時卻發現系統響應時間非常緩慢,用Apache Benchmark Tool加少量壓力得到結果如下,由于是在生產環境下所以不敢使用大的壓力:
- This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
- Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/
- Benchmarking free.xxx.com (be patient).....done
- Server Software: Resin/2.1.17
- Server Hostname: free.xxx.com
- Server Port: 8080
- Document Path: /forum/bbsMessageList.act?bbsThreadId=1580107
- Document Length: 27012 bytes
- Concurrency Level: 10
- Time taken for tests: 92.148883 seconds
- Complete requests: 100
- Failed requests: 0
- Write errors: 0
- Keep-Alive requests: 0
- Total transferred: 2722500 bytes
- HTML transferred: 2701200 bytes
- Requests per second: 1.09 [#/sec] (mean)
- Time per request: 9214.888 [ms] (mean)
- Time per request: 921.489 [ms] (mean, across all concurrent requests)
- Transfer rate: 28.84 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 0 0.0 0 0
- Processing: 9089 9187 139.4 9140 9789
- Waiting: 3067 3163 138.3 3117 3766
- Total: 9089 9187 139.4 9140 9789
- Percentage of the requests served within a certain time (ms)
- 50% 9140
- 66% 9178
- 75% 9189
- 80% 9201
- 90% 9281
- 95% 9560
- 98% 9739
- 99% 9789
- 100% 9789 (longest request)
每一個請求的響應時間大概去到8-9秒時間,這個是客戶所不能接受的。
在實驗的初段,Tomcat, 10g服務器都是架設在T2000上,我們在對T2000服務器的OS,網絡,應用服務器做了必要的調整后,發現其表現還是不盡如人意。
JDK5.0內置工具就介紹到這里,希望對你在開發的時候有所幫助。
【編輯推薦】