Como solucionar um grande problema de memória com o Apache e mySQL

3

Eu li muito deste site para otimizar o meu servidor, mas nada realmente me ajudou :( Estou tendo um problema de memória, eu acho, eu tenho apenas um site (Drupal) com 860K page views mês, mas quando o tráfego aumentar , a média de carga sobe +40, +70 etc com 100% de uso de memória fazendo com que o servidor fique totalmente inativo

Na verdade, quando acabei de reiniciar o servidor, o uso total de memória é de cerca de 80%

Eu não sei o que fazer! Eu realmente não posso acreditar que este servidor não pode lidar com esse tipo de tráfego, por favor me ajude!

Especificações

Processor #1 to #24 
Intel Dual Xeon E5645 @ 2.40GHz
Cache 12288 KB
4GB Total RAM
Apache/2.2.19 -prefork- (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4  PHP/5.2.17
500GB HD RAID 1
Drupal based website with Boost module and Cache Router (INNODB tables)
APC Installed

topo (deslocamento - m)

top - 23:05:37 up 19:42,  1 user,  load average: 0.78, 0.74, 0.64
Tasks: 527 total,   1 running, 524 sleeping,   0 stopped,   2 zombie
Cpu(s):  1.7%us,  0.3%sy,  0.0%ni, 97.9%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4034276k total,  3774668k used,   259608k free,   279060k buffers
Swap:  6088624k total,   103616k used,  5985008k free,  1316080k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                       
 8768 mysql     15   0 1211m 880m 4784 S 12.0 22.4  20:43.44 mysqld                                        
20475 nobody    16   0  429m 176m  27m S  0.0  4.5   0:00.44 httpd                                         
20846 nobody    15   0  427m 176m  28m S  1.0  4.5   0:01.13 httpd                                         
20775 nobody    15   0  422m 171m  29m S  0.0  4.4   0:01.22 httpd                                         
20826 nobody    15   0  422m 171m  29m S  0.7  4.4   0:01.00 httpd                                         
20827 nobody    15   0  423m 171m  28m S  0.7  4.4   0:00.61 httpd                                         
20578 nobody    15   0  422m 171m  29m S  0.0  4.3   0:01.73 httpd                                         
20833 nobody    15   0  422m 170m  28m S  0.0  4.3   0:00.84 httpd                                         
20830 nobody    15   0  421m 170m  28m S  0.0  4.3   0:00.84 httpd                                         
20681 nobody    15   0  422m 170m  28m S  1.0  4.3   0:00.93 httpd                                         
20913 nobody    15   0  422m 170m  27m S  0.0  4.3   0:00.34 httpd                                         
20914 nobody    15   0  422m 169m  27m S  0.0  4.3   0:00.60 httpd                                         
20854 nobody    15   0  423m 167m  23m S  0.0  4.2   0:00.36 httpd                                         
20911 nobody    16   0  418m 167m  28m S  0.3  4.2   0:00.70 httpd 

link

Timeout 300
TraceEnable On
ServerSignature Off
ServerTokens Full
FileETag All
StartServers 5
<IfModule prefork.c>
MinSpareServers 5
MaxSpareServers 10
</IfModule>
ServerLimit 256
MaxClients 150
MaxRequestsPerChild 800
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

my.cnf

[mysqld]
max_connections = 120
safe-show-database
skip-locking
key_buffer = 148M
max_allowed_packet = 14M
table_cache = 596
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache_size = 24
query_cache_size= 128M
thread_concurrency = 48
wait_timeout = 45
innodb_file_per_table
innodb_log_file_size = 10485760
open_files_limit = 8192
tmp_table_size=200M
max_heap_table_size=200M
innodb_buffer_pool_size=596M
local-infile=1
log_slow_queries = /var/log/slow.log
long_query_time = 3

[mysqldump]
quick
max_allowed_packet = 16M

[mysqld_safe]
log-error=/var/log/mysqld.log

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 128M
sort_buffer_size = 64M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 128M
sort_buffer_size = 64M
read_buffer = 2M
write_buffer = 2M

Alguns gráficos (esta semana)

  • Carregamento médio / uso do sistema de arquivos (disco de troca de notas) / estatísticas do MySQL
  • link

Atualização:

  • Módulos Apache instalados
  • /etc/init.d/httpd -M e obteve estes resultados dpaste.com/hold/615665
  • /etc/init.d/httpd -l results dpaste.com/hold/615667
  • PHP.ini link

Superior com carga de servidor acima de 200

top - 12:27:13 up 5 days,  9:04,  1 user,  load average: 219.36, 189.93, 130.56
Tasks: 750 total,   1 running, 749 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  1.0%sy,  0.1%ni, 49.7%id, 47.8%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   4034276k total,  4014052k used,    20224k free,    13404k buffers
Swap:  6088624k total,  3036872k used,  3051752k free,    71272k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                       
15653 mysql     15   0 1444m 154m 3384 S  0.0  3.9 192:42.76 mysqld                                        
23800 nobody    16   0  422m  96m  29m D  0.3  2.4   0:06.96 httpd                                         
23527 nobody    16   0  422m  93m  29m D  0.0  2.4   0:05.11 httpd                                         
23759 nobody    15   0  421m  91m  26m S  0.7  2.3   0:03.97 httpd                                         
23842 nobody    16   0  422m  91m  26m D  0.3  2.3   0:04.88 httpd                                         
23819 nobody    16   0  421m  91m  26m D  0.3  2.3   0:07.11 httpd                                         
23739 nobody    16   0  421m  91m  26m D  0.0  2.3   0:10.27 httpd                                         
23778 nobody    15   0  421m  91m  26m S  0.0  2.3   0:04.81 httpd                                         
23790 nobody    15   0  421m  91m  26m S  0.0  2.3   0:03.86 httpd                                         
23754 nobody    16   0  421m  91m  26m D  0.0  2.3   0:08.19 httpd                                         
23700 nobody    16   0  421m  90m  26m D  0.3  2.3   0:05.45 httpd                                         
23843 nobody    16   0  420m  90m  26m S  0.0  2.3   0:06.39 httpd                                         
23510 nobody    16   0  426m  90m  24m D  0.0  2.3   0:04.98 httpd                                         
23841 nobody    16   0  416m  89m  29m D  0.0  2.3   0:03.53 httpd                                         
23836 nobody    15   0  414m  89m  30m S  0.0  2.3   0:05.82 httpd                                         
23849 nobody    15   0  418m  88m  25m S  0.0  2.3   0:05.78 httpd                                         
23833 nobody    16   0  429m  88m  24m D  0.0  2.3   0:05.59 httpd                                         
23832 nobody    16   0  418m  88m  25m S  0.0  2.2   0:09.25 httpd                                         
23746 nobody    16   0  428m  88m  25m D  0.0  2.2   0:04.13 httpd                                         
23851 nobody    16   0  428m  88m  24m D  0.0  2.2   0:03.60 httpd                                         
23816 nobody    15   0  418m  88m  25m S  0.0  2.2   0:07.00 httpd                                         
23282 nobody    15   0  416m  87m  28m S  0.0  2.2   0:11.29 httpd                                         
23742 nobody    15   0  416m  86m  26m S  0.0  2.2   0:09.37 httpd                                         
23837 nobody    16   0  425m  86m  25m D  0.3  2.2   0:05.20 httpd                                         
23093 nobody    16   0  430m  86m  24m D  0.0  2.2   0:04.19 httpd                                         
23732 nobody    16   0  421m  86m  24m D  0.0  2.2   0:05.55 httpd                                         
23772 nobody    15   0  415m  85m  29m S  1.0  2.2   0:14.55 httpd   

Alguém me ajudou a ajustar as configurações do Apache, mas tudo parece igual

I have enabled piped logging which should help with the memory issue. I have also shortened the amount of requests an apache process will do before it is cycled through memory.

Eu realmente aprecio sua ajuda, tentei quase tudo, não sou realmente um administrador de sistemas, mas não temos ninguém agora para nos ajudar.

Obrigado!

    
por atom 15.09.2011 / 07:37

4 respostas

1

Você sabe o quê?

módulo mod_security foi a causa do problema de memória, eu o desabilitei e todo processo httpd passou de 180 para 35mb!

Ele foi instalado e configurado pelo meu provedor de hospedagem desde o começo, agora eu preciso aumentar a segurança de outra maneira ou configurá-lo corretamente.

    
por 21.09.2011 / 08:37
6

Regra geral geral -

Execute este comando quando o servidor estiver sob carga:

ps -ylC httpd --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'

Isso informará aproximadamente o tamanho médio de um processo do Apache.

Este não é um nó da Web dedicado, portanto, 60% da RAM está disponível para o Apache.

4096 * .60 / AVERAGE_SIZE_HTTPD_PROCESS = aproximadamente o número de MaxClients / pedidos que você pode atender. Geralmente parece que sua média é de cerca de 170MB, então ...

Você pode atender 14 solicitações por vez. Reduza MaxClients para um número mais razoável, como 20-25.

Felicidades

    
por 15.09.2011 / 17:14
0

Tem a certeza absoluta de que precisa do módulo CacheRouter ? Por mais de uma vez, isso me causou problemas semelhantes. É um memory hog (pelo menos quando usado com o memcached), e se não estiver corretamente configurado, pode deixar seu site muito lento!

Com o tráfego que você descreveu, eu acho que você poderia muito bem viver sem o CacheRouter, mas o Boost pode ser útil. Sem o CacheRouter, o uso da memória do Apache pode diminuir drasticamente e dar ao seu servidor muito mais espaço para respirar. Além disso, se você estiver usando o módulo PHP do memcached, desative-o. Seu Apache parece estar comendo muita memória.

Além disso, suas configurações do Apache são estranhas.

  • TimeOut 300 é demais. Largue para algo entre 10 e 30.
  • %código%? Por quê?
  • Às vezes, TraceEnable On pode causar mais danos do que bem. Você já tentou sem ele?
por 15.09.2011 / 08:06
0

Não é uma resposta para esse problema específico, mas essa foi a página que eu encontrei quando estava tentando resolver um problema semelhante. Então, na esperança de ajudar outro administrador da lâmpada ...

No meu caso, meu problema era o comando get_browser () do PHP. Depois que eu instalei o browscap.ini (versão padrão), o uso de memória do meu processo apache passou de 10Mb para 170Mb. Isso correu bem até que eu tive um pico repentino de atividade. Mudar para a versão Lite do browscap.ini me coloca de volta nos 10MB mais aceitáveis.

    
por 21.08.2015 / 08:08