通過 php-fpm/nginx 使用圖像處理時減少系統負載
我們有一個基於 imagemagic 的用 Code Igniter 編寫的 PHP 圖像 api。我們有 nginx/php-fpm 後面的 api。我們知道 Imagemagic 部分很重,但我們試圖使整體吞吐量越來越高。
我們瀏覽了 30 多篇關於 Nginx 的優化文章。通過主要關注文章並進行 TCP 優化,我們能夠將輸出從 300 個請求/分鐘增加到 350 個請求/分鐘。
通過這種方式,我們嚴重影響了伺服器載入時間。我可以告訴你沒有平均負載,因為這是一個新盒子,它是基於 Nginx 的。我們過去有 Apache 工作人員(少於 300 個請求/分鐘)。現在有了 350req/m,我們的 AVG 負載為 20。這太過分了,我們正在尋求改進。
當我們使用 htop 調查程序時,通常我們會看到大約 20 個 php-fpm 程序大量使用所有 16 個 CPU,並且記憶體在 24GB 中的 2GB 左右。
我們的目標是大幅減少系統負載。我希望有經驗的使用者分享他們的知識,看看哪裡,嘗試什麼。我會發布您要求的任何數字,但我不想在一開始就用它來填寫文章。
您將如何繼續減少系統負載但仍保持吞吐量。
既然我們已經確定這是一個純粹的 CPU 佔用問題(沒有 iowait),那麼我真的看不出有任何方法可以在不增加更多資源的情況下保持相同的吞吐量。要麼調低 PHP 程序的最大數量,要麼添加更多 CPU 核心。
或者讓開發人員使用 ImageMagick 以外的其他東西。
如果您有重複的請求,您可以檢查 fastcgi 記憶體(http://wiki.nginx.org/HttpFastcgiModule)或在 nginx 前面使用 varnish。
這將使您能夠記憶體已處理的圖像,而不必再次執行繁重的 cpu 程序。