Desempenho do Linux / Apache muito lento, mesmo na rede local

2

Eu tenho uma máquina com Ubuntu executando Apache e MYSQL. As informações do sistema e da versão são as seguintes: Kernel Linux 3.0.0.-12 Apache / 2.2.20 MySQL Ver 14.14.Distrib 5.1.58

Estou executando alguns sites neste servidor, apenas alguns HTML, alguns PHP / MySQL. O problema é que o tempo de resposta é muito lento, tanto em sites estáticos quanto dinâmicos. Às vezes, leva mais de 10 segundos antes que uma resposta seja dada, isso torna os sites muito lentos e quase inutilizáveis.
O problema ocorre mesmo ao solicitar a rede local. Eu adicionei os subdomínios envolvidos ao meu arquivo / etc / hosts e resolvo todo o problema não é resolvido usando números IP em vez de URLs. Portanto, não há problema de pesquisa de DNS.
Modifiquei o formato de log mostrando os tempos de resposta e às vezes os arquivos demoram 12 segundos para serem exibidos. Consulte o arquivo jquery ~ .js na captura de tela do exemplo.
Eu não tenho nenhuma explicação para este tempo de resposta extremamente longo, mas não é nem mesmo o único problema aqui, alguns outros arquivos levam muito tempo para serem atendidos também, mas não mostram um longo tempo de resposta no arquivo de log.
Então provavelmente tecidos diferentes estão envolvidos aqui. Não consigo encontrar uma solução até agora, alguma sugestão ??? Com antecedência, Klaas

link para a imagem da captura de tela do arquivo de registro de acesso

Algumas informações adicionais de configuração:

apache2.conf (o comentário é removido)

LockFile ${APACHE_LOCK_DIR}/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

AccessFileName .htaccess

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

DefaultType text/plain
HostnameLookups Off

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn

Include mods-enabled/*.load
Include mods-enabled/*.conf
Include httpd.conf
Include ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %T/%D" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
Include conf.d/
Include sites-enabled/

E o hostfile virtual de um dos sites lentos, na verdade, é bastante simples ...

<VirtualHost *:80>
    ServerAdmin [email protected]
        ServerSignature EMail
        ServerName toenjoy.drsklaus.nl
    DocumentRoot /var/www/toenjoy.drsklaus.nl
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/toenjoy.drsklaus.nl/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride AuthConfig
                AuthType Basic
                AuthName "To Enjoy"
                AuthUserFile /etc/.htpasswd
                Require user petraaa
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
</VirtualHost>

E a saída de free -m:

klaas@ubuntu-server:/etc/apache2$ free -m
             total       used       free     shared    buffers     cached
Mem:          1997       1401        595          0        144       1017
-/+ buffers/cache:        238       1758
Swap:         2035          0       2035

e não tenho indicação de que a troca ocorre nos momentos em que o site está lento. Eu tenho o top runned e não parece ser um problema de CPU. Tenho a impressão de que a desova de um segmento do apache poderia ser o gargalo, mas é apenas uma sugestão. Talvez isso dê alguma informação extra!

EDITAR: O problema parecia ter desaparecido há algum tempo, mas ocorre novamente! E não apenas com o Apache, conectar-se com o SSH é muito demorado, às vezes leva até 15 segundos para que a frase-chave seja solicitada. Também scp trabalha muito lentamente. O comportamento é realmente impredizável e torna o servidor muito difícil de usar. Alguma idéia ...?

    
por klausch 13.02.2012 / 14:43

3 respostas

1

O que acontece quando você tenta acessar via lynx ou curl do host local ou de uma máquina na rede?

Além disso, veja este bloco do Apache:

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

Eu recomendaria livrar-se desse bloco inteiro, reiniciando o Apache & tentando novamente. Eu tive problemas estranhos quando o Apache faz algumas ações deny contra um localhost ou um endereço IP local. Problemas de pesquisa de DNS estranhos podem travar o Apache em uma base por solicitação. E um atraso de 12 segundos por página me faz pensar que essa é a causa. Mas não é 100% claro da sua configuração se o bloco que estou apontando for o culpado ou não. Mas faça algum tipo de busca por tarefas relacionadas à pesquisa de DNS conectadas ao Apache.

Além disso, é difícil dizer quais configurações devem estar no seu servidor sem observar o tráfego real de seus sites, mas sugiro que as configurações de KeepAlive pareçam pesadas. Eu recomendaria mudar assim:

KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 2

Também recomendo que você reduza MaxClients e adicione ServerLimit adjusting MaxRequestsPerChild no seu principal apache2.conf da seguinte forma:

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    ServerLimit          90
    MaxClients           90
    MaxRequestsPerChild 2000
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      64 
    ThreadLimit          64
    ThreadsPerChild      25
    ServerLimit          90
    MaxClients           90
    MaxRequestsPerChild 2000
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      64 
    ThreadLimit          64
    ThreadsPerChild      25
    ServerLimit          90
    MaxClients           90
    MaxRequestsPerChild 2000
</IfModule>

Além disso, é altamente recomendável instalar o Munin em sua máquina para controlar o uso de recursos. Poupa muita dor de cabeça & dá uma boa perspectiva ampla sobre as coisas.

    
por 08.03.2013 / 22:06
1

O Apache é uma fera complexa e pode ser o problema aqui ... ou não. Eu começaria a depurar a lentidão geral da rede antes de chegar naquele buraco escuro. Especificamente:

  • Tente executar o netcat no modo de servidor em uma porta, configurado para distribuir o conteúdo de um arquivo local e, em seguida, conectar-se a ele a partir da própria máquina. Por exemplo:

    enquanto verdadeiro; fazer nc -l 80 < index.html; feito

Isso elimina o apache, a rede física e os problemas de link de DNS ou IP. Observe que o arquivo exibido é local - sem montagens NFS, por exemplo.

  • O mesmo novamente, mas conecte-se pela rede local da mesma sub-rede
  • Novamente, mas de uma sub-rede diferente

Se você chegar até aqui, o seu servidor é bom, e o seu roteamento de rede também está OK.

Agora, limpe o DNS e certifique-se de que as pesquisas inversas funcionem. cavar 4.3.2.1.in-addr.arpa por exemplo para testar a pesquisa do endereço 1.2.3.4. Se for lento, isso é um problema e você precisará mexer com /etc/resolv.conf, dnsmasq ou qualquer coisa que você tenha. Não prossiga até que esta seja sólida. Vale a pena tentar SSH / SCP na caixa neste momento também - deve ser rápido.

Em seguida, o Apache. Se você chegar até aqui, você sabe que sua rede é boa, o DNS funciona e a caixa está OK. Então, isso deixa o seu aplicativo (ou seja, o servidor www). Tente despir a configuração ao mínimo e veja como você se sai. Por exemplo aqui é um deles.

Boa sorte!

    
por 04.11.2014 / 03:18
1

Edit: Experimente esses de cada vez!

Algumas coisas surgem:

MaxRequestsPerChild 0

Se você não tem motivos para usar o processo 0 ( nunca morre ) em seguida, aumente-a um pouco (o padrão é 1000 ) para dizer 100 e reinicie e veja se isso proporciona melhorias. Pode evitar vazamentos de memória.

MaxClients 150

Dependendo da quantidade de memória do seu servidor, e se todos os três módulos estiverem sendo chamados ao mesmo tempo, você poderá ficar sem memória. Por exemplo, se o seu processo do apache tiver um tamanho de 20 MB, você terá 150 clientes x 20 MB x 3 mods = 9000 MB ~ 8,8 GB. Mesmo que apenas um deles esteja sendo chamado, você está usando até ~ 2,9 GB.

Se você não estiver usando todos os três mods, desinstale os desnecessários da sua instância do apache.

Além disso, que tal a saída de top e free -m durante esse desempenho lento?

    
por 13.02.2012 / 16:48