2012-05-28 84 views
0

我們有一個webapp爲我們的其中一項服務提供服務請求。我們已經在Tomcat 7服務器上運行它。如下所述,由於我們可以創建的最基本的Servlet具有相似的結果,所以不需要太多細節。低數量用戶的Tomcat吞吐量限制

我們運行一個負載測試,使用帶有不同數量的併發線程的jmeter來執行一分鐘的服務請求。通過結果,我們生成了一些平均響應時間vs併發線程的圖表,以及每秒請求數和併發線程數。

在我們測試的約10個併發線程中,我們發現應用程序管理的吞吐量有限制。從該線程數開始,平均響應時間增加,每秒請求數穩定。

我們已經測試了一些對我們應用程序的更改,甚至刪除了所有的應用程序邏輯並返回了靜態響應。並且對不做任何事的基本Servlet運行相同的測試,並且我們得到了相似的結果:平均響應時間和吞吐量值更好,但在測試中大約有10個併發線程達到了限制。

我們還運行了Apache Benchmark的類似測試,以放棄測試工具的問題。

測試在2個服務器池中運行。當在本地計算機上運行時,他們給出了類似的結果,但吞吐量限制達到了大約5個併發線程。

下面是吞吐量圖表。請注意,每個行的值並不重要(例如:某些行刪除了數據庫訪問權,或者甚至是大多數應用程序邏輯,因此他們需要更少的時間)。

Throughput chart

我們要理解什麼是其中吞吐量限制來自和我們能做些什麼來改善它。

感謝, 豪爾赫

PS:我想補充的圖像,而不是隻是一個鏈接,但它看起來像我沒有足夠的聲譽:(

回答

1

調整JVM到最佳設置的限制將得到下降到您正在運行的硬件後。線程需要cpu才能運行,添加更多的線程只有在其他線程被類似IO的執行阻塞時纔有用,即使容器線程會增加開銷。達到此限制時,您需要添加更多硬件。

+0

感謝您的回答。我們將嘗試使用更多硬件來運行它,以檢查這是否是這種情況下的原因。當硬件是真正的限制時,我們可能太專注於找出約10個併發線程的限制原因。 – jorgelamb

0

其中一個性能問題的主要原因與Tomcat是默認的JVM設置,增加分配給JVM使用-Xmx參數運行Tomcat的內存量。

-Xmx512m將允許最大512MB的分配給堆。

此外,在進行更改之前,請檢查從tomcat默認頁面>狀態

分配給tomcat的內存,並檢查增加jvm堆大小後的狀態。

還可以使用-XX:PermSize和-XX:MaxPermSize來增加perm gen空間。

欲瞭解更多信息,請查看本page

+0

的確,我們沒有爲應用程序指定內存限制。 從類似的測試運行在不同的應用程序(1分鐘的測試與許多不同數量的併發線程)我們發現,當它運行垃圾收集器時,數據超出了圖表。在這種情況下,沒有一點顯示出這種行爲,所以我認爲在這種情況下GC不是問題。 對於PermGen,如果我們發現OutOfMemoryErrors,通常我們只會增加它。我認爲在這一點上幫助不大。 – jorgelamb

+0

你是否在servlet中執行任何IO操作,這需要很長時間才能完成並阻塞其他線程?如果您正在執行任何IO操作,請嘗試通過對數據進行編碼並再次運行測試來將操作變爲常數因子。 –

+0

我們真正的webapp正在做I/O請求,是的。但即使在用硬編碼數據替換外部調用之後,該圖表看上去也是類似的:仍然存在吞吐量限制,並且它在大約10個併發測試線程中達到。 – jorgelamb