簡體   English   中英

java一線程慢

[英]java one thread slow

我有一個J2EE java應用程序來處理SOAP請求。 在我們的生產環境(HPUX,OC4J,Java 5)中,我們有大約20個線程為此進程運行,我們有時會看到1個線程暫停約15秒。 到目前為止,我還沒有成功地在我們的預生產環境中復制問題,如果我在生產服務器上使用jconsole和相關工具,我害怕破壞和違反SLA。

誰有靈感? 我知道http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf,但我很想在生產中直接使用它的經驗(此外,HPUX人員將這些工具從工具箱中剔除,用HPJMeter替換它們)

此外,雖然這對我來說是一個GC問題,但我還不足以證明或反駁這一理論,我對其他建議持開放態度。

我們定期將jconsole(和其他工具)直接連接到生產環境。 對我們來說沒有明顯的開銷,儀器已經在JVM中進行,因此您只需連接遠程進程即可讀取已發布的值。 我說去吧!

無論哪種方式,你真的需要看看盒子上發生了什么。 線程轉儲可能或做一些內部檢測。 通過內部儀器,我的意思是在代碼中記錄關鍵度量並以某種方式暴露它們。 它本質上就是JVM所做的事情(通過JMX公開它們),但是自己滾動它會讓你更具特異性。 例如,我經常在內部記錄請求/響應或其他關鍵路徑性能時序。

哦,還有一件事。 您可以將應用設置為使用代理提供更多信息。 通常,這將是一個插在分析器(如JProfiler的或yourkit) 但這通常會添加更多的開銷,因此不推薦用於生產。

還有必要考慮不從VM獲取所需信息的成本。 例如,在監控時,不解決問題的成本是否高於或低於性能下降%的成本?

更科學地,這篇文章有一些評論。 它表明高達7%的開銷(與我之前的觀點相矛盾),2006年的一篇文章顯示3-4%,但兩者都是高度語境化的結果。 例如,CPU密集型應用程序可能會或可能不會受到IO綁定的影響。

所以我的一個更合適的答案(而不僅僅是“去吧”)將是通過測量來了解它對您的環境中的應用程序的影響。 在jconsole連接和斷開連接的情況下,在類似的生產環境中運行代表性測試,並親眼看看。

另請參閱此stackoverflow問題

您可以在HP-UX上執行一些操作,以從正在運行的Java進程獲取其他信息。 如果將PROF信號發送到JVM,它將切換GC日志的生成(就像您使用了-Xverbosegc命令行選項一樣)。 生成GC日志非常便宜,因此您應該能夠在生產中啟用它而不影響性能。

如果將USR2信號發送到JVM,它將開始分析(與-Xeprof相同)。 如果您再次發送信號,則會關閉分析。 這會產生明顯的性能影響,盡管它比您從外部第三方分析器中看到的要小。

您可以使用HPjmeter分析生成的數據文件。 HPjmeter還可以連接到正在運行的JVM進行實時監控。 使用Java 5,您需要使用-agentlib選項啟動JVM。 如果您使用的是Java 6,則無需任何額外的命令行選項即可附加到正在運行的JVM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM