根据我的 apache2 节中的 totalmem > 200m 测试,Monit 经常重新启动 apache2。我不确定我是否真的有问题,或者我是否应该增加 monit 配置中的 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,用于公司内部文件共享,但实际上并未使用它。[注意:我知道(现在)我可以通过切换到 REE 而不是使用 ruby1.8 来节省内存。]
服务器的流量极低 - 所有应用程序每小时约 20 次页面浏览量(不包括机器人和随机黑客嗅探),在可预见的未来不太可能超过每小时 1000 次页面浏览量。以下是详细信息:
$ 免费-m 已使用的、可用的、缓存的共享缓冲区总数 内存:496 354 142 0 39 100 -/+ 缓冲区/缓存:214 282 交换:1023 6 1017
顶部 - 17:36:27 启动 34 天,2:23,2 个用户,平均负载:0.00、0.00、0.00 任务:共 69 个,1 个正在运行,68 个正在休眠,0 个已停止,0 个僵尸 CPU: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 225米 34米 4580 S 0 6.9 0:00.76 Apache2 14680 www-数据 20 0 224米 33米 4560 S 0 6.7 0:00.79 Apache2 19146 www-数据 20 0 222米 33米 3900 S 0 6.7 0:00.75 Apache2 15255 www-数据 20 0 222米 32米 3780 S 2 6.6 0:00.60 Apache2 19733 mysql 20 0 160米 31米 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 ruby1.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 bash 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 PassengerWatchd 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 stop” 如果 CPU 持续 2 个周期大于 60%,则重新启动 如果 CPU > 80% 持续 5 个周期则重新启动 如果总内存 > 200.0 MB 持续 5 个周期则重新启动 如果孩子> 250则重新开始 如果 loadavg(5min) 大于 10 并持续 8 个周期则停止 如果 5 个周期内重新启动 3 次,则超时 如果失败,主机 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 别名.conf 自动索引.加载 环境.加载 reqtimeout.conf 别名.load cgi.load mime.conf reqtimeout.load auth_basic.load dav_fs.conf mime.load rewrite.load authn_file.load dav_fs.load 协商.conf setenvif.conf authz_default.load dav.load 协商.load setenvif.load authz_groupfile.load deflate.conf 乘客.conf 状态.conf authz_host.load deflate.load 乘客.load 状态.load authz_user.load dir.conf php5.conf 自动索引.conf dir.load php5.load
从我的apache2.conf:
保持活动状态 最大KeepAliveRequests 100 KeepAliveTimeout 10 启动服务器 1 最小备用服务器数 1 最大备用服务器数 5 最大客户数 50 每个子项的最大请求数 5000
:/etc/mysql/conf.d$ cat mysqld_small_footprint.cnf 允许的数据包 = 1M 线程堆栈 = 64K 表缓存 = 4 排序缓冲区 = 64K 网络缓冲区长度 = 2K 跳过innodb
更新
刚刚发现以下指南在这篇关于基本 Apache 服务器调优的文章中 它提供了我所寻求的指导。例如:
为了获得最佳性能,您需要调整 Apache 的 MaxClients 设置,以使 Apache 占用的可用物理内存不超过 70%。如果设置过高,则会导致机器开始大量占用交换空间,这将大幅增加 IO 和 CPU 等待时间,并很容易导致服务器瘫痪。
答案1
就其本身而言,使用超过 200MB 的 RAM 对你的 Apache 服务器来说不一定是个问题。但我认为你只需要弄清楚什么是可以接受的你的设置。
如果该 VPS 上没有其他东西,我认为允许 apache 超过 200M 作为上限是安全的。
如果您有时间和专业知识,您当然可以找到降低该数字的方法,但更有效的方法是提高监控阈值,而不是让它不断重新启动。据您所知,它可能会稳定在 201MB 的使用量,对吧(不太可能,但您明白我的意思)。
如果我处于你的位置,我不会认为每隔一段时间就重新启动 apache 是可以接受的...稳定性是可取的...比服务器上可用的任意数量的空闲 RAM 更重要。