Mantendo o apache2 sob controle

2

Eu tenho algo estranho no meu servidor Apache2 que está sob o Ubuntu Linux.

Eu tenho dois sites, um é tratado diretamente pelo Apache2 através do módulo Passenger (é uma aplicação web do ruby), o outro é o proxy reverso para outra porta para um servidor Tomcat6.

Tudo parece bem, mas o comportamento do Apache2 parece realmente ganancioso: com top , vejo que ele tem pelo menos 5-6 processos e eles crescem até 13-14 quando faço algumas solicitações apenas para esses dois servidores.

É correto ter tantos processos?

Devo configurá-lo para ser menos ganancioso se não houver necessidade? Eu estava fazendo comparações com uma configuração similar em uma máquina menos potente (512mb RAM vs 2gb RAM) e parece que nesta máquina ele mantém menos processos abertos. Talvez o Apache2 faça o benchmark da máquina para entender quantos recursos serão alocados?

Apenas para informações, ambas as máquinas são virtualizadas no servidor VMWare

Obrigado antecipadamente

    
por Jack 22.09.2010 / 13:06

1 resposta

3

Você deve ler a Documentação do Apache sobre MPMs (Multi-Processing Modules) . Em suma, isso determina como o Apache lidará com várias solicitações, e há duas maneiras principais de fazer isso: preforking (que é o que parece que você está fazendo agora) e thread worker , que geralmente é mais eficiente.

O Prefork, como você disse, cria e mantém vários processos apache "sobressalentes", e cada processo lida com um cliente. Quando você fica com poucos processos, o Apache cria mais. Isso pode ser lento e consumir muita memória. Quantos processos são criados podem ser ajustados usando os StartServers , MinSpareServers e MaxSpareServers diretivas de configuração.

O Worker usa um único ou um pequeno número de processos, mas cria vários threads dentro de cada processo para manipular cada solicitação. Isso pode ser muito mais eficiente, mas não é compatível com certos módulos do Apache que não são thread-safe (mais notavelmente o PHP). Então, se você está usando esses módulos, você deve considerar mudar para o FastCGI.

Da documentação do Apache:

Apache MPM prefork

This Multi-Processing Module (MPM) implements a non-threaded, pre-forking web server that handles requests in a manner similar to Apache 1.3. It is appropriate for sites that need to avoid threading for compatibility with non-thread-safe libraries. It is also the best MPM for isolating each request, so that a problem with a single request will not affect any other.

[...]

A single control process is responsible for launching child processes which listen for connections and serve them when they arrive. Apache always tries to maintain several spare or idle server processes, which stand ready to serve incoming requests. In this way, clients do not need to wait for a new child processes to be forked before their requests can be served.

The StartServers, MinSpareServers, MaxSpareServers, and MaxClients regulate how the parent process creates children to serve requests. In general, Apache is very self-regulating, so most sites do not need to adjust these directives from their default values. Sites which need to serve more than 256 simultaneous requests may need to increase MaxClients, while sites with limited memory may need to decrease MaxClients to keep the server from thrashing (swapping memory to disk and back). More information about tuning process creation is provided in the performance hints documentation.

E:

Apache MPM worker

This Multi-Processing Module (MPM) implements a hybrid multi-process multi-threaded server. By using threads to serve requests, it is able to serve a large number of requests with less system resources than a process-based server. Yet it retains much of the stability of a process-based server by keeping multiple processes available, each with many threads.

[...]

A single control process (the parent) is responsible for launching child processes. Each child process creates a fixed number of server threads as specified in the ThreadsPerChild directive, as well as a listener thread which listens for connections and passes them to a server thread for processing when they arrive.

Eu mudei de mod_php e mpm_prefork para FastCGI PHP e mpm_worker e encontrei um grande aumento no desempenho, especialmente para arquivos estáticos ( imagens, arquivos HTML, etc). Sua milhagem pode variar ...

    
por 22.09.2010 / 14:31