Должны ли 2 стандартных cron всегда работать?


Мой вопрос сводится к тому, должны ли несколько процессов magento cron:run -vvv всегда выполняться и постоянно попадать в MySQL.

Я настраиваю Magento 2.2.1 через Google Cloud, и у меня есть 3 стандартных задания cron, которые были предварительно настроены через установку Magento в 1 клик от Google.

*/1 * * * * /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/bin/magento cron:run -vvv 2>&1

*/1 * * * * /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/update/cron.php 2>&1

*/1 * * * * /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/bin/magento setup:cron:run -vvv 2>&1

Глядя на top-c всегда запущено 2 процесса php.bin, которые постоянно воздействуют на MySQL и заставляют его использовать около 50-70% процессора все время. Вот снимок того, как это обычно выглядит.

 PID USER      PR  NI    VIRT    RES    SHR  S   %CPU   %MEM 
19327 mysql     20   0 3872884 332876  19172 S  60.8  3.4 332:42.45 /opt/bitnami/mysql/bin/mysqld.bin --defaults-file=/opt/bitnami/mysql/my.cnf --basedir=/opt/bitnami+
26458 bitnami   20   0  679516 476444  64492 S  24.6  4.9   0:24.85 /opt/bitnami/php/bin/php.bin /opt/bitnami/apps/magento/htdocs/bin/magento cron:run -vvv
26415 bitnami   20   0  677532 475672  64588 R  23.6  4.9   1:36.11 /opt/bitnami/php/bin/php.bin /opt/bitnami/apps/magento/htdocs/bin/magento cron:run -vvv

Я также изменил кроны, чтобы они запускались каждые 5 минут, а не по умолчанию каждую минуту, но поведение остается прежним.

Мое последнее изменение состояло в чередовании каждые 7 минут и 8 минут с 2 заданиями cron: запускайте задания с интервалом 3 и 4 минуты, и при этом одновременно выполняется только 1 задание cron с 30% - 40% ЦП от MySQL.

На моем сайте сейчас тоже нет трафика, потому что я его еще не запустил пока. Является ли такое поведение нормальным для Magento, так как с сайтом ничего не происходит? Я позволяю ему сидеть в течение 12 часов, вообще ничего не делая, и когда я смотрю сверху, cron все еще работает и забивает MySQL.

ОБНОВЛЕНИЕ: Теперь ясно, что проблема заключается только в первом cron: запустите процесс, который вызывает проблемы. Я изменил 2-й и 3-й пункты обратно на каждую минуту и оставил первый на 8 минут, и есть только один запущенный процесс cron: запуск за раз. Из комментария под ним может возникнуть проблема с установками Bitnami Magento, но это мой первый опыт работы с Magento, поэтому я не знаю, является ли это ожидаемым поведением (я действительно надеюсь, что это не так).

Author: codesmaller, 2017-11-11

1 answers

Обеспечение, по крайней мере, временного решения проблемы, чтобы избежать забивания вашего сервера MySQL. Проблема с Git, описывающая проблему

По крайней мере, часть проблемы сводится к таблице cron_schedule. Я бы рекомендовал сделать select count(*) from cron_schedule;, и если это вернет больше нескольких сотен, то у вас проблема. Для меня этот запрос вернул 208,046 на сервере, который работает всего несколько недель.

Если у вас возникла проблема, выполните этот запрос, чтобы удалить все в эта таблица, за исключением последних строк delete from cron_schedule where scheduled_at < date_sub(now(), interval 1 hour);

Затем снова запустите запрос count, и он должен быть waaaay ниже. Мой вырос с 208 тысяч до 252.

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

В выпуске github другой пользователь предлагает добавить этот запрос в crontab, чтобы предотвратить повторное увеличение таблицы.

0 * * * * <path_to_mysql_bin_dir>/mysql <magento_db_name> -e "delete from cron_schedule where scheduled_at < date_sub(now(), interval 1 hour)"

Последний ответ от Команда Magento по этой проблеме в сентябре заявила, что не может воспроизвести проблему, но ряд пользователей последовали за этим, заявив, что они испытывают то же самое, включая меня. Так что, надеюсь, они исправят это, чтобы этот взлом можно было удалить.

ИЗМЕНИТЬ: Чтобы использовать эту команду на вкладке crontab, вам нужно каким-то образом передать свои учетные данные в MySQL. Смотрите Мой комментарий ниже, если вы находитесь на выделенной виртуальной машине или сервере и хотите разместить своего пользователя/передать на crontab, в противном случае вам потребуется настроить учетные данные MySQL файл. И вы можете использовать which mysql, чтобы найти путь к вашему двоичному каталогу mysql.

 6
Author: codesmaller, 2020-06-15 08:30:17