3

当我的服务器进入高负载时,Apache 的正常重启似乎使事情恢复了控制。所以我用这个配置设置了monit:

set daemon 10
check system localhost
      if loadavg (1min) > 5 then exec "/etc/init.d/apache2 graceful"

所以每 10 秒,我轮询一次服务器负载,当它超过 5 时,我优雅地重新启动 Apache。但是,这会暂时增加负载,因此我们陷入了死亡螺旋。我希望它在 10 秒后注意到负载为 5 或更多,然后优雅地重新启动 Apache,然后等待5 分钟左右,然后再次检查该特定指标。

有没有办法用monit做到这一点?

4

2 回答 2

2

它并不完全在监控范围内,但它足够接近

set daemon 10
check system localhost
  if loadavg (1min) > 5 then unmonitor
  if loadavg (1min) > 5 then exec "/etc/init.d/apache2 graceful"
  if loadavg (1min) > 5 then exec "python /scripts/remonitor.py"

然后你有一个 python 脚本,像这样:

import time, os

time.sleep(5*60)
os.system("monit monitor system")

所以这将:
1. 当负载过大时取消监控“系统”,以防止死亡螺旋
2. 优雅地重新启动 apache
3. 启动将在 5 分钟内重新监控“系统”的脚本

于 2012-06-13T23:16:37.810 回答
0

关于什么

set daemon 10

set limits { programtimeout: 300 seconds }

check system localhost
   if loadavg (1min) > 5 then exec "/bin/sh -c '/etc/init.d/apache2 graceful && sleep 5m'"

甚至

set daemon 10

check system localhost
   start program = "/bin/sh -c '/etc/init.d/apache2 graceful && sleep 5m'" with timeout 330 seconds
   if loadavg (1min) > 5 then start

即,只需在sleep 5m重启 Apache 的命令之后添加 shell 命令,并将适当的超时添加到 monitrc。

于 2020-01-21T07:23:03.697 回答