Como posso encontrar a origem dos meus problemas de carga alta no servidor Ubuntu?

3

Nós temos um Ubuntu 10.4 VPS servindo um site Rails, que muitas vezes mostra carga muito alta, mas não tem altos números de CPU ou memória. Lendo muitas outras perguntas aqui na falha do servidor sugere para mim que essa é uma questão I / O (ou seja, há processos que estão presos em E / S espera estado e, portanto, aumentando a carga). Estou tentando rastrear esses processos , mas não tendo muita sorte. Eu apreciaria a ajuda com (a) maneiras de identificar os processos culposos e / ou (b) a confirmação de que estou fazendo a pergunta certa.

Aqui está um instantâneo de top :

top - 18:28:49 up 5 days,  3:07,  2 users,  load average: 1.79, 1.83, 1.73
Tasks:  82 total,   1 running,  81 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   1794980k total,  1780384k used,    14596k free,    13356k buffers
Swap:   524284k total,     3116k used,   521168k free,  1012272k cached

Observe a troca baixa, CPUs praticamente ociosas; é por isso que acho que estamos ligados a E / S em vez da memória ou da CPU.

Aqui está iostat (ofusquei o nome do servidor):

$ iostat -x 1 3
Linux 2.6.35.2-xenU (our.server.com)     03/25/11        _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.75    0.19    0.50    0.31    0.01   97.24

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
xvdap1            0.01    11.52    2.19    3.18   145.12   117.55    48.97     0.08   15.60   1.67   0.90
xvdap9            0.01     0.01    0.00    0.00     0.10     0.14    62.62     0.00   13.20   6.09   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
xvdap1            0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
xvdap9            0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
xvdap1            0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
xvdap9            0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

iotop não será exibido nesta caixa:

$ iotop
Could not run iotop as some of the requirements are not met:
- Linux >= 2.6.20 with I/O accounting support (CONFIG_TASKSTATS, CONFIG_TASK_DELAY_ACCT, CONFIG_TASK_IO_ACCOUNTING): Not found
- Python >= 2.5 or Python 2.4 with the ctypes module: Found

ps raramente encontra qualquer processo no estado D:

$ sudo ps -eo pid,user,state,cmd | awk '$3 ~ /D/ { print $0 }'
  976 root     D [kjournald]
$ sudo ps -eo pid,user,state,cmd | awk '$3 ~ /D/ { print $0 }'
$ sudo ps -eo pid,user,state,cmd | awk '$3 ~ /D/ { print $0 }'
$ 

Qual é o próximo passo de resolução de problemas?

ETA: corri vmstat :

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0   3116 509372  22880 773232    0    0    18    15   24   14  2  0 97  0

Esse valor wa de 0 me faz pensar se a E / S é realmente o problema.

Além disso, sim, eu sei que carregar no intervalo 1.x não é realmente um problema - mas este aplicativo tem um histórico de aumento de carga até que engasgue, e se eu puder rastrear a fonte enquanto ela ainda tem um baixo febre eu poderia poupar uma fatalidade (para torturar uma metáfora).

    
por pjmorse 25.03.2011 / 19:39

1 resposta

2

Eu recomendaria pesquisar qualquer coisa que não esteja no estado S sleeping. É possível que você tenha processos de zumbis que podem ser contados como algo em execução, apesar de não estar realmente fazendo nada. ps -eo pid,user,state,cmd | awk '$3 !~ /S/ {print $0}' Isso mostrará todos os processos que não estão dormindo. (Correndo, esperando no IO, zumbi, etc)

Vale a pena notar que sua média de carga não é terrivelmente alarmante. Supondo que você tenha mais de dois núcleos na caixa, não há dúvida de que há muito poder de CPU disponível. Mas, obviamente, ainda vale a pena investigar se você não espera que 1 a 2 processos sejam executados a qualquer momento.


- Christopher Karel

    
por 25.03.2011 / 20:09