2014-01-06 64 views
0

我有一個web應用程序部署在tomcat 7.0.23上,並且有兩個連接器被設置,幾乎默認值。tomcat http請求中止,但https罰款

<Service name="Catalina"> 
<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      compression="on" 
      compressableMimeType="text/xml" 
      address="SERVER_HOSTNAME" /> 

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
      maxThreads="400" scheme="https" secure="true" 
      address="SERVER_HOSTNAME" 
      clientAuth="false" SSLProtocol="ALL" 
      SSLCertificateFile="/PATH/tomcat-server.crt" 
      SSLCertificateKeyFile="/PATH/tomcat-server.rsa" 
      SSLCipherSuite="ALL:!ADH:!SSLv2:!EXPORT40:!EXP:!LOW" 
      compression="on" compressableMimeType="text/xml"/> 

在tomcat剛剛重新啓動後,http:8080和https:8443都正常工作。雖然幾天後,8080將無法工作,但8443仍然正常工作。 「8080不工作」的含義是當使用firefox訪問http:8080時,一些資源如js/css文件將不可用。

在firebug中,有時A.js文件將顯示爲「Aborted」,有時候B.js將顯示爲「Aborted」。我嘗試訪問單個文件,例如http://:8080/js/A.js文件,結果也是隨機的,有時可以在瀏覽器中顯示完整內容,有時會中止http請求。

我也嘗試將connectionTimeout增加到「60000」,唯一的變化是在Firebug中,中止的請求是0B,但現在是實際大小。使8080正常工作的唯一方法是重新啓動tomcat。

請有人告訴我什麼原因或我應該嘗試哪種方式?謝謝。

回答

0

另一個過程可能是以某種方式使用端口8080。而且這個過程不會正確地響應您向Tomcat發送的請求。

因此,下次在重新啓動Tomcat之前發現此問題時,請檢查端口8080當前屬於哪個進程。

在Linux上我用下面的命令是:

netstat -nlpt | grep 8080 

其中一列(如果我沒有記錯的最後一個)都將消耗該端口的進程的ID。

如果你有一個Windows安裝,使用

netstat -ano | find "LISTENING" | find "8080" 

然後找到這個PID在任務管理器。

供參考:Windows Task Manager – showing the PID

+0

謝謝!服務器已在本週一重新啓動,因此http:8080現在沒問題,但我相信它會在幾天後回來。它在solaris上運行,但根據您的提示,我找到一個腳本來確定哪個線程正在使用特定的端口。這裏有兩個猜測,一個是其他線程消耗8080端口,因此以某種方式阻止tomcat響應,這與您懷疑的一樣;另一個是網絡延遲。你有想法如何檢查? – Daniel

+0

不好意思,檢查一下? Solaris上的端口使用率或網絡延遲,還是兩者? :) –