我有一個 Django 應用程式設置,透過 Nginx 提供靜態文件,並透過 Gunicorn 運行上游,以使用駐留在專用伺服器上的 PSQL 資料庫運行 Django 應用程式。
問題在於,即使對於不需要存取資料庫的主頁,該網站的回應時間也太長。
需要注意的一個重要細節是,當我重新啟動 Supervisor 服務(它負責兩個進程,一個是 Gunicorn,另一個是 celery)時,我最多可以獲得 3 個請求的快速回應。
在這 3 個請求之後,應用程式再次變得無回應。
至於配置,Nginx 配置的逾時(所有 3 個:連接、讀取和發送)設定為 300
。
該應用程式運行在具有單一 CPU 和 1GB 記憶體的 VPS 上。
下面是輸出iostat用於基本統計資料。
avg-cpu: %user %nice %system %iowait %steal %idle
1.49 0.00 0.44 0.03 3.21 94.83
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 0.74 3.23 12.79 1023355 4054257'
什麼可能導致這種行為?
答案1
正如 Tero Kilkanen 在評論中提到的,事實證明問題出在程式碼本身。
我用請求來敲擊伺服器,以實現某種即時應用程式的外觀,這反過來又使整個伺服器無法服務其他請求。
查看伺服器統計資料無助於闡明問題,因為所有指標都顯示伺服器可以運作。
因此,如果您遇到這樣的問題,請查看您的 Nginx 日誌是否有短時間間隔內的多個請求。