Назад | Перейти на главную страницу

Как я могу найти источник моих проблем с высокой нагрузкой на сервере Ubuntu?

У нас есть Ubuntu 10.4 VPS, обслуживающий сайт Rails, который часто показывает довольно высокую нагрузку, но не имеет большого количества ЦП или памяти. Читаю много другого вопросы здесь, на Server Fault, мне кажется, что это Проблема ввода / вывода (т.е. есть процессы, которые застревают в состоянии ожидания ввода-вывода и, следовательно, увеличивают нагрузку). Я пытаюсь отслеживать эти процессы, но не повезло. Я был бы признателен за помощь с (а) способами определения виновных процессов и / или (б) подтверждением того, что я задаю правильный вопрос.

Вот снимок 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

Обратите внимание на низкий уровень подкачки, процессоры в основном простаивают; вот почему я думаю, что мы привязаны к вводу-выводу, а не к памяти или процессору.

Вот iostat (Я запутал имя сервера):

$ 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 не будет работать в этом поле:

$ 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 редко находит какие-либо процессы в состоянии 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 }'
$ 

Каков мой следующий шаг по устранению неполадок?

ETA: Я побежал 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

Который wa значение 0 заставляет меня задуматься, действительно ли проблема заключается в вводе-выводе.

Кроме того, да, я знаю, что нагрузка в диапазоне 1.x на самом деле не проблема, но у этого приложения есть история увеличения нагрузки до тех пор, пока она не задохнется, и если я могу отследить источник, пока у него все еще низкая температура, я мог бы пощадить фаталити (пытать метафору).

Я бы рекомендовал поискать что-нибудь не в S состояние сна. Возможно, у вас есть зомби-процессы, которые можно считать запущенными, хотя на самом деле они ничего не делают. ps -eo pid,user,state,cmd | awk '$3 !~ /S/ {print $0}' Это покажет все не спящие процессы. (Запуск, ожидание ввода-вывода, зомби и т. Д.)

Стоит отметить, что ваша средняя загрузка не вызывает особого беспокойства. Предполагая, что у вас более двух ядер в коробке, несомненно, хватит мощности процессора. Но, очевидно, все же стоит изучить, если вы не ожидаете, что 1-2 процесса будут выполняться в любой момент времени.


- Кристофер Карел