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

Как определить, что вызывает скачок средней нагрузки моего сервера до 90

Хорошо, я здесь в полной растерянности. У меня этот сервер Ubuntu работает уже около трех лет. В последние пару месяцев он стал вести себя странно, и становится только хуже. Это довольно загруженный сервер, на котором работает около 15 веб-сайтов и ряд других инструментов. Типичная 15-минутная нагрузка составляет 0,3. Тем не менее, примерно каждые 12 часов он поднимается до 90.

Я уверен, что это как-то связано с mysql, и сервер каким-то образом блокируется, а apache просто накапливается, ожидая открытия чего-либо. Вот вершина, когда дела сходят с ума.

Tasks: 143 total,  20 running, 123 sleeping,   0 stopped,   0 zombie
Cpu(s): 34.3%us, 62.9%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.2%hi,  2.6%si,  0.0%st
Mem:   2061444k total,   911460k used,  1149984k free,    11156k buffers
Swap:  1421712k total,        0k used,  1421712k free,   126728k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1080 mysql     20   0  397m  59m 5892 S   18  3.0   0:37.37 mysqld
 1602 www-data  20   0  198m  26m 4948 R    7  1.3   0:08.17 apache2
 1725 www-data  20   0  189m  24m  11m R    7  1.2   0:04.33 apache2
 1719 www-data  20   0  189m  25m  12m R    7  1.2   0:03.88 apache2
 1802 www-data  20   0  192m  20m 4808 S    7  1.0   0:03.15 apache2
 1521 www-data  20   0  199m  28m 6912 R    6  1.4   0:10.15 apache2
 1530 www-data  20   0  193m  22m 5104 S    5  1.1   0:06.53 apache2
 1536 www-data  20   0  196m  25m 4936 R    5  1.2   0:07.93 apache2
 1583 www-data  20   0  186m  21m  11m R    5  1.0   0:03.46 apache2
 1722 www-data  20   0  193m  21m 4956 R    5  1.1   0:04.91 apache2
 1906 www-data  20   0  182m  12m 6724 S    5  0.6   0:00.61 apache2
 1439 root      20   0 92040 3672 2280 S    5  0.2   0:08.04 ezproxy
 1539 www-data  20   0  194m  27m 9548 R    4  1.3   0:08.08 apache2
 1716 www-data  20   0  187m  22m  11m R    4  1.1   0:03.36 apache2
 1891 www-data  20   0  183m  18m  11m S    4  0.9   0:00.61 apache2
 1498 www-data  20   0  194m  23m 6264 S    4  1.2   0:11.47 apache2
 1517 www-data  20   0  193m  22m 5212 R    4  1.1   0:06.56 apache2
 1523 www-data  20   0  190m  26m  12m S    3  1.3   0:07.61 apache2
 1761 www-data  20   0  186m  20m  10m R    2  1.0   0:02.66 apache2
 1779 www-data  20   0  184m  19m  10m R    2  0.9   0:02.69 apache2
 1711 www-data  20   0  185m  20m  11m R    2  1.0   0:03.32 apache2
 1728 www-data  20   0  182m  11m 5028 R    2  0.6   0:01.14 apache2
 1819 www-data  20   0  181m 8120 3332 S    2  0.4   0:00.49 apache2
 1886 www-data  20   0  182m  11m 6364 S    2  0.6   0:01.18 apache2
 1899 www-data  20   0  184m  18m  10m S    2  0.9   0:01.38 apache2
 1497 www-data  20   0  191m  27m  12m S    1  1.4   0:07.84 apache2
 1766 www-data  20   0  181m  10m 5016 R    1  0.5   0:01.39 apache2
 1871 www-data  20   0  184m  19m  11m R    1  1.0   0:00.98 apache2
 1563 www-data  20   0  186m  23m  13m S    1  1.2   0:07.37 apache2
 1865 www-data  20   0  184m  18m  10m S    1  0.9   0:01.56 apache2
 1494 www-data  20   0  193m  25m 8352 S    1  1.3   0:12.07 apache2
 1512 www-data  20   0  186m  23m  13m R    1  1.1   0:06.10 apache2
 1526 www-data  20   0  186m  24m  13m R    1  1.2   0:06.30 apache2
 1816 www-data  20   0  184m  18m  10m S    1  0.9   0:01.60 apache2
 1516 www-data  20   0  184m  19m  11m S    1  1.0   0:04.12 apache2

Прямо сейчас дела идут спокойно,

Uptime: 241264  Threads: 1  Questions: 1870412  Slow queries: 1354  Opens: 13818  Flush tables: 1  Open tables: 256  Queries per second avg: 7.752

Вот все мои размеры db в МБ

name1   14.78335094
name2   11.08541870
name3   31.01449203
name4   6.24377346
name5   0.36655807
name6   10.95312500
information_schema  0.00781250
mysql   0.60296535
name7   2.19595051
name8   1.82343006
name9   20.51372623
name0   59.42693043

Я проверил журнал медленных запросов, но когда происходит блокировка, каждый запрос сбрасывается в журнал медленных запросов. Я не был на сервере, когда случалось запускать proccesslist. Могу ли я еще что-нибудь сделать, кроме этого?

Обновить: Вот результат работы сценария tuning-primer.sh: https://gist.github.com/913565

Обновить: Вот IOStat во время психоза:

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               5.25         6.05       106.35    3090763   54314928

И vmstat 3: https://gist.github.com/913565#file_vmstat%203

Теперь с большим количеством SAR! https://gist.github.com/913565#file_sar

Спасибо за помощь.

Попробуйте установить sar и запускает его в фоновом режиме. У вас может быть пиковая нагрузка на диск. sar позволит вам увидеть, какие ресурсы наиболее загружены, когда что-то пойдет не так.

Ты высокий sys load может указывать на то, что у вас происходит много операций ввода-вывода. Это может быть результатом естественного роста базы данных. Есть ли у вас процесс архивирования для удаления старых данных из баз данных? В противном случае вы достигнете точки, когда данные, необходимые для сканирования таблицы, больше не умещаются в памяти. Когда это произойдет, производительность резко упадет. Журнал медленных запросов может включать несколько запросов, которые можно улучшить, добавив индекс.

Если у вас есть другая система, которую вы можете запустить munin на, вы можете установить munin-node на сервере. Это даст вам графический вывод некоторых данных, доступных из sar. Время от времени проверяйте графики, чтобы увидеть, не что-то меняется.

РЕДАКТИРОВАТЬ: Похоже, у вас может быть утечка памяти в каком-то коде, запущенном под apache. Попробуйте установить MaxRequestsPerChild до 100 и перезапуск apache. Если это решит вашу проблему, попробуйте найти утечку памяти.

Размер вашей базы данных в МБ, верно? Это довольно мало и должно почти полностью соответствовать настроенному объему памяти, поэтому я не думаю, что mysql является здесь проблемой. Не могли бы вы опубликовать вывод Учебник по настройке MySQL тем не мение? Вдобавок вам обязательно нужно что-то вроде munin / cacti / .. для построения графиков и сбора данных о вашей системе. Какое программное обеспечение работает на ваших машинах? php? Вы уже используете кеш-код операции, такой как APC?

Возможно ли, что данные выросли в размерах до такой степени, что периодический запрос MySQL начал возвращать / обрабатывать так много результатов, что MySQL исчерпал физическую память и должен использовать огромные объемы виртуальной памяти?

Открыто: 13818 Открытых столов: 256

... каждая таблица открыта с диска, но их 256. Диск бывают медленные и блокираторы.

Вы можете попробовать увеличить table_cache значение mysql в /etc/mysql/my.cnf

Также запустите:

mysqlcheck --auto-repair --check --optimize --all-databases

Чтобы восстановить что-то от оригинального исполнения.

В любом случае 2 ГБ оперативной памяти для 26-метровых процессов httpd дают вам место не более чем для +/- 80 процессов httpd ... говорят, что многие веб-сайты имеют от 50 до 100 "файлов" (js, css, imgs и т. Д.) На сервере для каждый запрос ... так что поменять местами и заблокировать легко за несколько посещений.

Рядом с инструментом sar вы можете использовать инструменты vmstat и iostat также. iostat поможет вам, если проблема связана с вводом-выводом. Возможно, мы сможем помочь вам лучше, если вы предоставите нам результат, например, vmstat 3. (Это будет распечатывать вывод vmstat каждые 3 секунды. Вы можете остановить инструмент через минуту или две.)