Estou ficando louco tentando escalar o memcached. De seu site:
Memcached operations are almost all O(1). Connecting to it and issuing a get or stat command should never lag. If connecting lags, you may be hitting the max connections limit. See ServerMaint for details on stats to monitor.
If issuing commands lags, you can have a number of tuning problems. Most common are hardware problems, not enough RAM (swapping), network problems (bandwidth, dropped packets, half-duplex connections). On rare occasion OS bugs or memcached bugs can contribute.
Bem ... certamente não está funcionando como uma operação O (1) para mim. Sob carga baixa para normal em nosso site, os tempos de resposta do memcached para operações get e set são de cerca de 0,001 segundo. Não é ruim. Mas se triplicarmos a carga, obteremos outliers que levarão 100x (ou, em casos raros, 1000x!) Por muito tempo. Eu até tive uma instância em que demorou 2.2442 segundos para o memcached armazenar um valor.
Obviamente, isso está matando nosso site.
Aqui está a saída do Memcached- > getStats durante um dos períodos mais lentos:
[pid] => 18079
[uptime] => 8903
[threads] => 4
[time] => 1332795759
[pointer_size] => 32
[rusage_user_seconds] => 26
[rusage_user_microseconds] => 503872
[rusage_system_seconds] => 125
[rusage_system_microseconds] => 477008
[curr_items] => 42099
[total_items] => 422500
[limit_maxbytes] => 943718400
[curr_connections] => 84
[total_connections] => 4946
[connection_structures] => 178
[bytes] => 7259957
[cmd_get] => 1679091
[cmd_set] => 351809
[get_hits] => 1662048
[get_misses] => 17043
[evictions] => 0
[bytes_read] => 109388476
[bytes_written] => 3187646458
[version] => 1.4.13
Então, as coisas que descartei até agora são:
- Atingir o limite máximo de conexões (
curr_connections
de 84 está bem abaixo do padrão de máximo de 1024)
- Troca - a máquina possui 900M de 1024M de memória dedicada ao memcached em uma máquina dedicada. Parece estar usando apenas cerca de 7 MB de dados de acordo com o
bytes
stat.
Como eu diagnostico os outros problemas de hardware? O prstat não mostra muita coisa em termos de uso da CPU ou da memória. Não sei como descobrir os problemas de rede, mas como esse é um servidor dedicado na mesma rede privada da caixa da web, não acho que seja um problema de conectividade ( ping
é menor que um milissegundo entre as caixas).
Há algo mais que eu estou sentindo falta aqui? Está me deixando louca.
Editar: também esqueci de mencionar que tentei conexões persistentes e não persistentes com impacto mínimo / sem impacto.