2012-03-13 99 views
2

我有一個在JBOSS AS 5.1中運行的Struts 1.3應用程序。我們在HTTP連接器的server.xml文件中設置了2000個HTTP線程,並在JVM堆中將大約2GB的RAM分配給run.conf文件中的JBOSS。該系統總共有4GB RAM,剩餘的RAM正在被其他應用程序使用。JBOSS在達到maxThreads限制時掛起

每當我的系統被超過2000個併發請求命中時,Jboss就會掛起並停止工作。我沒有在控制檯上遇到任何異常,也沒有發現任何內存不足的錯誤,它只是掛起。

我該如何解決這個問題?我應該把mod_cluster還是放在JBOSS之前?或者我應該只是分配更多的線程連接器,如果是這樣的話,我怎麼知道內存和HTTP連接器上的maxThreads之間使用什麼比例?

回答

5

2000是一個非常高的數字。如果您確實需要它來處理2000個併發請求,則需要設置多個實例並在各個實例之間均勻分配負載。你可以在jboss前設置一個負載平衡器或apache + mod_jk。

要使用多少內存取決於應用程序。要使用多少個實例取決於實例在負載下的執行情況以及是否可以獲得所需的響應時間。

+0

你的意思是在同一個系統上設置多個實例嗎?如果這樣的話,爲什麼這對JBOSS運行的單個實例有利?這是一個企業Web應用程序,因此處理2000多個用戶是我們需要的。你也可以推薦一些工具,我可以用它來計算出我的應用程序的每個組件使用了多少內存? – user1266369 2012-03-14 09:50:40

+0

@ user1266369您不需要2000個連接器線程來處理2000個用戶。除非應用程序使用_very_繁重的網絡,否則200可能更現實。爲了獲得更高的吞吐量,更多的RAM /堆空間將有所幫助,並且有許多方法可以調整連接器以獲得更好的性能。 – Mikaveli 2012-03-14 10:52:35

+0

如果它是一個企業級網絡應用程序,您不希望一個實例爲所有用戶提供服務。當單個實例出現故障時會發生什麼?故障轉移絕對是設置多個實例的一個原因。另外,如果該服務器上的CPU使用率增加,則可以始終站起另一臺服務器並將第二個實例移動到該服務器。 – bubbly 2012-03-14 16:11:37