Mi pregunta se reduce a, ¿deberían múltiples procesos de magento cron: ejecutar -vvv siempre se ejecutan y golpean MySql constantemente.
Estoy configurando Magento 2.2.1 a través de Google Cloud y tengo los 3 trabajos cron estándar que se preconfiguraron a través de la instalación de Magento en 1 clic de 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
Mirando la parte superior -c, siempre hay 2 procesos php.bin en ejecución, que afectan constantemente a MySql y hacen que use alrededor del 50% - 70% de CPU todo el tiempo. Aquí hay una instantánea de cómo se ve normalmente.
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
También he cambiado los crons para que se ejecuten cada 5 minutos, en lugar del predeterminado cada minuto, pero el comportamiento sigue siendo el mismo.
Mi último cambio fue alternar cada 7 minutos y 8 minutos con los 2 cron: ejecutar trabajos que comienzan con 3 y 4 minutos de diferencia, y con eso solo se ejecuta 1 trabajo cron a la vez con 30% - 40% de CPU de MySQL.
Mi sitio tampoco tiene tráfico en este momento porque aún no lo he lanzado. ¿Es normal este comportamiento de Magento ya que no está pasando nada con el sitio? Lo dejé reposar durante 12 horas sin hacer nada en absoluto y cuando miro desde arriba, el cron todavía se está ejecutando y golpeando MySQL.
ACTUALIZACIÓN: Ahora está claro que el problema es solo el primer cron: ejecutar el proceso que está causando problemas. Cambié los elementos segundo y tercero a cada minuto y dejé el primero a los 8 minutos y solo hay un cron en ejecución: proceso de ejecución a la vez. Según el comentario a continuación, podría ser un problema con las instalaciones de Bitnami Magento, pero esta es mi primera experiencia con Magento, así que no sé si se trata de un comportamiento esperado (realmente espero que no lo sea).
fuente
htop
. Con ella veo que tengo más de diez líneas conmagento cron:run -vvv
. Algunos han estado en vivo por varios minutos. Intentaré averiguar por qué el cron no se está ejecutando como se esperaba.Respuestas:
Proporcionando al menos un trabajo temporal para solucionar el problema, para evitar dañar su servidor MySQL. Problema de Git que describe el problema
Al menos parte del problema se reduce a la tabla cron_schedule. Recomiendo hacer un
select count(*) from cron_schedule;
y si eso devuelve más de unos pocos cientos, entonces tienes el problema. Para mí, esa consulta devolvió 208,046 en un servidor que ha estado ejecutándose durante solo unas pocas semanas.Si tiene el problema, ejecute esta consulta para eliminar todo en esa tabla, excepto las filas recientes
delete from cron_schedule where scheduled_at < date_sub(now(), interval 1 hour);
Luego ejecute la consulta de recuento nuevamente y debería ser muuuucho más baja. La mía pasó de 208k a 252.
Después de ejecutar esa consulta, configuré los 3 cron estándar nuevamente al estándar una vez por minuto, y como por arte de magia, los 3 se ejecutan casi al instante. De vuelta a la normalidad por lo que puedo decir.
En el problema de github, otro usuario sugiere agregar esa consulta a crontab para evitar que la tabla vuelva a crecer.
La última respuesta del equipo de Magento sobre el problema fue en septiembre diciendo que no pueden reproducir el problema, pero varios usuarios han seguido diciendo que experimentan lo mismo, incluido yo mismo. Así que espero que arreglen esto para que este truco pueda ser eliminado.
EDITAR: Para usar ese comando en el crontab, deberá pasar sus credenciales a MySQL de alguna manera. Vea mi comentario a continuación si está en una máquina virtual o servidor dedicado y desea poner su usuario / pase en crontab, de lo contrario, deberá configurar un archivo de credenciales MySQL. Y puede utilizar
which mysql
para encontrar la ruta a su directorio binario mysql.fuente
mysql magento-db -e "query"
, donde magento-db es el nombre de la base de datos (en mi caso, es bitnami_magento), ¿también funciona cuando hay una contraseña para la base de datos? Normalmente ingreso la base de datos comomysql -u somename -p
y luego ingreso la contraseña en un mensaje.*/15 * * * * <path_to_mysql_binary_dir>/mysql -u<sql_user> -p'<sql_user_pass>' <database_name> -e "delete from cron_schedule where scheduled_at < date_sub(now(), interval 1 hour)";