Ubuntu

用於檢查和響應記憶體使用情況的一行腳本

  • December 9, 2014

我想要一行 shell/bash 來做這些事情:

test "`free | grep | awk | whatever` -gt 80" && any_command

將整個系統使用的 ram 總百分比與硬編碼數字(在我的情況下為 80)進行比較。只要ram 高於給定百分比就執行test也沒關係。any_command

  • 確切的字節/兆字節而不是百分比是可以的
  • 這應該適用於典型的 ubuntu 14.04
  • 旨在用作 cron 作業
  • **獎勵:**做同樣事情的單線,但檢查 ram 的特定程序

更新

關於這是如何建構 monit/bluepill/god 之類的問題來解決的問題,有一些答案。我同意 100%,您很可能應該遵循這些答案中的建議。但是,無論出於何種原因,假設這可能涉及所有註意事項和問題,這個問題專門針對我所描述的確切路線。

怎麼樣:

[ $(free -m| grep  Mem | awk '{ print int($3/$2*100) }') -gt "80" ] && echo "greater " || echo "lesser"

對於流程消耗,這是解決方案的一個可能部分:

for p in $(pgrep bash); do total=$(($total + $(awk '/VmSize/ { print $2 }' /proc/$p/status))); done ; echo "Total memory usage: $total kb" ; unset total

將兩者結合起來留給讀者作為練習。

不要重新發明輪子:)

Monit 實用程序是專門為處理這種情況而建構的。它有據可查,並且在 ServerFault 上有很多範例。

 check system kale.GreenLeaf.com
   if loadavg (5min) > 16 for 15 cycles then alert
   if memory usage > 92% then alert
   if swap usage > 10% then alert

或對於一個過程:

check process cups
   with pidfile "/var/run/cupsd.pid"
   start program = "/sbin/service cups start"
   stop program = "/sbin/service cups stop"
   if 10 restarts within 11 cycles then timeout
   if total memory > 1000.0 MB for 5 cycles then alert
   if total memory > 2000.0 MB for 5 cycles then restart
   if cpu usage > 95% for 11 cycles then restart

您可以配置 EXEC,而不是警報或啟動/停止/重新啟動操作:

EXEC 可用於執行任意程序並發送警報。如果選擇此操作,則必須說明要執行的程序,如果程序需要參數,則必須將程序及其參數括在帶引號的字元串中。您可以選擇指定執行程序在啟動時應切換到的 uid 和 gid…

if total memory > 2000.0 MB for 5 cycles then exec "/sbin/service sidekiq restart"

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