Как измерить нагрузку на веб-сервер (LAMP), создаваемую каждым отдельным сайтом?
Здравствуйте. Есть более или менее стандартный LAMP-сервер на Ubuntu Server, на котором крутится десяток сайтов.
Каждый сайт живёт как отдельный виртуальный хост Apache2 с модулем php5, Apache работает от одного юзера www-data. MySQL-база у каждого сайта отдельная и доступ к ней сделан через отдельного MySQL-юзера.
Вопрос к знатокам: каким образом померить моментальную (или за небольшой период) нагрузку, создаваемую каждым сайтом (понять сколько памяти, процессора, а может быть даже и диска он съедает)?
Мне нужно знать пиковую загрузку, для этого есть профилировщики, да и сайты можно испытывать по одному. Надо именно текущую нагрузку на одном сервере получать по разным сайтам.
Это задача наверняка имеет решение, ведь как-то с этим справляются, например, провайдеры виртуального хостинга. Хотя у них, подозреваю, сайты разнесены по отдельным пользователям.
Варианты:
1. apachetop
2. Поставить nginx на фронтенд, заставить писать в логи $upstream_response_time и небольшим скриптом парсить хвост лога.
3. Статья.
4. Банальный путь: поставить mpm-itk, разделить сайты, дав каждому своего системного юзера. Созерцать top.
5. Для mysql: mytop.
Отключить остальные =) В идеале отключить все сайты и посмотреть, сколько ресурсов съедается на холостых, а потом включить нужный сайт. На все про все уйдет минут 10 (возможно дольше, если хотите более точные результаты). Еще можно задействовать loadimpact.com/
Боюсь, munin на моём сервере для того же apache будет собирать только общую статистику, не показывая сколько отъедает каждый сайт ресурсов. Ведь даже прописывая в /etc/munin/munin.conf разные домены, я всё равно статистику собираю с одного и того же munin-node.
Да не за что. Удачного применения.
Вообще, если хочется поэксперементировать, то я уверен, что в больших системах мониторинга — Nagios и т.д. это все есть прямо из коробки.
mpm-itk + acct (встроенный аккаунтинг) учтёт нагрузку от вебсервера и интерпретатора (если это mod_*), но не учтёт нагрузку от БД, которая во всех случаях крутится от имени mysql.
Если вам нужно найти виновного, то этот вариант — идеально подходит.
никак в том виде что вы написали
по статистике нужно выяснить теоретически кто может грузить сервер и их перенести на VPS (как вариант что бы отделить нагрузку) и далее мерять нагрузку от отдельного сайта
У меня проблема не в том, чтобы выявить и наказать виновного: я не виртуальным хостингом занимаюсь. Хочется просто видеть как сервер в себя чувствует в целом и кто из сайтов вносит самый тяжелый вклад в затруднённое дыхание именно сейчас. Профилировать каждый сайт в отдельности и в изолированной среде я могу, хочется иметь срез на общем боевом сервере под текущей нагрузкой.
когда я работал в суппорте провайдера, то у нас разные виртуальные хосты работали от разных пользователей. И тогда нагрузку можно считать по пользователям