2015-09-11 261 views
0

我與Tomcat的如下問題併發服務請求時:Tomcat服務器

我創建了一個模擬Web服務,我使用的Thread.sleep(時間)來定義模擬服務的執行時間。我將此服務部署到Tomcat。

我創建了一個客戶端來同時向服務發送多個請求(50個請求)。

當我將執行時間設置爲一個小數字(例如2000毫秒)時,50個請求被成功返回。但是,當我將執行時間設置爲更大的數字(例如5000毫秒)時,某些請求會失敗。執行時間越長,失敗次數越多。

我一直在玩Tomcat的線程池配置,但目前爲止沒有幫助。我爲我的Tomcat連接器當前的配置如下:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
    maxThreads="150" minSpareThreads="4"/> 
<Connector executor="tomcatThreadPool" 
      port="8080" 
      protocol="org.apache.coyote.http11.Http11NioProtocol" 
      connectionTimeout="2000000" 
      acceptCount="50" 
      redirectPort="8443"/> 

可能有人建議我一個解決方案來解決這個問題?

回答

0

奇怪,因爲您有足夠的併發線程(maxThreads=150)同時處理50個請求。然而,Executor可以與其他連接器共享,因此線程在其他地方使用的可能性很小。 更可能我會說這應該工作,也許上面的配置不活躍。如果您在Eclipse中對此進行了更改,是否執行了「發佈」(在服務器視圖中,右鍵單擊tomcat服務器並選擇「發佈」)?然後重新啓動tomcat。

+0

謝謝你的回答。 我也覺得這很奇怪。我已經檢查過配置是否有效。 事情是,當我設置Thread.sleep(time)time = 2000時,它可以正常工作,但是當time = 5000時,某些請求會失敗。 – trangmx

+0

睡眠時間越長意味着線程被佔用的時間越長,因此它們可以服務於其他請求,可能會導致它們超時。如果你真的有50個線程,就不會發生這種情況。所以從外觀上看,你的線程少或者超過150個並行請求。也許你可以發佈整個server.xml嗎?你如何發起請求? – geert3

+0

請在這裏查看整個server.xml:[server.xml](https://github.com/trangmx/phdproject/blob/master/Tomcat/conf/server.xml)。 我將應用程序配置爲只發送50個併發請求,您可以在此日誌文件中看到服務器上的訪問日誌:[訪問日誌](https://github.com/trangmx/phdproject/blob/master/Tomcat/ logs/localhost_access_log.2015-09-11.txt) – trangmx