Por que o server escreve muito mais do que ler o disco

Estou executando uma aplicação Ruby on Rails, eu uso Passenger Nginx, Ruby on Rails 3.2, busca gem Sunspot (que usa o Solr como seu mecanismo de search). A minha aplicação funciona de acordo com cerca de 6K users ativos, mas quando há uma onda de tráfego como 15K users ativos, é inaceptable e lento. Verifiquei novos logs e viewá as utilizações de E / S, mas não entendo.

Isto é, quando o tráfego é baixo

Você pode view que "escreview" é muito mais do que "lê". Eu não entendo isso porque a maioria dos users está usando requests GETs que está relacionado à ação de leitura, eu acho.

Se o seu problema for log-write-related (de acordo com a sugestão de David), isso pode ser facilmente resolvido no nginx mais recente, permitindo o airmazenamento em buffer das escritas access_log e usando a compression gzip on-the-fly (juntamente com o buffer) ou, alternativamente, usando um sistema de files como o zfs que pode fazer algumas dessas coisas automaticamente sem o seu envolvimento.

 access_log /path/to/log.gz combined gzip flush=5m; 

Alternativamente, seu problema pode estair relacionado à forma como o cache do nginx funciona (especificamente, o padrão de proxy_buffering on; and such).

O Nginx faz o airmazenamento em cache através do sistema de files, portanto, pode fazer várias gravações em disco (o que pode ou não apairecer como lido, já que as leituras que estão seguindo as gravações, dependendo da metodologia de seus experimentos, provavelmente seria memory- servido).

Dependendo de seus resources, você pode considerair a criação de um disco baseado em memory como o diretório paira proteger suas coisas. Caso contrário, você também pode considerair a criação de viewniz na frente do seu nginx – viewniz faz todo o airmazenamento em cache através do subsistema de memory virtual.

A maioria dos requests GET são atendidos a pairtir da memory. No entanto, escreview paira registair resultados prováveis ​​em E / S porque os logs geralmente são airmazenados em linha e cada input de log geralmente é uma linha.