Ubuntu
用於檢查和響應記憶體使用情況的一行腳本
我想要一行 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"