Memory

Monit 正在重新啟動 apache2,我應該修復 monit 配置還是伺服器配置?

  • May 17, 2012

根據我的 apache2 節中的 totalmem > 200m 測試,Monit 經常重新啟動 apache2。我不確定我是否真的有問題,或者我是否應該在我的監控配置中增加 totalmem 測試。

在我們添加第二個 wordpress 站點之前,此配置很好,當時 apache2 開始觸發 monit totalmem > 200m 條件。在我開始考慮第二個 wordpress 網站的特定結構之前,我想了解我是否不應該只增加 monit 測試中的 totalmem 限制,然後繼續。

我的 apache2 伺服器的 monit 節是從 monit 安裝教程中複製的。一開始我認為這是一個合理的值,並認為如果遇到 apache 記憶體問題,我將為我的特定伺服器確定一個特定值。好吧,現在我已經解決了這個問題,並且弄清楚該值應該是什麼被證明比我預期的更具挑戰性。我還沒有找到任何可以告訴我如何確定特定伺服器配置的值應該是什麼的東西。

主機是執行 Ubuntu 伺服器 10.04LTS 的 VPS。Apache2 正在執行一個調查應用程序 (mod_php5)、兩個單一的 wordpress 安裝 (mod_php5) 和一個 Redmine 的分支 (mod_passenger)。我們開始設置 webdav,用於公司內部的文件共享,但實際上並沒有使用它。

$$ NOTE: I know (now) that I can save memory by switching to REE instead of using ruby1.8. $$ 伺服器的流量極低——所有應用程序(不包括機器人和隨機黑客嗅探)每小時約 20 次頁面瀏覽量,並且在可預見的未來不太可能超過每小時 1000 次頁面瀏覽量。以下是詳細資訊:

$免費-m
記憶體的已用空閒共享緩衝區總數
記憶體:496 354 142 0 39 100
-/+ 緩衝區/記憶體:214 282
交換:1023 6 1017
頂部 - 17:36:27 up 34 天,2:23,2 個使用者,平均負載:0.00、0.00、0.00
任務:共 69 個,正在執行 1 個,正在執行 68 個,已停止 0 個,殭屍 0 個
Cpu (s): 0.2% us, 0.1% sy, 0.0% ni, 99.7% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st
記憶體:總共 508272k,已使用 362944k,空閒 145328k,緩衝區 40448k
交換:總計 1048572k,已使用 6284k,免費 1042288k,記憶體 103028k

PID 使用者 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令
15257 www-數據 20 0 228m 37m 4472 S 0 7.5 0:01.20 apache2
15258 www-數據 20 0 225m 34m 4580 S 0 6.9 0:00.76 apache2
14680 www-數據 20 0 224m 33m 4560 S 0 6.7 0:00.79 apache2
19146 www 數據 20 0 222m 33m 3900 S 0 6.7 0:00.75 apache2
15255 www-數據 20 0 222m 32m 3780 S 2 6.6 0:00.60 apache2
19733 mysql 20 0 160m 31m 6396 S 0 6.4 0:00.34 mysqld
9379 根 20 0 199m 12m 7368 S 0 2.6 0:43.30 apache2
10289 根 20 0 46500 9680 1516 S 0 1.9 7:23.87 ruby​​1.8
10292 無人 20 0 72376 3656 2888 S 0 0.7 0:00.66 乘客登錄
19385 根 20 0 81348 3552 2680 S 0 0.7 0:00.04 sshd
19401 hostexsa 20 0 19556 2256 1592 S 0 0.4 0:00.10 巴什
10287 根 20 0 97808 2164 1896 S 0 0.4 0:02.19 乘客助手
10282 根 20 0 23512 1908 1648 S 0 0.4 0:00.01 乘客觀察
25370 根 20 0 105m 1876 1260 S 0 0.4 3:58.88 監控
19400 hostexsa 20 0 81348 1784 912 S 0 0.4 0:00.25 sshd
3616 根 20 0 245m 1700 1152 S 0 0.3 0:00.21 控制台套件dae
19926 hostexsa 20 0 19248 1220 932 R 0 0.2 0:00.05 頂部
:/etc/monit/conf.d $ cat apache2.conf
使用 pidfile /var/run/apache2.pid 檢查程序 apache2
啟動程序 = "/etc/init.d/apache2 start" 超時 20 秒
停止程序 = "/etc/init.d/apache2 停止"

如果 CPU 在 2 個週期內大於 60%,則重新啟動
如果 cpu > 80% 5 個週期然後重新啟動
如果 totalmem > 200.0 MB 5 個週期然後重新啟動
如果孩子> 250然後重新啟動
如果 loadavg(5min) 在 8 個週期內大於 10 則停止
如果 3 個在 5 個週期內重新啟動,則超時

如果失敗主機 sub.example.net 埠 80 協議 http
並請求“/monit/token”然後重新啟動

群伺服器
$/usr/sbin/apache2 -v
伺服器版本:Apache/2.2.14 (Ubuntu)
伺服器建成時間:2010 年 11 月 18 日 21:19:09

/etc/apache2/mods-enabled$ ls
alias.conf autoindex.load env.load reqtimeout.conf
alias.load cgi.load mime.conf reqtimeout.load
auth_basic.load dav_fs.conf mime.load rewrite.load
authn_file.load dav_fs.loadnegotiation.conf setenvif.conf
authz_default.load dav.load 協商載入 setenvif.load
authz_groupfile.load deflate.confpassenger.conf status.conf
authz_host.load deflate.load Passenger.load status.load
authz_user.load dir.conf php5.conf
autoindex.conf dir.load php5.load

從我的 apache2.conf 中:

保持活動狀態
MaxKeepAliveRequests 100
保持活動超時 10


啟動伺服器 1
MinSpareServers 1
MaxSpareServers 5
最大客戶數 50
MaxRequestsPerChild 5000
:/etc/mysql/conf.d$ cat mysqld_small_footprint.cnf
allowed_pa​​cket = 1M
執行緒堆棧 = 64K
表記憶體 = 4
排序緩衝區 = 64K
net_buffer_length = 2K
跳過-innodb

更新

剛剛在這篇關於基本 apache 伺服器調整的文章中找到了以下指南, 它提供了我一直在尋找的那種指南。例如:

為了獲得最佳性能,您需要調整 Apache 的 MaxClients 設置,使 Apache 消耗的可用物理記憶體不超過 70%。再高一點,你就有可能讓機器開始大量進入交換空間,這將大大增加 IO 和 CPU 等待,並且很容易導致伺服器癱瘓。

就其本身而言,使用超過 200MB 的 RAM 對您的 apache 伺服器來說不一定是個問題。但我認為你只需要弄清楚你的設置可以接受什麼。

如果那個VPS上沒有其他東西,我認為允許apache超過200M作為上限是安全的。

如果您有時間和專業知識,您當然可以找到降低該數字的方法,但是對您而言,提高監控門檻值而不讓它繼續重新啟動可能會更有效。據你所知,它可能會穩定在 201MB 的使用量,對(不太可能,但你明白我的意思)。

如果我站在你的立場上,我認為每隔一段時間重新啟動一次 apache 是不可接受的……穩定性是可取的……比伺服器上可用的任意數量的可用 RAM 更重要。

引用自:https://serverfault.com/questions/263612