JDK5.0內(nèi)置工具的使用詳解
JDK5.0內(nèi)置工具的使用是什么情況呢?首先我們看看JDK5.0包括的調(diào)試工具有哪些?
我們在這里對JDK5.0內(nèi)置工具做大致的概念性的介紹,然后希望通過介紹我自己在實(shí)際工作中使用這些工具解決問題的實(shí)例來讓大家對這些工具有更深入的了解。
JDK5.0內(nèi)置工具里面加入了jstack, jconsole, jinfo, jmap, jdb, jstat, jps, 下面對這些工具做簡單介紹:
jstack -- 如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問題。另外,jstack工具還可以附屬到正在運(yùn)行的java程序中,看到當(dāng)時(shí)運(yùn)行的java程序的java stack和native stack的信息, 如果現(xiàn)在運(yùn)行的java程序呈現(xiàn)hung的狀態(tài),jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
jconsole – jconsole是基于 Management Extensions (JMX)的實(shí)時(shí)圖形化監(jiān)測工具,這個(gè)工具利用了內(nèi)建到JVM里面的JMX指令來提供實(shí)時(shí)的性能和資源的監(jiān)控,包括了程序的內(nèi)存使用,Heap size, 線程的狀態(tài),類的分配狀態(tài)和空間使用等等。
jinfo – jinfo可以從core文件里面知道崩潰的Java應(yīng)用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。
jmap – jmap 可以從core文件或進(jìn)程中獲得內(nèi)存的具體匹配情況,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。
jdb – jdb 用來對core文件和正在運(yùn)行的Java進(jìn)程進(jìn)行實(shí)時(shí)地調(diào)試,里面包含了豐富的命令幫助您進(jìn)行調(diào)試,它的功能和Sun studio里面所帶的dbx非常相似,但 jdb是專門用來針對Java應(yīng)用程序的。
jstat – jstat利用了JVM內(nèi)建的指令對Java應(yīng)用程序的資源和性能進(jìn)行實(shí)時(shí)的命令行的監(jiān)控,包括了對Heap size和垃圾回收狀況的監(jiān)控等等。
jps – jps是用來查看JVM里面所有進(jìn)程的具體狀態(tài), 包括進(jìn)程ID,進(jìn)程啟動的路徑等等。
另外,還有些其他附帶的工具在這里沒有列出,比如Heap Analysis Tool, kill -3 方法等等,這些在JDK5.0之前就有,同樣也是非常有用的性能調(diào)優(yōu)工具,大家可以參照相應(yīng)的文檔資料來學(xué)習(xí),在文章后面也會推薦一些相應(yīng)的文檔給大家作為參考。
好,說了這么多,讓我們來看看JDK5.0內(nèi)置工具在現(xiàn)實(shí)工作能給我們帶來什么幫助,下面是我和ISV一起共同工作的實(shí)際例子,在這里把它們簡單闡述出來,希望對大家有所幫助。
jconsole和jstack使用實(shí)例:
在做過的項(xiàng)目中,曾經(jīng)有幾個(gè)是使用jstack和jconsole來解決問題的。在下面的例子中,由于部分代碼涉及到公司名字,我使用了xxx來代替。
1. 其中的一個(gè)是Web2.0的客戶,由于目前Sun Microsystem公司推出的Niagara系列非常適合網(wǎng)絡(luò)方面的多線程應(yīng)用,并且已經(jīng)在業(yè)界非常出名,所以他們決定使用T2000來測試一下如果應(yīng)用到他們自己的應(yīng)用是否能夠獲得出眾的性能。
整個(gè)應(yīng)用的架構(gòu)如下:
- Apache 2.0.59 + Resin EE 2.1.17 + Jdk 1.5.0.07 + 9
- 運(yùn)行的操作系統(tǒng):
- Solaris 10 Update 3 (11/06), EIS patches包.
- 測試工具:Apache benchmark tool.
在客戶的測試環(huán)境中,我們分別做了Apache, Resin, Solaris的相應(yīng)調(diào)整,其中包括了Apache使用Prefork模式,并且調(diào)整了httpd.conf文件里面相應(yīng)的ServerLimit, ListenBacklog,Maxclient等等值,Resin服務(wù)器調(diào)整Jvm heap size, 并行回收new generation和old generation, ***線程數(shù),oracle連接數(shù)等等參數(shù),Solaris操作系統(tǒng)做了網(wǎng)絡(luò)和系統(tǒng)的相應(yīng)調(diào)整,最終把整套系統(tǒng)搬進(jìn)了生產(chǎn)環(huán)境,一切順利進(jìn)行,但當(dāng)進(jìn)入其中的一個(gè)論壇系統(tǒng)時(shí)卻發(fā)現(xiàn)系統(tǒng)響應(yīng)時(shí)間非常緩慢,用Apache Benchmark Tool加少量壓力得到結(jié)果如下,由于是在生產(chǎn)環(huán)境下所以不敢使用大的壓力:
- 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)
每一個(gè)請求的響應(yīng)時(shí)間大概去到8-9秒時(shí)間,這個(gè)是客戶所不能接受的。
在實(shí)驗(yàn)的初段,Tomcat, 10g服務(wù)器都是架設(shè)在T2000上,我們在對T2000服務(wù)器的OS,網(wǎng)絡(luò),應(yīng)用服務(wù)器做了必要的調(diào)整后,發(fā)現(xiàn)其表現(xiàn)還是不盡如人意。
JDK5.0內(nèi)置工具就介紹到這里,希望對你在開發(fā)的時(shí)候有所幫助。
【編輯推薦】