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