Информация о загрузке процессора на PHP на примере IPB
Практически на любом хостинге такие скрипты, как IPB не могут получить информацию о текущей загрузке процессора, поскольку хостеры отключают некоторые функции в php и ограничивают Вас своей домашней директорией (а если нет, то задумайтесь о смене хостинга). Из-за этого становится невозможным использование функции, отключающей форум например во время DDoS атаки.
Стандартная функция в IPB пытается получить информацию из файла /proc/loadavg, но поскольку у нас нет доступа к нему, то можно пойти другим путем и воспользоваться стандартной функцией в PHP, которая была добавлена в версии 5.1.3.
Чтобы форум показывал данную информацию, нужно проделать несколько несложных операций.
Открываем файл ./admin/sources/base/core.php
Ищем:
Затем ищем:
Теперь информацию и загрузке процессора форум будет получать при помощи функции sys_getloadavg
Если Вы хотите, чтобы на форуме всегда отображалась информация о текущей загрузке процессора не зависимо от того установлено ли ограничение в админцентре или нет тогда проделайте следующее:
Откройте файл ./admin/sources/base/ipsRegistry.php и найдите в нем:
Затем заходите в админцентр, Tools & Settings -> System Settings -> System -> CPU Saving & Optimization (Настройки, Системные настрйоки, Система, CPU и оптимизация) и добавьте новый пункт в настройках:
Setting title: Показывать загрузку ЦП?
Setting Position: 0
Setting Description: Показывать загрузку ЦП на форуме или нет
Setting Group: CPU Saving & Optimization
Setting Type: Yes/No Radio Buttons
Setting Key: show_load_limit
Setting Default Value: 1
Остальные поля оставляем пустыми.
Теперь на вашем форуме будет отображаться информация о загрузке CPU:

А при превышении допустимого значения, установленного в настройках форума пользователи увидят соответствующее сообщение.
Функция sys_getloadavg выводит среднюю информацию о загрузке процессора (количество процессов в очереди) за последние 1, 5 и 15 минут.
Вот пример для использования функции на других движках или скриптах:
Открываем файл ./admin/sources/base/core.php
Ищем:
if( !$server_load_found )
{
# @ supressor stops warning in > 4.3.2 with open_basedir restrictions
И после вставляем: {
# @ supressor stops warning in > 4.3.2 with open_basedir restrictions
$data = sys_getloadavg();
$load_limit = $data[0];
$load_limit = $data[0];
Затем ищем:
if ( @file_exists('/proc/loadavg') )
и заменяем на if (!$load_limit && @file_exists('/proc/loadavg') )
Теперь информацию и загрузке процессора форум будет получать при помощи функции sys_getloadavg
Если Вы хотите, чтобы на форуме всегда отображалась информация о текущей загрузке процессора не зависимо от того установлено ли ограничение в админцентре или нет тогда проделайте следующее:
Откройте файл ./admin/sources/base/ipsRegistry.php и найдите в нем:
/* Check server load */
if ( ipsRegistry::$settings['load_limit'] > 0 )
{
$server_load = IPSDebug::getServerLoad();
if ( $server_load )
{
$loadinfo = explode( "-", $server_load );
if ( count($loadinfo) )
{
self::$server_load = $loadinfo[0];
if ( self::$server_load > ipsRegistry::$settings['load_limit'] )
{
self::instance()->getClass('output')->showError( 'server_too_busy', 2001 );
}
}
}
}
и замените этот код на следующий:if ( ipsRegistry::$settings['load_limit'] > 0 )
{
$server_load = IPSDebug::getServerLoad();
if ( $server_load )
{
$loadinfo = explode( "-", $server_load );
if ( count($loadinfo) )
{
self::$server_load = $loadinfo[0];
if ( self::$server_load > ipsRegistry::$settings['load_limit'] )
{
self::instance()->getClass('output')->showError( 'server_too_busy', 2001 );
}
}
}
}
/* Check server load */
if ( ipsRegistry::$settings['show_load_limit'] > 0 || ipsRegistry::$settings['load_limit'] > 0 ) {
$server_load = IPSDebug::getServerLoad();
if ( $server_load )
{
$loadinfo = explode( "-", $server_load );
if ( count($loadinfo) )
{
if ( ipsRegistry::$settings['show_load_limit'] > 0 )
{
self::$server_load = $loadinfo[0];
}
if ( ipsRegistry::$settings['load_limit'] > 0 && self::$server_load > ipsRegistry::$settings['load_limit'] )
{
self::instance()->getClass('output')->showError( 'server_too_busy', 2001 );
}
}
}
}
if ( ipsRegistry::$settings['show_load_limit'] > 0 || ipsRegistry::$settings['load_limit'] > 0 ) {
$server_load = IPSDebug::getServerLoad();
if ( $server_load )
{
$loadinfo = explode( "-", $server_load );
if ( count($loadinfo) )
{
if ( ipsRegistry::$settings['show_load_limit'] > 0 )
{
self::$server_load = $loadinfo[0];
}
if ( ipsRegistry::$settings['load_limit'] > 0 && self::$server_load > ipsRegistry::$settings['load_limit'] )
{
self::instance()->getClass('output')->showError( 'server_too_busy', 2001 );
}
}
}
}
Затем заходите в админцентр, Tools & Settings -> System Settings -> System -> CPU Saving & Optimization (Настройки, Системные настрйоки, Система, CPU и оптимизация) и добавьте новый пункт в настройках:
Setting title: Показывать загрузку ЦП?
Setting Position: 0
Setting Description: Показывать загрузку ЦП на форуме или нет
Setting Group: CPU Saving & Optimization
Setting Type: Yes/No Radio Buttons
Setting Key: show_load_limit
Setting Default Value: 1
Остальные поля оставляем пустыми.
Теперь на вашем форуме будет отображаться информация о загрузке CPU:

А при превышении допустимого значения, установленного в настройках форума пользователи увидят соответствующее сообщение.
Функция sys_getloadavg выводит среднюю информацию о загрузке процессора (количество процессов в очереди) за последние 1, 5 и 15 минут.
Вот пример для использования функции на других движках или скриптах:
$data = sys_getloadavg();
echo $data[0]; // 0.04
echo $data[0].' '.$data[1].''.$data[2] // 0.04 0.15 0.22
echo $data[0]; // 0.04
echo $data[0].' '.$data[1].''.$data[2] // 0.04 0.15 0.22
Теги: Load average, sys_getloadavg, IPB, CPU





















