修復Magento Cloud上的502錯誤
502 Bad Gateway錯誤可能是個異常發生的錯誤,在特定的整合(開發)環境中。若在檢查Magento Cloud配置與網路速度後,工程團隊仍無法判斷造成該錯誤的根本原因,此錯誤會很難被分析。
此篇文章主要為簡述可能造成502錯誤的根本原因與將該錯誤降低的建議方式。
大多時間,在某些特定Magento Cloud整合/開發環境,502錯誤是由以下原因造成的。
- 數據過度加載。
- 同時運行太多cron作業。
數據過度加載
Integration等環境比Production與Staging,更應該運用在開發或測試上,因此可能必須修整數據庫(主要為刪除產品),使開發/測試擁有專屬的代表性的範例。
同時運行太多cron作業
在未完整優化成生產環境時,Cron作業可能會降低內存性能。所以最好的辦法是將它們分組運作,來避免遺漏或待處理的作業。
為了更清楚了解目前cron作業的狀態,需要提前檢查數據庫,例如:
MariaDB [main]> select status, count(*) from cron_schedule group by status;
+———+———-+
| status | count(*) |
+———+———-+
| error | 535 |
| missed | 5392 |
| pending | 574 |
| running | 1 |
| success | 852 |
+———+———-+
MariaDB [main]> select job_code, status, count(*) from cron_schedule where date(created_at) = CURDATE() and status = ‘missed’ group by job_code, status;
+———————————————–+——–+———-+
| job_code | status | count(*) |
+———————————————–+——–+———-+
| catalog_event_status_checker | missed | 107 |
| catalog_product_frontend_actions_flush | missed | 6 |
| catalog_product_outdated_price_values_cleanup | missed | 5 |
| consumers_runner | missed | 75 |
…
| indexer_reindex_all_invalid | missed | 130 |
| indexer_update_all_views | missed | 138 |
+———————————————–+——–+———-+
從這些例子中可看到,許多cron作業沒有被執行,所以可透過在.magento.app.yaml 更新來完成劃分cron作業且分組運行。這是為了避免一連串的執行且能進一步降低內存的消耗。劃分範例如以下:
首先確定目前可被使用在系統中的組別:
[email protected]:~$ find . -name cron_groups.xml
./vendor/amasty/base/etc/cron_groups.xml
…
./vendor/magento/module-message-queue/etc/cron_groups.xml
./vendor/magento/module-staging/etc/cron_groups.xml
./vendor/mailchimp/mc-magento2/etc/cron_groups.xml
根據以上的輸出,cron作業可輕鬆地被劃分成幾組:
# Default Magento 2 cron jobs
default:
spec: “*/10 * * * *"
cmd: “php bin/magento cron:run –group=default"
…
consumers:
spec: “*/19 * * * *"
cmd: “php bin/magento cron:run –group=consumers"
staging:
spec: “*/21 * * * *"
cmd: “php bin/magento cron:run –group=staging"
以上建議只針對一些特定的整合/開發環境。作業分組如何劃分取決於每個腳本及環境。
在這特定的範例中,在將cron作業分組、推上更改及清除cron作業表後,這些改變將反映在資料庫中。
MariaDB [main]> select status, count(*) from cron_schedule group by status;
前 | 後 |
+---------+----------+ | status | count(*) | +---------+----------+ | error | 535 | | missed | 5392 | | pending | 574 | | running | 1 | | success | 852 | +---------+----------+ | +---------+----------+ | status | count(*) | +---------+----------+ | error | 0 | | missed | 0 | | pending | 0 | | running | 12 | | success | 24 | +---------+----------+ |
備註:資料庫資訊是經過時間累積的。
最後,值得一提的是該配置是在文件app/etc/env.php中定義的,且每個環境都可擁有自身的env.php及自己的配置。
本篇的文章分享就到這裡啦!知道如何在Adobe Magento Cloud上修復502錯誤了嗎~喜歡歐斯瑞文章的讀者們,趕緊追蹤我們的FB粉絲團及IG,也記得訂閱電子報,就不會錯過第一手新知分享囉!有任何問題也歡迎聯繫我們。
我要留言