2014-11-03 61 views
6

我調整了Tomcat 7的性能,服務器配備了24個內核和32 GB內存,我的測試接口是一個沒有任何進程的RESTful服務(立即響應),並且server.xml的配置爲以下...Tomcat性能調優

<Connector port="8088" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 
      enableLookups="false" 
      compression="off" 
      maxConnections="8192" 
      maxThreads="1000" 
      tcpNoDelay="true"/> 

和JVM配置...

-Xms8192M -Xmx16384M. 

JMeter的所述的宿主在另一臺計算機與上述服務器相同的規格。 而JMeter堆的配置是-Xms12218m -Xmx24426m

我的JMeter測試計劃是240個請求同時發送到RESTful接口一次,但我注意到,前100個響應時間的平均值不超過50ms,但在接下來的100次中增加到1秒剩下3秒。

我很好奇這樣的現象,有沒有在配置或任何建議的錯誤?

在此先感謝。

+0

我不認爲建立一個16-24千兆字節的ram進程是個好主意。爲什麼不對應用程序進行集羣,將請求發送到許多服務器? – Stefan 2014-11-03 11:56:40

+0

感謝您的回覆,我必須知道單個節點的極端情況,以便我們能夠滿足要求的服務器數量最少。 – 2014-11-05 17:20:29

回答

6

您可以配置:

acceptCount="2048" 

maxConnections="1024" 

與maxThreads關係MAXCONNECTIONS,你應該配置maxThreads您的業務和CPU的核心數量相匹配,如8X或16X 。 acceptCount是等待連接號碼。

請注意,隨着服務器硬件的性能,maxConnections和maxThreads不會越大越好。

+1

歡迎來到StackOverflow,感謝您的貢獻。如果您僅添加幾個字來解釋您的建議,您的答案就會大大改善。雖然很明顯,提問者或其他人在同一問題尋求幫助時可能並不明顯。 – GreenAsJade 2014-11-03 04:11:15

0

服務器的服務請求越多,服務每個請求所用的時間就越長。這是正常的行爲。

你如何同時啓動你的線程?斜坡時間= 0或1?

當您開始觸發大量線程時,您的客戶端需要更長時間才能發出請求,而您的服務器需要更長的時間才能響應。

在啓動時,服務器能夠快速響應所有請求,因爲它沒有其他任何操作,直到達到閾值。每個請求都會很快完成,同一個線程將發送另一個請求。同時,服務器正在響應上一輪線程,而更多的人正在排隊。現在它必須在對請求作出響應的同時管理隊列,因此會滿足另一個閾值。

基本上,同時啓動一堆線程和觸發請求對於服務器來說不是一個非常實際的用例,除少數情況外。在相關時,您可以預期這種行爲。

+0

我們的案例是設備的身份和授權服務,並且會有超過一萬個設備。我們的目標是響應時間可能會超過1秒。 非常感謝您的回覆。 – 2014-11-05 17:33:53