2012-12-05 24 views
0

我有一個偉大的執行,然後突然一個頁面請求將凍結和時間出來,然後一切都會變花花公子一點點,同樣的事情發生在一個Web應用程序。如何獲得端到端的性能分析的tomcat

我有很難得到到這條底線,因爲有可以分析的這麼多的變數。

有沒有什麼辦法:一種工具或步走的計劃,可以幫助我得到這個底部,基本上是從頁面請求整件事情分析數據庫調用和識別潛在的問題?我使用New Relic和MAT,而我剛開始使用Javamelody,但說實話:哪裏需要關注?而且通常當一個頁面凍結/超時時,不清楚瓶頸在哪裏。什麼是門檻/紅旗要注意什麼?

親切的問候, 馬克

回答

1

對於服務器端,我發現jstack通常比廓更好的工具。主要是因爲它很快捷,命令行並已安裝在服務器的JDK中。

間歇性Web應用程序減速的典型原因是等待某個鎖釋放的線程。

運行jstack當Web應用程序似乎卡住,並期待通過線程看到被卡住的鎖,什麼鎖是哪些。這是一個快速的tutorial,因爲它起初聽起來令人生畏,但它非常簡單。

+0

隨着jstack,我會添加jstat到工具箱,因爲intermitent暫停聽起來像一個停止世界的GC暫停。如果凍結髮生在GC計數增加的同時,則很可能是GC。然後,您可以激活詳細的GC日誌以獲取更多詳細信息。 –

+0

感謝您的提示。回顧我的jstack輸出。我看有點令人費解出頭的對我說: 我看到一個數字,正在等待 我看到可用的(在我的配置中定義的10最低池大小和最多3個C3P0 ThreadPoolAsyncRunners的C3P0 resourcepool成爲可用的HTTP線程池大小爲100.所有3個都是「鎖定的」 - 鎖定<0x000000009d5cd688>(一個com.mysql.jdbc.util.ReadAheadInputStream) 所以我想我的答案似乎是c3p0池大小設置不正確。找出爲什麼以及如何解決它 – Marc

+0

它也可能是你的MySQL數據庫有一個限制性的配置,只允許少量的連接(或與另一個應用程序共享) – mprivat

0

基於這裏和其他地方的提示我發現,似乎幾件事情已經影響了東西,儘管我們必須看到它是如何工作的長期性。現在,它似乎更好,雖然很難指出我的手指究竟是什麼造成了最大的差異。我做的事情: *使Spring數據源延遲,以便可以從緩存提供的請求不會創建不必要的事務 *將mySQL thread_cache_size更改爲50.之前爲8。 *從c3p0更改爲BoneCP

現在看起來好像間歇暫停不再發生。