Хорошо, я здесь в полной растерянности. У меня этот сервер 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 секунды. Вы можете остановить инструмент через минуту или две.)