Pertanyaan saya turun ke, haruskah beberapa magento cron: menjalankan proses -vvv selalu berjalan dan memukul MySql terus-menerus.
Saya sedang menyiapkan Magento 2.2.1 melalui Google Cloud dan saya memiliki 3 pekerjaan cron standar yang telah dipra-setup melalui pemasangan Magento 1 kali klik 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
Melihat -c atas selalu ada 2 proses php.bin berjalan, yang memukul MySql terus-menerus dan menyebabkannya menggunakan sekitar 50% - 70% CPU sepanjang waktu. Ini adalah snapshot dari apa yang biasanya terlihat.
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
Saya juga mengubah crons untuk berjalan setiap 5 menit, bukannya default setiap menit tetapi perilaku tetap sama.
Perubahan terbaru saya berganti setiap 7 menit dan 8 menit dengan 2 cron: jalankan pekerjaan mulai terpisah 3 dan 4 menit, dan dengan itu hanya 1 pekerjaan cron yang berjalan pada satu waktu dengan 30% - 40% CPU dari MySQL.
Situs saya juga tidak memiliki traffic saat ini karena saya belum meluncurkannya. Apakah perilaku ini normal dari Magento karena tidak ada yang terjadi dengan situs ini? Saya membiarkannya selama 12 jam tanpa melakukan apa-apa dan ketika saya melihat di atas cron masih berjalan dan memalu MySQL.
UPDATE: Sekarang jelas masalahnya hanya cron pertama: jalankan proses yang menyebabkan masalah. Saya mengubah item ke-2 dan ke-3 kembali ke setiap menit dan meninggalkan yang pertama pada 8 menit dan hanya ada satu cron yang berjalan: jalankan proses pada suatu waktu. Dari komentar di bawah ini bisa menjadi masalah dengan instalasi Bitnami Magento, tapi ini adalah pengalaman pertama saya dengan Magento jadi saya tidak tahu apakah ini perilaku yang diharapkan (saya benar-benar berharap tidak).
sumber
htop
. Dengan itu saya melihat bahwa saya punya lebih dari sepuluh jalur denganmagento cron:run -vvv
. Beberapa telah diputar selama beberapa menit. Saya akan mencoba mencari tahu mengapa cron tidak berjalan seperti yang diharapkan.Jawaban:
Memberikan setidaknya penyelesaian sementara untuk masalah ini, untuk menghindari memalu server MySQL Anda. Masalah Git yang menjelaskan masalah tersebut
Setidaknya sebagian dari masalah sampai ke tabel cron_schedule. Saya akan merekomendasikan melakukan
select count(*) from cron_schedule;
dan jika itu mengembalikan lebih dari beberapa ratus, maka Anda memiliki masalah. Bagi saya, permintaan itu mengembalikan 208.046 pada server yang telah berjalan hanya beberapa minggu.Jika Anda memiliki masalah, jalankan kueri ini untuk menghapus semua yang ada di tabel itu, kecuali baris terbaru
delete from cron_schedule where scheduled_at < date_sub(now(), interval 1 hour);
Kemudian jalankan kueri hitung lagi dan harus lebih rendah lagi. Milik saya berubah dari 208k menjadi 252.
Setelah menjalankan kueri itu, saya mengatur semua 3 crons standar kembali ke standar sekali per menit, dan seperti sulap mereka semua 3 berjalan hampir secara instan. Kembali normal sejauh yang saya tahu.
Dalam masalah github, pengguna lain menyarankan menambahkan kueri itu ke crontab untuk mencegah tabel tumbuh lagi.
Tanggapan terakhir dari tim Magento tentang masalah ini adalah pada bulan September mengatakan bahwa mereka tidak dapat mereproduksi masalah, tetapi sejumlah pengguna telah menindaklanjuti dengan mengatakan mereka mengalami hal yang sama, termasuk saya. Jadi semoga mereka memperbaikinya sehingga peretasan ini bisa dihapus.
EDIT: Untuk menggunakan perintah itu pada crontab Anda harus memberikan kredensial Anda ke MySQL dengan beberapa cara. Lihat komentar saya di bawah ini jika Anda menggunakan VM atau server khusus dan ingin menempatkan pengguna / umpan Anda pada crontab, jika tidak, Anda harus menyiapkan file kredensial MySQL. Dan Anda dapat menggunakan
which mysql
untuk menemukan path ke direktori biner mysql Anda.sumber
mysql magento-db -e "query"
, di mana magento-db adalah nama basis data (dalam kasus saya, ini adalah bitnami_magento), apakah itu juga berfungsi ketika ada kata sandi untuk basis data? Saya biasanya memasukkan database sepertimysql -u somename -p
dan kemudian memasukkan kata sandi di prompt.*/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)";