Форум 1С-Битрикс

Задавайте свои вопросы и отвечайте на вопросы других участников форума


Как узнать какие агенты долго выполняются?

Сайт часто виснет или тормозит без особых причин. Думаю виновником являются агенты. Но как понять какой агент вызывает зависание сайта?
Как логировать запуск агентов? <h3>Ответ 2</h3>
<p>
Для диагностики зависаний необходимо отследить запуск агентов записав время их исполнения в лог<br>
Для этого нужно определить константу  BX_AGENTS_LOG_FUNCTION в init.php<br>
Константа должна содержать название функции, которая будет вызвана до начала исполнения агента и после его исполнения.<br>
Лог будет находиться в корне сайта /agent_log.txt<br>
Код<br>
<pre>
define('BX_AGENTS_LOG_FUNCTION', 'AgentsLog');
function AgentsLog($arAgent=false, $strOperation=false, $mEvalResult=false, $mEvalReturn=false){
   $strKey = __FUNCTION__.'_start_time';
   if($strOperation == 'start'){
      $GLOBALS[$strKey] = microtime(true);
      L(sprintf('Start: %s [%s], %s, %s', $arAgent['NAME'], strlen($arAgent['MODULE_ID'])?$arAgent['MODULE_ID']:'--nomodule--', $arAgent['AGENT_INTERVAL'], $arAgent['AGENT_INTERVAL']));
   }
   if($strOperation == 'finish' && isset($GLOBALS[$strKey])){
      L(sprintf('[%s] %s', number_format(microtime(true) - $GLOBALS[$strKey], 4, '.', ''), $arAgent['NAME']));
      unset($GLOBALS[$strKey]);
   }
}
function L($Message){
   if (is_array($Message)) {
      $Message = print_r($Message,1);
   }
   $file_path = $_SERVER['DOCUMENT_ROOT'].'/agent_log.txt';
   $handle = fopen($file_path, 'a+');
   @flock($handle, LOCK_EX);
   fwrite($handle, '['.date('d.m.Y H:i:s').'] '.$Message."\r\n");
   @flock($handle, LOCK_UN);
   fclose($handle);
}
</pre>
</p>

Возврат к списку