2011-08-25 39 views
20

我正在開發一個Java應用程序。我的客戶通過短信發送查詢,這些查詢將通過短信網關以http請求的形式發送到我的服務器。現在我的應用程序處理請求並通過SMS網關將響應重新發回客戶端。最多隻有300個字符作爲響應發送。我期待非常高的流量(2000請求/秒)。我想通過一些虛擬主機公司(考慮mochahost)託管我的應用程序。在託管之前我應該​​考慮哪些因素(RAM,CPU等的內存)以及哪些是主要瓶頸?如果調整得當,專用的tomcat服務器可以處理如此高的流量嗎?你有什麼建議?如何在tomcat上處理2000+請求/秒?

沒有數據庫交互(我只使用Java堆內存)。我用JMeter(100請求/秒)進行了測試。我的堆內存使用量是35MB,平均響應時間是532ms。而且我也沒有使用任何會話變量。

+0

你需要在每個請求上做什麼樣的處理?任何數據庫交互? –

+0

@Mike根本不涉及數據庫交互。我只使用java內存。 – ravi

+0

我用jmeter(100個請求/秒)運行測試。我的堆內存使用量爲35MB,平均響應時間爲532ms。 – ravi

回答

23

很難回答你的問題,不知道你在做什麼在你的servlet中做。但簡短的回答是,它確實與tomcat沒有任何關係。

我們目前爲我們的Tomcat服務器使用戴爾R410s(雙核四核,32G RAM)。對於與後端的membase集羣交談的REST服務,我們可以輕鬆地在單個服務器上處理〜15k req /秒(這是使用Jersey JAX-RS實現)。我們目前有4個這樣的F5負載均衡器。每個請求的平均服務時間約爲10ms。

它真正歸結到的是併發性;您的servlet需要多長時間才能完成需要處理的請求。你有一個線程用於每個併發請求,所以如果你想要2000 req/sec,並且一個請求需要500ms來處理......你將需要一些硬件。問題不是tomcat,而是您的servlet的可用資源之一。

+1

我開始這個線程關於你的帖子:http://stackoverflow.com/questions/7970803/tomcat-doing-15k-req-second-on-a-single-server-using-jersey-jax-rs希望你能發出聲音in。 – codecompleting

+0

你是否調整過TIME_WAIT的操作系統級別的任何東西?那麼tomcat配置設置如何:connectionTimeout,keepAliveTimeout,maxKeepAliveRequests。有一個類似的應用程序每秒2K的請求,但tomcat遲鈍一段時間後緩慢。 – codecompleting

+0

我喜歡這個答案 – thonnor

1

看起來您可能不得不實施集羣/負載平衡方法。以this爲例。

6

在適度硬件上使用默認設置的單個Tomcat服務器應該很容易處理2k個請求/秒,假設每個請求沒有太多工作要做。如果處理一個請求的時間超過500毫秒,那麼您可能需要提高線程池中的線程數量,並且您可能會開始推動限制。或者,如果您可以將某些工作卸載到某個其他線程,它將加快響應時間,並且可以保留默認的200個線程。那麼這只是您的工作線程是否能跟上傳入請求的問題。這將取決於您的負載是恆定的還是突發的,以及您在處理中可以接受多少延遲。這甚至不涉及HA,DR,以及您可接受的停機時間。這完全是一個很大的平衡行爲,並且有太多的變數只是給出一個切題乾的答案。