Meine Frage lautet: Sollten mehrere Magento-Cron: run -vvv- Prozesse immer ausgeführt werden und MySql ständig treffen.
Ich richte Magento 2.2.1 über Google Cloud ein und habe die 3 Standard-Cron-Jobs, die durch die 1-Klick-Installation von Magento bei Google vorinstalliert wurden.
*/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
Wenn man sich top -c ansieht, laufen immer 2 php.bin-Prozesse, die MySql ständig treffen und dazu führen, dass es ständig etwa 50% - 70% CPU verbraucht. Hier ist eine Momentaufnahme davon, wie es normalerweise aussieht.
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
Ich habe auch die Cron so geändert, dass sie alle 5 Minuten ausgeführt werden, anstatt die Standardeinstellung jede Minute, aber das Verhalten bleibt gleich.
Meine letzte Änderung war das Wechseln aller 7 Minuten und 8 Minuten mit dem 2-Cron-Job: Führen Sie Jobs im Abstand von 3 und 4 Minuten aus, und damit wird jeweils nur 1 Cron-Job mit 30% - 40% CPU von MySQL ausgeführt.
Meine Website hat derzeit auch keinen Datenverkehr, da ich sie noch nicht gestartet habe. Ist dieses Verhalten bei Magento normal, da auf der Website nichts los ist? Ich lasse es 12 Stunden lang sitzen, ohne etwas zu tun, und wenn ich nach oben schaue, läuft der Cron immer noch und hämmert MySQL.
UPDATE: Es ist jetzt klar, dass das Problem nur der erste cron: run-Prozess ist, der Probleme verursacht. Ich habe das 2. und 3. Element auf jede Minute zurückgesetzt und das erste bei 8 Minuten belassen, und es gibt jeweils nur einen laufenden Cron: Run-Prozess. Aus dem Kommentar unten geht hervor, dass es sich um ein Problem mit Bitnami Magento-Installationen handeln könnte. Dies ist jedoch meine erste Erfahrung mit Magento. Daher weiß ich nicht, ob dies erwartet wird (ich hoffe wirklich, dass dies nicht der Fall ist).
quelle
htop
. Damit sehe ich, dass ich mehr als zehn Zeilen mit habemagento cron:run -vvv
. Einige sind seit einigen Minuten live. Ich werde versuchen herauszufinden, warum der Cron nicht wie erwartet läuft.Antworten:
Stellen Sie zumindest eine vorübergehende Lösung für das Problem bereit, um zu vermeiden, dass Ihr MySQL-Server beschädigt wird. Git-Problem, das das Problem beschreibt
Zumindest ein Teil des Problems ist auf die Tabelle cron_schedule zurückzuführen. Ich würde empfehlen, ein zu machen,
select count(*) from cron_schedule;
und wenn das mehr als ein paar hundert zurückgibt, dann haben Sie das Problem. Für mich ergab diese Abfrage 208.046 auf einem Server, der erst seit einigen Wochen ausgeführt wird.Wenn Sie das Problem haben, führen Sie diese Abfrage aus, um alles in dieser Tabelle mit Ausnahme der letzten Zeilen zu löschen
delete from cron_schedule where scheduled_at < date_sub(now(), interval 1 hour);
Führen Sie dann die Zählabfrage erneut aus und sie sollte niedriger sein. Meins ging von 208k auf 252.
Nachdem ich diese Abfrage ausgeführt habe, habe ich alle 3 Standard-Cron einmal pro Minute auf den Standard zurückgesetzt, und wie durch Zauberei werden alle 3 fast sofort ausgeführt. Soweit ich das beurteilen kann, wieder normal.
In der Github-Ausgabe schlägt ein anderer Benutzer vor, diese Abfrage zu crontab hinzuzufügen, um zu verhindern, dass die Tabelle erneut wächst.
Die letzte Antwort des Magento-Teams zu diesem Problem war im September, dass sie das Problem nicht reproduzieren können, aber eine Reihe von Benutzern haben darauf hingewiesen, dass sie dasselbe erleben, einschließlich mir. Hoffentlich beheben sie das, damit dieser Hack entfernt werden kann.
BEARBEITEN: Um diesen Befehl auf der Crontab zu verwenden, müssen Sie Ihre Anmeldeinformationen auf irgendeine Weise an MySQL übergeben. Siehe meinen Kommentar unten, wenn Sie sich auf einer dedizierten VM oder einem dedizierten Server befinden und Ihren Benutzer / Pass auf crontab übertragen möchten. Andernfalls müssen Sie eine MySQL-Anmeldeinformationsdatei einrichten. Und Sie können verwenden
which mysql
, um den Pfad zu Ihrem MySQL-Binärverzeichnis zu finden.quelle
mysql magento-db -e "query"
, wobei magento-db der Datenbankname ist (in meinem Fall bitnami_magento), funktioniert es auch, wenn ein Kennwort für die Datenbank vorhanden ist? Normalerweise gebe ich die Datenbank gerne einmysql -u somename -p
und gebe dann das Passwort in einer Eingabeaufforderung ein.*/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)";