Monit可以用来释放内存吗?

时间:2015-04-20 09:22:48

标签: memory monitoring restart monit

我已经使用monit监视并重启Apache和MySQL几个月了,所有这些都一直运行良好,直到今天服务器上的内容导致内存利用率超过90%,MySQL停止并且monit然后尝试连续然而,重启没有足够的内存才能重新启动它。

完整服务器重新启动已对所有内容进行了排序,以便现在再次正常运行。

我的问题是,如果它超过90%,我可以监控服务器ram利用率并释放ram或重新启动服务器等吗?

1 个答案:

答案 0 :(得分:2)

容量规划

关于MySQL和Apache的内存消耗的说明。两者都或多或少具有确定性,您应该事先进行一些容量规划,而不是每次因为配置错误而无法在负载高峰时间内重新启动服务器。在MySQL的情况下总结所有分配的缓冲区,缓存,线程缓存(准备服务线程的数量)和它们的堆栈大小等,你得到的数字。 MySQLTuner可以为您完成 - 该行看起来像(除了其他重要指标):

[OK] Maximum possible memory usage: 352.0M (48% of installed RAM)

在Apache的情况下,它更难,但经验方式应该是要走的路。 Apache配置中的工作人员数量有限,您只需要估算每个工作人员的平均内存消耗量 - 查看pstop等。然后将该值乘以工作人员数。如果您运行类似 mod_php 的内容,那么还可以在运行时限制内存使用量。

Monit方

Monit可以在匹配某个限制(例如消耗的内存)时重新启动服务(例如MySQL)。但在大多数情况下这样做是错误的,因为MySQL维护缓冲区和缓存并为客户端提供服务。重新启动会导致性能下降和服务中断。只有在不能以任何其他方式限制内存消耗时才使用它。例如:

check process mysql with pidfile /var/run/mysqld/mysqld.pid
  start program = "/etc/init.d/mysql start"
  stop program = "/etc/init.d/mysql stop"

  if totalmem > 256 MB for 10 cycles then restart

  group database

它也可以监视系统范围的内存消耗,但要注意Linux内存模型很复杂,而且很难说what amount of memory a process really consumes。像可用内存这样的系统范围的指标也可能是错误的,因为应该考虑磁盘缓存(缓存内存),共享库内存和许多其他方面的值。

以下是Monit默认Debain默认配置的示例:

check system myhost.mydomain.tld
  if loadavg (1min) > 4 then alert
  if loadavg (5min) > 2 then alert
  if memory usage > 75% then alert
  if cpu usage (user) > 70% then alert
  if cpu usage (system) > 30% then alert
  if cpu usage (wait) > 20% then alert

您可以使用exec操作(then <ACTION>)重新启动服务器,但我不建议您遵循此路径,而是执行一些容量规划。