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

Столкнулся сегодня с обозначенной проблемой. Собственно, раздумывать было особо не о чем.

Понятно, что есть какой-то код, запускающий агентов, и оставалось найти этот код. Выяснилось, что код находится в методе CAgent::ExecuteAgents() в файле /bitrix/modules/main/classes/mysql/agent.php. Разумеется, этот файл относится к файлам ядра и редактировать его можно только если вы понимаете что делаете.

Решение задачи простое: меняем

try
{
	$eval_result = "";
	$e = eval("\$eval_result=".$arAgent["NAME"]);
}
на
try
{
	L('Run: '.$arAgent["NAME"]);
	$Time = microtime(true);
	$eval_result = "";
	$e = eval("\$eval_result=".$arAgent["NAME"]);
	L('End: '.$arAgent["NAME"]);
	L('Time: '.number_format(microtime(true)-$Time,6,'.',''));
	L('From:'.$_SERVER['PHP_SELF'].(!empty($_SERVER['REQUEST_URI'])?' ('.$_SERVER['REQUEST_URI'].')':''));
	L('========================================');
}
Осталось определить функцию логирования для удобной записи в собственный лог, у меня это стандартная функция, применяемая почти на каждом проекте (скопируйте ее в файл /bitrix/php_interface/init.php):
function L($Message){
	if (is_array($Message)) {
		$Message = print_r($Message,1);
	}
	$file_path = $_SERVER['DOCUMENT_ROOT'].'/!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);
}
Все. Теперь при выполнении агентов ваш лог постепенно будет заполняться такими записями:
[17.08.2017 18:37:15] Run: \Bitrix\Main\Analytics\CounterDataTable::submitData();
[17.08.2017 18:37:15] End: \Bitrix\Main\Analytics\CounterDataTable::submitData();
[17.08.2017 18:37:15] Time: 0.041166
[17.08.2017 18:37:15] From:/home/bitrix/www/bitrix/modules/main/tools/cron_events.php
[17.08.2017 18:37:15] ========================================
[17.08.2017 18:39:01] Run: \Bitrix\Sender\MailingManager::checkPeriod();
[17.08.2017 18:39:01] End: \Bitrix\Sender\MailingManager::checkPeriod();
[17.08.2017 18:39:01] Time: 0.014608
[17.08.2017 18:39:01] From:/home/bitrix/www/bitrix/modules/main/tools/cron_events.php
[17.08.2017 18:39:01] ========================================
[17.08.2017 18:39:01] Run: \Bitrix\Main\Analytics\CounterDataTable::submitData();
[17.08.2017 18:39:01] End: \Bitrix\Main\Analytics\CounterDataTable::submitData();
[17.08.2017 18:39:01] Time: 0.006374
[17.08.2017 18:39:01] From:/home/bitrix/www/bitrix/modules/main/tools/cron_events.php
[17.08.2017 18:39:01] ========================================
[17.08.2017 18:40:03] Run: CCaptchaAgent::DeleteOldCaptcha(3600);
[17.08.2017 18:40:03] End: CCaptchaAgent::DeleteOldCaptcha(3600);
[17.08.2017 18:40:03] Time: 0.004447
[17.08.2017 18:40:03] From:/home/bitrix/www/bitrix/modules/main/tools/cron_events.php

Анализируя этот лог, легко понять какие агенты выполняются непозволительно долго.

Все просто. Не забудьте после завершения работы отменить все сделанные изменения. Иначе лог продолжит бесконечно писать ненужные данные, а монитор качества будет ругаться на модифицированные файлы ядра.









Автор: Денис Сон
Дата публикации: 17.08.2017
Просмотров: 179


Статья Вам помогла? Вы можете поблагодарить нас!


Комментариев пока нет.






По всем вопросам обращайтесь по нашим контактным данным:

Отзывы Все отзывы Написать отзыв

27.09.2017
Хочу сказать огромнейшее спасибо Денису. Мало того, что откликнулся минут за 10, так еще помог разобраться в проблеме с выводом текста в категориях буквально за пару писем :) А я два дня мучался в поисках решения...
Ребят, вы молодцы, доброе дело делаете :)
06.09.2017
Безмерно благодарна Денису!
Он смог выручить меня в трудную минуту.
Я являюсь котент-менеджером сайта, и по неосторожности что-то нажала, что публичная часть сайта исчезла. Денис отозвался на помощь, оперативно решил проблему и даже не взял за это денег!
После этого убедилась в высоком профессионализме Дениса.
Планируем заключить договор на обслуживание сайта и  надеюсь на дальнейшее долгосрочное сотрудничество!

04.04.2017
Денис - специалист своего дела!. Нет задачи, которую он бы не мог выполнить. Работаю с ним уже давно. Требовалось исправить и мелкие ошибки на сайте, и создать скрипты, реализовать на сайте некоторые пожелания, а также перенести сайт на новый шаблон. Ни разу меня не подводил. Работу делает быстро и качественно. Всегда на связи, всегда готов помочь. Огромное Вам спасибо!
27.02.2017
Денис безумно сильно нам помог. Обратился к нему так как очень давно он нам помог советом. Все началось с того что отказала вкладка маркетплейс , невозможно было обновить битрикс и установить нужные решения. Мы потратили неделю с другими программистами и толку ноль. Я написал Денису, он согласился помочь. Через 10 минут отписал что все готово проверьте.
Реально был в шоке. Вы помогли сохранить нервы и время . Если кто подумает что отзыв фэик то вот сайт akn-real.ru и телефоны на нем указаны можете позвонить я подтвержу без проблем.
27.12.2016
Сергей
Наверх