Информация о загрузке процессора на PHP на примере IPB

Чтобы форум показывал данную информацию, нужно проделать несколько несложных операций.

Открываем файл ./admin/sources/base/core.php
Ищем:

        if( !$server_load_found )
        {
            # @ supressor stops warning in > 4.3.2 with open_basedir restrictions

И после вставляем:

            $data =  sys_getloadavg();
            $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 );
                        }
                    }
                }
            }

и замените этот код на следующий:

            /* 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 );
                        }
                    }
                }
            }

Затем заходите в админцентр, 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:

Информация о загрузке процессора на PHP на примере IPB

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

Функция 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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *