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

Почему у моего сервера высокая нагрузка, несмотря на использование ЦП всего на 1,5%

Вот что говорит статус apache:

Current Time: Sunday, 23-Dec-2012 05:13:40 CST
Restart Time: Saturday, 22-Dec-2012 13:38:12 CST
Parent Server Generation: 9
Server uptime: 15 hours 35 minutes 28 seconds
Total accesses: 3444470 - Total Traffic: 2.1 GB
CPU Usage: u40.86 s113.4 cu748.01 cs0 - 1.61% CPU load
61.4 requests/sec - 38.9 kB/second - 649 B/request
110 requests currently being processed, 0 idle workers 

Я увеличил максимальное количество подключений и максимальное количество серверов до 1500 и 3000 соответственно.

Сервер много использует жесткий диск для кеширования. У него только соединение 10 мбит / с. Однако я не стал его увеличивать, потому что у него всего 38,9 кБ / с.

Если горлышко бутылки действительно IO, как я могу проверить?

Сервер также сильно скручивает другие сайты и кеширует результат.

Сервер очень отзывчивый, но есть небольшая задержка.

Кажется, проблема связана с вводом-выводом: iostat -xdk 1 20

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               1.81   413.86    8.63  201.33   190.15  2463.45    25.28    46.85  223.00   3.79  79.68
sdb               0.00     0.00    0.00    0.00     0.02     0.00     8.07     0.00    0.68   0.68   0.00
sdd               0.00     0.00    0.00    0.00     0.02     0.00     8.07     0.00    0.73   0.72   0.00
sdc               0.00     0.00    0.00    0.00     0.02     0.00     8.07     0.00    0.78   0.78   0.00
dm-0              0.00     0.00    1.94  140.75    49.18   562.97     8.58    23.97  168.00   3.88  55.35
dm-1              0.00     0.00    0.00    0.00     0.02     0.00     8.00     0.00    6.65   2.25   0.00
dm-2              0.00     0.00    8.52  475.11   140.85  1900.43     8.44    47.55   98.32   1.63  78.97

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00   292.00    6.00  131.00   244.00  1668.00    27.91     5.14    6.53   2.24  30.70
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00  165.00     0.00   660.00     8.00     5.14    3.37   0.21   3.40
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    5.00  394.00   236.00  1576.00     9.08     1.55    3.92   0.67  26.70

Этот% util часто достигает 100%. Так что, похоже, это горлышко бутылки.

Vmstat, похоже, не проблема:

root@host [/var/log]#  vmstat 1 20
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
12 21      0 1148732 1160660 25192080    0    0    12   155   12   16 24 17 33 26  0
15  0      0 1281500 1160680 25193120    0    0    44  4568 15117 5501 31 19 24 27  0
12  3      0 1313904 1160684 25193728    0    0   104  1576 15960 5996 32 22 45  1  0
 7 10      0 1322328 1160692 25194140    0    0    16  3024 14354 5274 28 19 20 33  0
 6 12      0 1251420 1160704 25194848    0    0    96   452 13551 5208 24 19 32 26  0
20  0      0 1312052 1160708 25195592    0    0    76  4092 14885 5727 28 19 50  3  0
 3  0      0 1341072 1160728 25196652    0    0   456  3888 13056 5113 24 15 57  4  0
 6  1      0 1302052 1160728 25197448    0    0   188   936 11235 4372 20 15 66  0  0
11  9      0 1267768 1160744 25197872    0    0    16  2388 14423 5160 26 20 34 21  0
 5  0      0 1355152 1160748 25198496    0    0    36   504 12269 5302 19 14 52 15  0
 8  0      0 1323712 1160752 25199456    0    0    52  4032 12713 4779 22 16 61  0  0
 7  0      0 1350484 1160760 25199872    0    0    72  2788 13692 5086 25 17 54  4  0
 6  3      0 1334872 1160760 25200320    0    0     8  1088 12882 5193 23 17 60  0  0
 6 10      0 1266724 1160772 25200724    0    0    24  1940 13067 4705 25 19 39 17  0
 6  0      0 1315404 1160776 25201176    0    0    28  1428 11883 4914 19 14 46 21  0
11  0      0 1309244 1160784 25201724    0    0     0  2612 13001 4905 25 17 58  0  0
 4  0      0 1349536 1160796 25202204    0    0    12  2240 13124 4900 24 17 58  2  0
12  1      0 1322520 1160800 25202964    0    0   464  1268 13991 5733 26 19 54  0  0
 5 12      0 1301112 1160804 25203492    0    0    36  2172 13427 4956 25 17 38 20  0
 3  1      0 1374288 1160808 25203780    0    0    96   772 13360 5692 24 16 35 25  0

mpstat вроде в порядке

root@host [/var/log]# mpstat -P ALL
Linux 2.6.32-279.19.1.el6.x86_64 (host.buildingsuperteams.com)  12/23/2012      _x86_64_        (16 CPU)

06:17:20 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
06:17:20 AM  all   24.23    0.10   16.48   25.59    0.01    0.31    0.00    0.00   33.29
06:17:20 AM    0   24.18    0.09   17.00   34.98    0.00    0.16    0.00    0.00   23.59
06:17:20 AM    1   34.84    0.02   28.32   17.70    0.00    3.39    0.00    0.00   15.74
06:17:20 AM    2   26.35    0.04   20.08   26.29    0.00    0.01    0.00    0.00   27.22
06:17:20 AM    3   19.17    0.03   15.51   29.01    0.00    0.05    0.00    0.00   36.22
06:17:20 AM    4   17.64    0.28    9.33   35.08    0.00    0.26    0.00    0.00   37.42
06:17:20 AM    5   31.61    0.08   24.72   17.62    0.00    0.05    0.00    0.00   25.91
06:17:20 AM    6   24.38    0.07   19.06   20.42    0.00    0.03    0.00    0.00   36.04
06:17:20 AM    7   19.59    0.04   12.55   22.29    0.00    0.02    0.00    0.00   45.50
06:17:20 AM    8   14.21    0.12    8.60   38.27    0.00    0.44    0.00    0.00   38.36
06:17:20 AM    9   34.76    0.20   22.08   23.52    0.19    0.27    0.00    0.00   18.98
06:17:20 AM   10   26.13    0.06   16.03   22.77    0.00    0.01    0.00    0.00   35.00
06:17:20 AM   11   20.32    0.08   10.69   24.18    0.00    0.01    0.00    0.00   44.72
06:17:20 AM   12   16.99    0.21    8.50   35.72    0.00    0.17    0.00    0.00   38.40
06:17:20 AM   13   31.21    0.08   23.08   18.30    0.00    0.01    0.00    0.00   27.32
06:17:20 AM   14   25.72    0.06   16.95   21.02    0.00    0.01    0.00    0.00   36.25
06:17:20 AM   15   20.60    0.09   11.18   22.40    0.00    0.01    0.00    0.00   45.73

iotop - довольно хороший инструмент для понимания использования ввода-вывода на вашем компьютере и того, что это делают все процессы.

Для установки в форматах rhel / centos

 # yum install iotop -y

Для таких вариантов, как Ubuntu:

 # apt-get install iotop

Вам следует никогда используйте apachectl для измерения производительности системы. Это с точки зрения apache, которая может быть совершенно неверной в отношении того, как работает остальная часть операционной системы.

iostat, часть пакета sysstat, может измерять производительность io. Если вы хотите узнать, какой конкретный процесс принимает io, вы также можете использовать iotop (доступный через репозиторий EPEL - хотя, я бы предположил, он сказал бы «apache»). От iostat вы хотите как можно меньше util% что, в свою очередь, дает вам очень низкий await стоимость.

Ваш mpstat НЕ в порядке. Опять же, вы демонстрируете высокое использование ввода-вывода (%iowait). Для веб-сайтов в целом вы хотите, чтобы уровень iowaits составлял менее 1%, чтобы они хорошо реагировали. Вы также используете довольно высокий коэффициент использования системы по сравнению с типичной средой apache. Но на данный момент недостаточно данных, чтобы понять, почему.

Хотя это и не входит в то, о чем спрашивали, вам следует ознакомиться с использованием top в качестве основного инструмента диагностики системы, поскольку он дает общее представление обо всех аспектах системы. Самая важная часть верхнего вывода доступна буквально в верхней части вывода (которую вы, по иронии судьбы, упустили в своем pastebin).

Наконец, если вы имеете в виду maxclients под настройкой "максимального сервера" вашего apache. 3000 - это слишком много для любой системы в мире. Я не думаю, что даже эта система за полмиллиона долларов сможет справиться с таким количеством процессов apache. Если apach решит увеличить количество серверов по какой-либо причине, вы будете в ужасе. Однако идеальные числа можно измерить только путем тестирования конкретного приложения на конкретной машине. По сути, ваш максимальный объем памяти сервера *, который использует каждый сервер, должен быть равен вашему общему доступному оперативной памяти (не включая своп, поскольку вы не хотите постоянно использовать свопинг, а также общее количество, доступное для apache, то есть после ОС, другие услуги и др.).

110 запросов в настоящее время обрабатываются, 0 простаивающих работников

...

Я увеличил максимальное количество подключений и максимальное количество серверов до 1500 и 3000 соответственно.

Как говорит Питер, здесь происходит довольно много операций ввода-вывода, но я не думаю, что это единственная проблема. Почему на вашем сервере мало простаивающих работников? 16 ядер? Это плохая установка. Нет смысла использовать большое железо для веб-обслуживания. Установка serverlimit намного выше maxclients не имеет особого смысла. Похоже, что-то ограничивает количество потоков apache - нам нужно посмотреть, какие у вас основные настройки из httpd.conf

Подозреваю, что балансировка irq не оптимальна. Похоже, нагрузка на приложение распределяется равномерно.

Почему у моего сервера высокая нагрузка, несмотря на загрузку ЦП всего на 1,5%

Но вы не даете никаких показателей по нагрузке.

Как говорит Питер, вам следует начать с просмотра сверху.

Сервер также сильно скручивает другие сайты и кеширует результат ... Сервер очень отзывчивый, но с небольшой задержкой.

Так это задержка из-за удаленного доступа? Что-то другое?

Вы говорите, что здесь есть проблема, но, не зная, в чем проблема, которую вы пытаетесь решить, трудно дать какой-либо совет. Конечно, происходит много операций записи, и структура данных предполагает множество очень маленьких фрагментов данных (и аналогично ваш HTTP-трафик выглядит странно), но, не зная намного больше о том, что здесь происходит, его невозможно посоветовать.

Я подал заявку в cpanel.

Компетентный парень сказал мне, что проблема в том, что kjournald каждый раз записывает файлы размером 5-10 МБ.

Не совсем понимаю, почему так много написали.

Я перешел на SSD, и вроде работает.

В основном мне нужно бежать iostat -o -a и увидите, что виноват в этом kjournald.

Он вызывает столько операций ввода-вывода, что из-за этого загрузка диска всегда составляет 100%.