
我有一個運行 apache2 的 Ubuntu 伺服器,我預計它會在有限的時間內受到大約 500-1000 個(並發)用戶的攻擊。此伺服器提供連接到 postgresql 資料庫(大小約為 20 Mb)的自訂(相當輕)php 頁面和靜態內容的混合。硬體穩定且相當強大:
- 英特爾至強 E5420 @ 2.5 GHz
- 12 GB 內存
在之前對該伺服器的匆忙期間,我增加了 ServerLimit、MPM 模組的 MaxClients,並減少了 Timeout 和 KeepAliveTimeout。它確實有效,但進展緩慢,我感覺到還有更多事情要做。您建議如何設定 Apache 伺服器來處理這種負載?
答案1
在這種情況下,您的瓶頸將是 PHP 及其對資料庫的處理。如果每次呼叫都打開一個新連接,那麼您很可能會在磁碟存取上遇到 I/O 牆。最好的選擇是將資料庫和靜態內容放在 RAM 磁碟中,並根據需要將變更提交到磁碟上的資料庫。還可以在 PHP 中使用 RAM 專用的快速雜湊查找來維護高效的查詢快取機制,這樣您就不會因為與查詢快取查找相關的不必要的處理週期而給 postgresql 帶來負擔。儘管 postgresql 在查詢快取方面可能比您自己的程式碼更有效,但它並不像從一開始就不需要連接那麼快。
答案2
您的伺服器應該能夠輕鬆處理事情。只是一些注意事項:
- 使用 SSL 會增加您的計算要求。因此,請使用純 HTTP。
- 使用 prefork MPM 會增加您的記憶體需求。因此,使用工人 MPM。
- 使用更多內核的更多並發性將提高性能。
- 將更多 RAM 專用於 PostgreSQL 資料庫。
這些只是通用指南。