簡體   English   中英

生產中的性能問題

[英]Performance issue in production

嗨,我正在研究基於 web 的 java 工具。 我們有兩個我們的工具實例部署在 2 個單獨的服務器中——一個在生產環境中(許多客戶同時使用),一個在我很少使用的開發環境中。 開發和生產實例都部署在具有相同硬件規格的完全相同的服務器中,具有准確的代碼、堆大小、應用程序服務器、版本等。

但是我觀察到生產實例的速度慢得多,與開發實例相比,即使在客戶使用量為零的夜間奇數小時(我們有工具來監控生產中的客戶使用情況)。 這是令人驚訝的,因為所有因素都是相同的。 我假設由於生產實例的使用率很高,因此那里的堆幾乎已滿且碎片化,而 dev 中的堆相對空閑且未碎片化。 這就是為什么開發實例要快得多的原因,即使一切都是一樣的。 這是一個合理的假設,因為碎片化的幾乎滿堆將花費更多時間創建 object 並因此降低性能?

大多數 GC 執行避免任何碎片的復制和壓縮。 只有並發標記掃描可以得到一些碎片,但是在大多數情況下這應該不是問題。

我建議您衡量系統正在做什么,而不是猜測您的問題可能是什么。 理想情況下,您想要分析您的生產系統。 例如在夜間或低負載下。 例如 VisualVM(免費)或 YourKit(更好,不是免費),如果這不是一個選項。 您可以監控其 memory 的使用情況以及它花費了多少時間進行 GC。 例如使用jstat

但是,如果您還沒有分析您的應用程序,我建議您這樣做,因為您可能可以做一些明顯而簡單的事情來提高性能,即使您在開發中以相當現實的工作負載運行它也是如此。

您確定您的服務器沒有被 web 掃描儀掃描嗎? (他們往往不睡覺,可以在白天/晚上的任何時間活動)

為什么假設堆是碎片化的? 您可以使用 VisualGc,一個用於可視 VM 的插件來實時分析 GC 統計信息。 您可以將其中一台生產服務器從流量中取出並對其進行分析。

http://java.sun.com/performance/jvmstat/visualgc.html

在您的分析中需要考慮許多因素。 延遲、網絡/磁盤 IO、數據庫記錄及其大小 + 索引等等等等。

暫無
暫無

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

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