Apache-2.2
帶有 nginx 前端的 Apache 與 Django 應用程序掛鉤 100% CPU
我最近推出了一個網路應用程序,它不斷地固定在 100% 的 CPU 上。我的伺服器是一個 512 MB 的 Linode,nginx 位於為 Django 應用程序提供服務的 Apache(MPM Worker)前面。這個應用程序的不尋常之處在於它必須在不到 5% 的時間(約 2-5k 查詢/請求)中進行繁重的數據庫處理。我目前只有少量使用者(一天 50 個,在任何給定時間約 5-10 個)。現在我知道做幾千個查詢是多餘的,我正在考慮優化它,但我不明白為什麼 Apache 程序會達到 100% 並保持在那裡,即使目前沒有人訪問重載頁面。
這是我的 Apache 配置的一部分:
<IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule>
這是我從“頂部”開始的前幾行:
10257 www-data 20 0 370m 143m 4052 S 100 29.0 16:19.47 apache2 1 root 20 0 2728 224 24 S 0 0.0 0:01.34 init 2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
任何幫助將非常感激!
事實證明這不是伺服器問題。有一個特定的程式碼路徑非常佔用 CPU(在最壞的情況下是 O(n^2) 操作)。我通過與遇到問題的特定 beta 使用者聯繫並將他們的數據複製到我的登台伺服器並對其進行測試來追踪問題。我能夠複製它並從那裡修復它。
我仍然想知道為什麼當使用者停止連接時 Apache 請求會繼續處理請求。