Pergunta

Em tomcat 6 eu tenho um servlet em execução openbluedragon, tudo compila e servidores até quik, com exceção das imagens, eles realmente ficam significativamente. Qualquer sugestões de otimização para a imagem que serve?

Aqui está o meu 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>
Foi útil?

Solução

Outra opção é usar o Apache como um frontend, conectando tomcat com mod_jk. Desta forma, você pode deixar apache servir conteúdo estático (por exemplo, imagens, css, javascript) e deixe tomcat gerar o conteúdo dinâmico. Pode deixar um pouco de trabalho para separar o conteúdo estático desde os dinâmicos, mas funciona muito bem para mim.

No Unix, tendo um Apache como frontend é uma boa opção porque estar vinculado a porta 80 está muitas vezes forçado a correr como root. Apache sabe como descartar permissões de root após a ligação de uma porta, Tomcat não. Você não quer um servidor enfrentou ao público para ser executado como root.

(Isto é semelhante à resposta de proxy reverso, mas não envolve um proxy, mas mod_jk)

Outras dicas

Você está servindo o mesmo conjunto de imagens mais e mais? Nesse caso, a adição de um filtro de servlet que adiciona um razoável Expira cabeçalho pode salvar tomcat um monte de trabalho. Não vai aumentar a velocidade da imagem servido, mas só vai fazer o número de solicitações que tem que lidar com menos. Lotes de exemplos para isso na web.

Se você tem a opção, você pode adicionar um proxy reverso antes da sua aplicação. No trabalho eu tenho um servidor web Apache, que recebe todas as conexões HTTP de entrada. Com base no URL, ou ele encaminha a solicitação para outro servidor ou serve-se o conteúdo em si. Eu usei essa abordagem para acelerar servindo conteúdo estático para um site Trac. As directivas ProxyPass e ProxyPassReverse são um bom lugar para começar a procurar se você quiser ir por esse caminho.

Como um exemplo simples, se você tem um diretório virtual chamado / imagens, Apache pode servir-se qualquer pedido de algo nesse diretório e tudo para a frente mais a sua instância Tomcat. A sintaxe é bastante abrangente. Se houver qualquer método em tudo ao modo como o conteúdo estático é identificado esta é uma abordagem que vai funcionar.

Apache não é a única opção aqui. Eu acho que todos os servidores web modernos incluem uma funcionalidade semelhante. Se eu estivesse começando hoje eu provavelmente olhar para Lighttpd em vez disso, só porque ele faz menos.

Pode até ser cache proxies reversos que descobrir isso para você automaticamente. Eu não estou familiarizado com qualquer um deles embora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top