Узнать загруженность сервера

no_santa

Снегур
Узнать загруженность сервера

Программа для многоклиентской обработки данных. В программе есть потенциально ресурсоемкое место, которое изрядно загружает процессор и память. Пришла идея - организовать обработку по очереди, т.е. заставить клиентов ждать, пока обработается их часть. С реализацией проблем вроде не предвидится, за исключением вопросов:
1. Как из PHP узнать текущую загрузку процессора?
2. Как из PHP узнать размер свободной памяти?
3. Есть-ли более оптимальное решение вопроса?

P.S. Если имеет значение - ОС пока Gentoo, на релизе будет Debian Lenny
 

phprus

Moderator
Команда форума
По первым двум вопросам:
man 1 top
man 1 free
man 5 proc
 

no_santa

Снегур
Нашел sys_getloadavg() но остались вопросы...
1. Насколько это целесообразно? Есть-ли более оптимальное решение вопроса?
2. На ВДС эта функция вернет загрузку ВДС или сервера?
3. Актуально - про память.

-~{}~ 16.08.09 22:52:

Автор оригинала: phprus
По первым двум вопросам:
man 1 top
man 1 free
man 5 proc
в смысле, парсить выдачу system?

-~{}~ 16.08.09 23:18:

Кстати, так и не нашел - ЧТО именно возвращает sys_getloadavg()?

Даёт флоты, которые явно меняются в зависимости от загрузки, но - это в кроликах или в верблюдах?

Насчет ВДС отписал в поддержку хостера - пока молчат :)
 

phprus

Moderator
Команда форума
Кстати, так и не нашел - ЧТО именно возвращает sys_getloadavg()?
load average она возвращает и это написано английским по белому в мане. Что это такое написано по первой ссылке гугла:
http://www.google.com/search?q=load+average

в смысле, парсить выдачу system?
Если учение твое парсить файлы запрещает тебе, то выдачу system парсить придется... Линукс найди работающий и в священной консоли его команды сии введи. По прочтении манов сих снизойдет на тебя просветление!

2. На ВДС эта функция вернет загрузку ВДС или сервера?
Это должно возвращать загруженность VDS.
 

Alexandre

PHPПенсионер
В программе есть потенциально ресурсоемкое место, которое изрядно загружает процессор и память. Пришла идея - организовать обработку по очереди, т.е. заставить клиентов ждать, пока обработается их часть. С реализацией проблем вроде не предвидится, за исключением вопросов:
я уже из топика в топик советую:
- пиши тяжелую обработку в очередь
- кроном запускай скрипт, который читает n-сообщений из очереди и обрабатывает их
- в это время клиентам крути флешку "ваши данные обрабатываются... Ждите результата..."
- обрабатывающий скрипт пишет в спец файл (я его обозвал файл проекта, но это моя специфика) прогресс обработки...
- клирент аяксом видит прогресс, и либо ждет, либо смотрит другие страницы...
- по окончании обработки, клиент видит статус "данные обработаны" и все счастливы, особенно клиент...

никаких free & top и uptime я не использую!
эти команды нужны на этапе тюнинга, чтоб определить проблему, а не на этапе продакшена, когда уже "поздно пить Боржоми"

если сервак свой, то использую спец ПО, чтоб облегчить головную боль процессора. (сервер очередей: memcacheQ , nginx , ngx_memcached etc
вместо крона я использую fork()
) т.е. статус прогресса храню в памяти, а читаю напрямую из nginx минуя PHP.

кстати, что это за загадочное потенциально ресурсоемкое мест ?
 

no_santa

Снегур
Alexandre
Спасибо, именно так и делаю. Просто задачи в очереди различного размера, от 1 до 50 метров, поэтому и хочу управлять очередью по фактической загрузке.
"Потенциально ресурсоемкое место" - там обрабатывается действительно много данных, получается от 10 секунд до 30 минут на одну задачу "на локалхосте", по ходу на боевом сервере будет веселуха...

phprus
Спасибо, это я уже видел. Только так и не понял, в чем именно это измеряется, или хотя-бы как правильно сформулировать условие. Еще одно спасибо, если поможешь понять :)
 

Alexandre

PHPПенсионер
Просто задачи в очереди различного размера, от 1 до 50 метров, поэтому и хочу управлять очередью по фактической загрузке
в очереде должно быть только имя файла или его ай-ди
получается от 10 секунд до 30 минут на одну задачу "на локалхосте"
а на локалхосте установовлен денвер???
 

no_santa

Снегур
Автор оригинала: Alexandre
в очереде должно быть только имя файла или его ай-ди
Ну да, типа того. На самом деле там проекты из множества файлов и профили из БД с метаданными, которые влияют на сценарий.


Автор оригинала: Alexandre
а на локалхосте установовлен денвер???
На локалхосте (Debian) установлен Apache2 и компания. На другой отладочной машине - Gentoo. В релизе будет Debian.
 

Alexandre

PHPПенсионер
В релизе будет Debian.
а почему именно Debian?
FreeBSD более подходящая ОСЬ для хостинга

избавляйся от Апача... или делай проксирование через nginx
статику надо отдавать однозначно через nginx
 

point

Новичок
> Как раз превалирует "динамика", поэтому и Debian

Непонятный аргумент в пользу Debian
 

dimagolov

Новичок
скажем даже так, аргумент против, учитывая эфективность шедулера в FreeBSD 7.2
 

point

Новичок
Согласен. Новый SCHED_ULE во FreeBSD очень даже достойный. Как говорится, рекомендации лучших собаководов. Советую хотя бы в домашнем окружении попробовать. Авось понравится :)
 

Alexandre

PHPПенсионер
Непонятный аргумент в пользу Debian
есть очень понятный аргумент "ЗА": потому-что его хорошо знает наш админ!

-~{}~ 19.08.09 09:57:

избавляйся от Апача... или делай проксирование через nginx
статику надо отдавать однозначно через nginx
Как раз превалирует "динамика"
а разве у тебя нет огромной кучи картинок?
а раз динамика, тем более нужно использовать связку ngx - php-fpm
 
Сверху