
У меня проблема со средними показателями нагрузки на моих выделенных компьютерах Debian GNU/Linux. На обоих (2 из них) запущены MySQL + программное обеспечение пользовательского игрового сервера — небольшая «MMORPG» (совсем не огромная). Использование ЦП и памяти в порядке. Использование ЦП обычно < 5%. Использование ОЗУ достигает примерно 80–90%, но всегда есть куча свободной, кэшированной или буферизованной памяти. Использование подкачки равно 0.
При мониторинге нагрузки с помощью uptime, top или любой другой команды, которая ее показывает, она случайно подскакивает до чего-то вроде 4 или даже больше. Это, очевидно, проблема, особенно учитывая, что у обоих блоков «всего» 2 ядра. После волшебного скачка средней нагрузки она начинает плавно снижаться, что говорит о том, что это был действительно временный скачок в использовании ресурсов. Использование ЦП всегда составляет 0-5%, при максимуме 10%, когда мне удавалось смотреть на top с частотой обновления в 1 секунду в течение примерно 15 минут.
Я пробовал некоторые инструменты, такие как htop, vmstat, dstat и т. д., но безрезультатно. Вот журнал для тех, кому интересно:
http://www.k-zodron.com/log.txt
За исключением появления в начальных строках, загрузка ЦП почти не увеличивается, в то время как нагрузка подскакивает до астрономических значений. Я не супер-эксперт в этом деле, но запись 4 КБ на диск не звучит так, как будто это может быть узким местом ввода-вывода.
Я также запустил MySQL Tuning Primer Tool, и он сообщает, что все в порядке.
Есть идеи, как отследить и решить проблему? Спасибо!
Редактировать
http://www.k-zodron.com/munin/
Статистика Munin обновляется примерно каждые 5–10 минут.
решение1
может ли быть так, что mysql использует временные таблицы? можете ли вы добавить несколько диаграмм munin к io stat..? цифры io в предоставленном журнале кажутся невероятно низкими.
каков ваш рабочий набор - данные удобно размещаются в памяти [кажется, да]? делаете ли вы время от времени много записей в SQL [судя по журналу - вообще никаких]?
возможно ли, что у вас внезапно резко возросло количество одновременных запросов [sql или к вашему пользовательскому серверу]? что говорит cat /proc/net/ip_conntrack|wc -l? что он показывает во время пиков нагрузки?
можешь включить mysqlмедленное ведение журнала запросов- например, все > 1 или 2 сек?
подключены ли ваши диски напрямую к серверу или, может быть, это iscsi / nfs? можете ли вы проверить состояние дисков [smart] / состояние raid? может быть, один из дисков выходит из строя... или, может быть, вы можете запустить простой тест производительности диска io в непиковое время, чтобы убедиться, что вы получаете достойную скорость чтения/записи.
или может быть что-то некрасивое отображается в dmesg?
правка: проверьте, коррелирует ли netstat |wc -l с нагрузкой
проверьте, коррелирует ли ps axms|wc -l с нагрузкой
проверьте, коррелирует ли lsof |wc -l с нагрузкой
[ желательно взломать небольшие плагины munin, чтобы они попали в чарты ].
решение2
Вам нужно больше метрик. Я использую ganglia для сбора различных значений, классических: процессор, память, сеть, дисковый ввод-вывод и т. д.; метрик на основе сервисов: http-запросы, запросы MySQL и медленные запросы и т. д.; и метрик на основе приложений, например, сколько пользователей подключено к игре или сколько раз приложение вызывает критическую функцию.
Анализ этой информации и сравнение с пиками нагрузки могут дать вам лучшее представление о том, что происходит в вашей системе.