2008-09-20 36 views
3

在tomcat 6中,我有一個運行openbluedragon的servlet,一切編譯和服務器運行良好,除了圖像之外,它們確實顯着滯後。任何建議優化圖像服務?加速Tomcat中的圖像6

這裏是我的server.xml:

<Service name="Catalina"> 

     <Connector port="8009" protocol="AJP/1.3" /> 
     <Connector port="8080" maxThreads="100" protocol="HTTP/1.1" connectionTimeout="20000" /> 
     <Engine name="Standalone" defaultHost="hostname.whatever" jvmRoute="ajp13"> 

     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> 
     <Host name="hostname.whatever" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 
     ...context 
     </Host> 

    </Engine> 
    </Service> 

回答

4

另一種選擇是使用apache作爲前端,將tomcat與mod_jk連接起來。這樣你可以讓apache提供靜態內容(例如圖像,css,javascript)並讓tomcat生成動態內容。可能會留下一些工作來分離靜態內容和動態內容,但對我而言非常有用。

在Unix上,將apache作爲前端是一個不錯的選擇,因爲綁定到80端口通常會被迫以root身份運行。 Apache知道如何在綁定一個端口後刪除根權限,Tomcat不會。您不希望面向公衆的服務器以root身份運行。

(這類似於反向代理的答案,但不涉及代理,但mod_jk的)

+0

謝謝,我已經看着mod_jk,我知道很多人使用它,但它似乎根據基準測試tomcats jio實際上服務器圖像和靜態內容快速通過mod_jk ...雖然是圖像分離他們會更快地服務w \ apache,擔心我的java應用程序會放慢速度 – ethyreal 2008-09-23 15:36:43

3

如果可以選擇,你可以提前你的應用程序的添加反向代理。在工作中,我有一個接收所有入站HTTP連接的Apache Web服務器。根據URL,它將請求轉發給另一臺服務器或者提供內容本身。我已經使用這種方法來加速爲Trac網站提供靜態內容。 ProxyPass和ProxyPassReverse指令是一個很好的開始尋找你是否想要走這條路線的地方。

作爲一個簡單的例子,如果您有一個名爲/ images的虛擬目錄,Apache可以提供對該目錄中任何內容的任何請求,並將其他所有內容轉發給Tomcat實例。語法非常全面。如果有任何方法可以確定靜態內容的識別方式,這是一種可行的方法。

Apache並不是唯一的選擇。我認爲所有現代Web服務器都包含類似的功能。如果我從今天開始,我可能會看看LigHTTPd,只是因爲它少。

甚至可能會有緩存反向代理,自動爲您解決這個問題。但我並不熟悉他們。

4

你一遍又一遍的服務相同的一組圖像?在這種情況下,添加一個添加合理的Expires頭的servlet過濾器可能會爲tomcat節省很多工作。它不會增加提供服務的圖像的速度,但只會使請求數量減少。網上有很多這方面的例子。