Posted on 2012-07-13 15:48
leekiang 閱讀(986)
評論(0) 編輯 收藏 所屬分類:
應用服務器
最近Web服務訪問量過大,由于服務器配置比較差,數量也較少,導致服務響應過慢。為了優化服務和提高響應,下面總結出幾條查詢Resin問題的方法。
1、查看服務器網絡狀態TIME_WAIT的數量。
#netstat -antp|grep -i time_wait|wc -l查看TIME_WAIT數量,如果數量過多,并且Resin前端還有Nginx或者Apache,那么請把socket-timeout、keepalive-max和把keepalive-timeout調小
????? <socket-timeout>30s</socket-timeout>
????? <keepalive-max>512</keepalive-max>
????? <keepalive-timeout>60s</keepalive-timeout>
2、查看JVM中對象占用內存情況
jmap 能查看jvm內存中,對象占用內存的情況,還提供非常方便的命令將jvm的內存信息導出的文件。
#jmap -dump:format=b,file=heap.bin <pid>?
命令jhat 能夠解析 java內存堆的文件,生成相關信息,并啟動webServer提供查詢。 也就說,我們可以通過瀏覽器來看這些內存信息。jhat還提供了一個類sql的查詢語言---OQL來給我們使用。
#jhat -J-Xmx512m heap.bin????
就可以將我們剛剛使用jmap導出的內存信息交給jhat解析了。默認的情況下,它會監聽7000端口。我在本機的地址就是,http://localhost:7000/。
訪問http://localhost:7000/histo/,大致可以看到一下的畫面,這里列出對象,對象實例數量、總占用內存大小。點擊進去之后可以看到“誰引用了這個對象,這個對象又引用了哪個”這些信息。不過因為展示的信息非常多,并沒有想象中那樣清晰可見。
3、dump獲取java stack和native stack信息
消息隊列會突然堵塞,查看消費者日志,發現處理延時明顯延長,而此時網絡無丟包。最后多方排查,是java消費者運行出現死鎖。
這種問題可以通過jstack來dump獲取java stack和native stack信息查明問題。
#jstatck <pid>