Laravel Artisan Queues 佔用大量的 CPU

公司經手的專案中頻繁的使用了 Queue 來進行工作排程,當專案轉交給客戶測試之後,客戶提出了一個新的需求。希望能增加排程併行的數量,假設有 100 個工作要排入 Queues,希望能自動分派給 2 或 4 個序列同時運行,如此來縮短工作時間。 原本在測試環境中上述的架構運行都一切正常,但你也知道的,問題往往都在正式環境中爆發! 正式上線後,果不其然 Server 就爆了,查看原因後才發現,只要一透過 Supervisor 啟動 Laravel Artisan Queues,立馬 CPU 就往上飆升至 80 ~ 90 %,也難怪客戶都還沒做什麼其他動作,Server 就自己先掛掉陷入無回應的狀態。 有關 Laravel Artisan Queues、beanstalkd 及 supervisor 的使用,就不在這裡說明,雖然現在已經是 Laravel 5 了,但在 Laravel 4 的時候滿多人推薦可以參考這一篇《Production-Ready Beanstalkd with Laravel 4 Queues》 併行多條 Queues 序列 在 Laravel 的 config 中預設了 default 的序列,但將工作推到 Queues 時,其實是可以自行指定要推到哪一條序列,在前述的案例中,其實就是在工作排程時,自動分配至數個序列。 真正的 CPU 消耗者 將大量的工作排入 Queues 並不是消耗 CPU 的兇手,真正的元凶其實是 supervisor 配上不恰當的 Queue listen 或 Queue worker 指令。...

May 16, 2015 · Cheng Wei Chen