Как узнать нагрузку сайта на сервер?

12
V2
На сайте с 05.01.2012
Offline
101
6924

Стоит apache+php+mysql под windows и на нем крутится порядка 40 сайтов.

С некоторого времени загрузка процессора висит под 100%.

Какой из сайтов грузит сервер - не знаю. Смотрел по логам апача, длинные

запросы к БД, вобщем так и не пойму кто именно грузит.

По этому вопрос - каким образом можно узнать сколько процессорного

времени израсходовал каждый сайт за определенное время?

Если бы была программа, которая отслеживает все это дело и выводит в

графиках, было бы вообще супер.

[umka]
На сайте с 25.05.2008
Offline
456
#1

А каким образом вы определите, какой сайт какую базу данных использует?

Никак :)

Только если разнесёте все сайты и БД по разным пользователям.

То есть, чтобы одному пользователю принадлежал только один сайт и только та (или те) БД, которые использует только этот сайт.

В этом случае можно учитывать раздельно процессорное время, потребляемое скриптами, и потребляемое БД, и суммировать, получая "нагрузку" одного пользователя (т.е. сайта).

Процессорное время, используемое пользователями БД, должен учитывать сам сервер БД, например, можно взять перкону, если речь о MySQL.

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

Это всё реализуемо, но готовые доступные решения мне не известны.

Лог в помощь!
Himiko
На сайте с 28.08.2008
Offline
560
#2

Общего решения на все случаи жизни нет.

Можно разделить по пользователям, как сказал [umka]. Но и тут, если у вас php выполняется не как модуль apache под общим юзером.

По mysql тоже вариант с percona хорош.

Но всё это отдельно не имеет смысла. Вопрос достаточно глубокий, как считать нагрузку. Решения есть, но все не идеальны. У хостеров даже бывают сапописные скрипты, которые собирают статистику в нужном им формате.

Проще включить /server-status у apache и смотреть в момент нагрузки, к каким сайтам обращаются. Можно так же смотреть это по логам.

По mysql можно добавить префикс к базам, как у хостеров... в духе user_DB

Будет понятно, какому пользователю относится база при просмотре тяжёлых запросов. Ну а дальше в ручную найти в конфигурационных файлах сайта, который её использует.

Это всё гораздо проще, чем углубляться в точный подсчёт статистики, ведь он потребует смену программного обеспечения на сервере и тонкой настройки.

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.
V2
На сайте с 05.01.2012
Offline
101
#3
[umka:
А каким образом вы определите, какой сайт какую базу данных использует?
Никак
Только если разнесёте все сайты и БД по разным пользователям.
То есть, чтобы одному пользователю принадлежал только один сайт и только та (или те) БД, которые использует только этот сайт.

По БД так и сделано, каждый сайт имеет свою базу и своего пользователя для этой базы.

Или каких пользователей вы имеете ввиду, пользователей виндовс? Тут я не очень понял.

Himiko:
Проще включить /server-status у apache и смотреть в момент нагрузки, к каким сайтам обращаются. Можно так же смотреть это по логам.
По mysql можно добавить префикс к базам, как у хостеров... в духе user_DB
Будет понятно, какому пользователю относится база при просмотре тяжёлых запросов.

До этого времени я так и смотрел по server-status, по логам и через долгие запросы.

Но не вижу я сейчас явной нагрузки от какого-то одного сайта, хотелось бы статистику собрать и вычислить кто из них сколько чего потребляет.

Сейчас вот смотрю munin под windows, может удастся установить.

globalmoney
На сайте с 09.12.2005
Offline
367
#4
Vitaly2012:
Или каких пользователей вы имеете ввиду, пользователей виндовс? Тут я не очень понял.

[umka] имел ввиду разнести сайты по разным учётным записям.

MGNHost.ru - полный комплекс хостинг услуг ( https://www.mgnhost.ru ) VPS/VDS на SSD дисках в России / Нидерландах / США от 210 рублей ( https://www.mgnhost.ru/vds.php )
redeyer
На сайте с 27.01.2010
Offline
102
#5

Только косвенно определять.

1.можно по запросам в логах, как уже сказали.

2. можно с помощью tcpdump следить на какие сайты больше запросов, в принципе то-же что и по логам.

3. можно через lsof, а лучше через strace отследить где больше обращений к файлам какого сайта.

4. Можно смотреть через mytop или через mysql -e 'show full processlist;' на какой базе больше активность.

Но всё это позволяет лишь относительные величины узнать - т.е какой из сайтов больше всех ресурсов например ест. Точные абсолютные значения выявить не получится, да и, как уже сказал Himiko, не имеет особого смысла.

Услуги сисадмина. Настройка и оптимизация VPS https://searchengines.guru/ru/forum/928318 . Поднятие своих прокси, восстановление сайтов из вебархива. Мой канал о хостингах https://t.me/hostingexpert
Himiko
На сайте с 28.08.2008
Offline
560
#6
Сейчас вот смотрю munin под windows, может удастся установить.

Это не даст ничего.

Как вам и сказали выше - стандартно система не разделяет нагрузку по сайтам, а только в пределах общей нагрузки.

С таким же успехом поставьте счётчики на сайты и посмотрите, где выше посещаемость. Munin больше информации не даст.

adel92
На сайте с 04.01.2012
Offline
334
#7

Здесь только разносить сайты по разным пользователям.

А вообще такие сайты держать на виндовом сервере, имхо извращение)

Поставьте CentOS - там все намного проще, и советов будет больше.

NVMe VDS (https://well-web.net/nvme-vps) с поддержкой 24/7 - от 545 руб.! Безлимитный хостинг (https://well-web.net/ssd-hosting) - от 129 руб.! Домен в подарок! Перенос бесплатно! Заказывайте сейчас, и получите скидку 50%! Заходи! (https://well-web.net/limited-offers)
DV
На сайте с 01.05.2010
Offline
644
#8
Himiko:
С таким же успехом поставьте счётчики на сайты и посмотрите, где выше посещаемость. Munin больше информации не даст.

Вывести server-status в munin? Будут графики, сразу на глаз видно, что потребляет.

А вот пример работы с логами сервера: http://elfstats.org/

---------- Добавлено 21.03.2017 в 15:30 ----------

Ещё:

https://github.com/munin-monitoring/contrib/tree/master/plugins/apache/apache_byprojects

https://github.com/munin-monitoring/contrib/tree/master/plugins/apache/apache_vhosts

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
V2
На сайте с 05.01.2012
Offline
101
#9
redeyer:

1.можно по запросам в логах, как уже сказали.
2. можно с помощью tcpdump следить на какие сайты больше запросов, в принципе то-же что и по логам.
3. можно через lsof, а лучше через strace отследить где больше обращений к файлам какого сайта.
4. Можно смотреть через mytop или через mysql -e 'show full processlist;' на какой базе больше активность.

В первом сообщении я и писал, что смотрю по логам, также через длинные запросы к БД, кроме того есть программа HeidiSQL через

которую я вижу загрузку каждой БД онлайн, тоже самое что mysql -e 'show full processlist; только удобнее, в реальном времени

видно какие запросы к каким базам висят, сколько времени выполняются и т.д.

Отслеживать к-во обращений к файлам не плохо, но меня больше интересует нагрузка на процессор которая создается в связи с этими

обращениями. Возможно какой-то один кривонаписанный php скрипт создаст большую нагрузку чем миллион обращений к файлу.

Опять-же все это видно когда постоянно самому сидеть онлайн мониторить, а меня интересует вариант когда вся информация будет сама

собираться и где-то отображаться.

Himiko:
Как вам и сказали выше - стандартно система не разделяет нагрузку по сайтам, а только в пределах общей нагрузки.
С таким же успехом поставьте счётчики на сайты и посмотрите, где выше посещаемость. Munin больше информации не даст.

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

Выводят-же хостеры нагрузку конкретного на сервер. Как можно это сделать?

[umka]
На сайте с 25.05.2008
Offline
456
#10
Vitaly2012:
Выводят-же хостеры нагрузку конкретного на сервер. Как можно это сделать?

Заходим на второй круг.

1. Проще всего это сделать, если вынести каждый сайт на отдельного системного пользователя, задействовать какой-нибудь модуль апача, который позволяет запускать скрипты от имени этого пользователя, и включить штатные средства аудита системы для учёта процессорного времени.

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

2. Если же вам нужно чтобы все сайты каждого пользователя работали под одним системным пользователем, или php работает как модуль апача, или есть ещё какие-то причины, то тут поможет только волшебная сила программирования:

- Нанимаете программиста или администратора с хорошими навыками системного программирования. Ставите ему задачу. Он всё делает. Это всё вполне реализуемо.

- Или сами постигаете тонкости системного программирования. Делаете всё сами.

Других вариантов нет.

Готовых решений нет.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий