Ubuntu
診斷伺服器負載/緩慢
我有一台執行 Ubuntu Server 的機器今天遇到了嚴重的問題,沒有明顯的原因。它正在執行的兩個服務是apache2和ssh ,在伺服器執行**緩慢期間,我也無法訪問。
我一直在檢查登錄
/var/logs/
。這並沒有說明問題,但話又說回來,我不確定我在尋找什麼……如何診斷問題,以便採取措施防止將來再次發生?
完整的故事/細節:
- 今天在課堂上,我給大約 35 名電腦科學專業的學生做了一個練習(類似於考試)。他們應該訪問我之前安裝在伺服器中的兩個 Trac 實例。每個學生都有自己的登錄憑據。
- 該伺服器實際上是一個帶有 Ubuntu 11.10 的 VMWare 虛擬機,並且位於學生訪問它的同一網路中。
- 考試開始時,學生們在他們的網路瀏覽器中輸入了一個地址。其中三個實際上設法看到了 trac 的第一個網頁,但在那之後,伺服器變得完全沒有響應(瀏覽器一直等到超時)
- 我還嘗試通過 SSH 和 VMWare VSphere Client 訪問伺服器控制台,但在這兩種情況下,控制台也完全沒有響應。
- 我不確定還能嘗試什麼,所以我重置了虛擬機。它啟動了,但在那之後沒有任何改變:我上面提到的所有服務都沒有響應。
- 我又啟動了它——沒什麼新東西。
- 這時候我把大家送回家了,因為我們已經沒有足夠的時間參加考試了。當大約一半的人關閉筆記型電腦時,伺服器再次開始響應。我不認為這是巧合,但仍然無法解釋伺服器問題究竟是什麼以及如何防止它們。
更新
分配給此特定 VM 的硬體是:
- 1 個 CPU
- 512MB記憶體
- 60GB 硬碟空間(目前 80% 可用)
根據您的更新,如果您沒有進行開箱即用的調整(甚至可能無法調整),那麼 512MB 的 RAM 不足以容納 35 名同時進行的學生。如果您有能力這樣做,請將記憶體限制提高到 2GB。那應該提供一個安全的墊子,這樣盒子就不會交換得太厲害以至於它沒有響應。
除此之外,您可以首先在 httpd.conf 中禁用 keep-alives,如果它們已打開,則連接不會保持打開狀態。接下來是禁用任何您不使用的 httpd 模組,以盡量減少每個程序的記憶體使用量。第三,假設您無法增加記憶體限制,請將 httpd.conf 中的 MaxClients 更改為 8(如果您能夠增加伺服器 RAM,請嘗試將 RAM/64 作為值)。第四,雖然這可能看起來違反直覺,因為您的記憶體不足,請安裝 APC 以進行 PHP 操作碼記憶體。您將為記憶體犧牲少量 RAM,但可能會更快地提供連接,從而將它們釋放給其他人。
從長遠來看,考慮將 httpd 切換到 worker/event 模式並將 PHP 作為 FastCGI 執行,或者切換到像 nginx 這樣的輕量級 Web 伺服器。