2008-09-20 6 views
3

Dans Tomcat 6 j'ai une servlet fonctionnant openbluedragon, tout compile et les serveurs jusqu'à quik, à l'exception des images, ils sont vraiment à la traîne. Des suggestions d'optimisation pour la diffusion d'images?Accélérer les images dans Tomcat 6

Voici mon 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> 

Répondre

4

Une autre option consiste à utiliser apache en tant que frontal, en connectant tomcat avec mod_jk. De cette façon, vous pouvez laisser apache servir du contenu statique (par exemple images, css, javascript) et laisser Tomcat générer le contenu dynamique. Pourrait laisser un peu de travail pour séparer le contenu statique de ceux dynamiques, mais fonctionne très bien pour moi. Sous Unix, disposer d'un apache comme interface est une bonne option car étant lié au port 80, vous êtes souvent obligé de l'exécuter en tant que root. Apache sait comment supprimer les permissions root après avoir lié un port, ce qui n'est pas le cas de Tomcat. Vous ne voulez pas qu'un serveur confronté au public s'exécute en tant que root.

(Ceci est similaire à la réponse proxy inverse, mais ne comporte pas de procuration, mais mod_jk)

+0

merci, j'ai regardé dans mod_jk, je sais que beaucoup de gens l'utilisent, mais il semble selon les tomcats benchmarking jio réellement des images de serveurs et du contenu statique rapide puis par mod_jk ... bien que les images ont été séparées servirait plus vite \ apache, crains que mes applications Java ne ralentissent – ethyreal

3

Si vous avez la possibilité, vous pouvez ajouter un proxy inverse à l'avance de votre application. Au travail, j'ai un serveur web Apache qui reçoit toutes les connexions HTTP entrantes. Basé sur l'URL, il transmet la demande à un autre serveur ou sert le contenu lui-même. J'ai utilisé cette approche pour accélérer la diffusion de contenu statique pour un site Trac. Les directives ProxyPass et ProxyPassReverse sont un bon endroit pour commencer à chercher si vous voulez suivre cette route. Pour un exemple simple, si vous avez un répertoire virtuel appelé/images, Apache peut répondre à n'importe quelle demande pour quelque chose dans ce répertoire et transmettre tout le reste à votre instance Tomcat. La syntaxe est assez complète. S'il existe une méthode quelconque pour identifier votre contenu statique, cette approche fonctionnera.

Apache n'est pas le seul choix ici. Je pense que tous les serveurs web modernes incluent des fonctionnalités similaires. Si je commençais aujourd'hui, je regarderais plutôt LigHTTPd, juste parce que ça fait moins.

Il se peut même que des proxys inverses de mise en antémémoire soient automatiquement détectés pour vous. Je ne connais pas l'un d'entre eux cependant.

4

Vous hébergez le même ensemble d'images à plusieurs reprises? Dans ce cas, l'ajout d'un filtre de servlet qui ajoute un en-tête Expires raisonnable pourrait faire gagner beaucoup de temps à Tomcat. Cela n'augmentera pas la vitesse de l'image servie mais fera simplement diminuer le nombre de requêtes qu'il doit gérer. Beaucoup d'exemples pour cela sur le web.

Questions connexes