14

我正在嘗試解決大型複雜的tomcat java web應用程序的性能問題。目前最大的問題是,內存使用率會不時出現峯值,應用程序無法響應。我已經修復了所有可以使用日誌分析器和日誌文件的貝葉斯分析修復的問題。我正在考慮在生產tomcat服務器上運行一個profiler。分析生產中的Web應用程序的性能成本

的注與溫和敏感性讀者:

據我所知,有些人可能會發現配置的是生產應用的進攻的想法。請放心,我用盡了大部分其他選項。我正在考慮這個問題的原因是我沒有資源來完全複製我的測試服務器上的生產設置,並且我一直無法在測試服務器上導致感興趣的故障。

問題:

我找這工作無論是在Tomcat上運行的Java Web應用程序,或者回答一個語言無關的方式這個問題的答案。

  • 分析的性能成本是多少?
  • 爲什麼在生產環境中遠程連接和分析Web應用程序是一個壞主意(奇怪的故障模式,安全問題等)的其他原因?
  • 性能分析對內存足跡有多大影響?
  • 特別是有java profiling工具具有非常低的性能成本?
  • 任何用於剖析Web應用程序的java剖析工具?
  • 有沒有人有使用visualVM分析性能成本的基準?
  • visualVM可以擴展到什麼尺寸的應用程序和數據集?
+0

你會碰巧在你的Webapp中有Apache FOP嗎? – 2009-07-30 17:13:43

+0

我不這麼認爲,爲什麼會導致記憶問題? – 2009-07-30 17:48:47

回答

13

OProfile及其祖先DPCI是專爲剖析生產系統而開發的。這些開銷非常低,並且他們對您的完整系統進行了剖析,包括內核,因此您可以在內核和庫中的VM 中發現性能問題。

回答您的問題:

  1. 開銷:這些採樣廓線儀,也就是說,它們產生定時器或performance counter中斷在一些固定的間隔,他們看看什麼碼正在執行。他們用它來建立你的時間花在哪裏的直方圖,並且合理的採樣間隔開銷非常低(1-8%是they claim)。

    看看OProfile採樣頻率與開銷的this graph。如果默認值不符合您的喜好,您可以調整採樣頻率以降低開銷。

  2. 生產中的使用情況:使用OProfile的唯一警告是您需要將它安裝到您的生產機器上。自從RHEL3以來,我相信Red Hat會提供內核支持,而且我非常確定其他發行版支持它。

  3. 內存:我不知道什麼樣的OProfile確切的內存佔用,但我相信它保持相對較小的緩衝區周圍,轉儲他們偶爾日誌文件。

  4. Java: OProfile包括支持Java並知道在JIT中運行的代碼的分析代理。因此,您將能夠看到Java調用,而不僅僅是解釋器和JIT中的C調用。

  5. 網絡應用程序: OProfile是一個系統級別的分析器,所以它不知道Web應用程序可能具有的會話,事務等事情。

    這就是說,它是一個全系統分析器,因此,如果您的性能問題是由操作系統和JIT之間的不良相互作用引起的,或者如果它在一些第三方庫,你就可以看到這一點,因爲OProfile剖析了內核和庫。這對於生產系統來說是一個優勢,因爲您可以發現由於測試環境中可能不存在的錯誤配置或生產環境細節而導致的問題。

  6. 的VisualVM:不知道這一個,因爲我有VisualVM的

沒有經驗這裏的a tutorial使用OProfile的發現性能瓶頸。

3

我已經使用YourKit在高負載生產環境中配置應用程序,雖然確實有影響,但它很容易被接受。您可以通過非侵入式的方式來完成此操作,例如選擇性關閉更昂貴的特定分析功能(這實際上是一種滑動縮放)。

我最喜歡的一點是,您可以在YourKit代理運行的情況下運行虛擬機,並且它不會影響性能。只有當你連接GUI並開始分析時纔會產生影響。

1

分析生產應用程序沒有任何問題。如果您在分佈式應用程序上工作,有時會發生在獨特的概率情況下發生的內存異常,這種情況很難在dev/stage/uat環境中重現。

您可以嘗試使用自定義分析器,但如果您急於插入/設置生產框中的upa分析器需要時間,也可以使用jvm進行內存轉儲(jvms內存轉儲也可以爲您提供線程轉儲)

  1. 可以激活JVM命令行上自動生成,使用以下選項: -XX:+ HeapDumpOnOutOfMemoryError

  2. 他的Eclipse內存分析器項目稱爲一個非常強大的功能「按價值分組」,這使得建立一個對象成爲可能通過字段值查詢和重新組合實例。這在有很多實例包含一組較小的可能值的情況下很有用,並且您可以查看哪些值最常用。這確實幫助我理解了一些複雜的內存轉儲,因此我建議您嘗試一下。

1

您也可以考慮使用現代HotSpot JVM之一--Java Flight Recorder和Java Mission Control。它是一組工具,可以讓您收集底層的運行時信息,CPU的開銷約爲5%(無論如何,我無法證明最後一條聲明,這是Oracle工程師介紹該功能和現場演示的聲明)。

只要您的應用程序正在運行1_7u40 JVM或更高版本,就可以使用此工具。要啓用運行時信息收集,您需要使用特定標誌啓動JVM:

默認情況下,JVM中禁用JFR。要啓用JFR,您必須使用-XX:+ FlightRecorder選項啓動Java應用程序。由於JFR是一項商業功能,僅適用於基於Java Platform Standard Edition(Oracle Java SE Advanced和Oracle Java SE套件)的商業軟件包,因此您還必須使用選項啓用商業功能。

(報價http://docs.oracle.com/javase/8/docs/technotes/guides/jfr/about.html#sthref7

我說這個答案,因爲這是在生產分析可行的選擇海事組織。

此外還有一個Eclipse plugin支持JFR和JMC,並能夠顯示信息用戶友好。

0

多年來,這些工具大大改進。現在,大多數有這些需求的人使用一種工具,該工具掛接到Java的檢測API而不是分析API。當然還有更多的例子,但是想起了NewRelicAppDynamics。基於工具的解決方案通常作爲JVM中的代理運行,並不斷收集數據。他們報告數據的級別高於舊分析方法(業務事務,Web事務,數據庫事務),並允許您在必要時深入挖掘(直至方法或行)。您甚至可以設置監控和警報,以便您可以跟蹤/警示諸如頁面加載時間和針對SLA的性能等指標。有了這些優秀的工具,你真的不應該再有理由在生產環境中運行分析器了。運行它們的成本可以忽略不計。