Как узнать какие агенты долго выполняются?
Сайт часто виснет или тормозит без особых причин. Думаю виновником являются агенты. Но как понять какой агент вызывает зависание сайта?
Как логировать запуск агентов? <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>