紀錄一下,離失憶症越來越近的一天
一個月前,由於wildfly時常因為記憶體不足導致效能低下
所以翻了很多網路文章,找到使用bash顯示及比較記憶體的方法
結果一個月後,完全看不懂自己在寫什麼了
所以...
方法一:直接使用awk處理後,將文字String轉為數值比較大小,需要bc這個函式庫
FREEM=`free | grep Mem | awk '{print $3/$2 * 100.0}'`
echo $FREEM
if [ "`echo "${FREEM} > 50" | bc`" -eq 1 ];
then
echo "memory usage is ok"
else
echo "wildfly need to restart"
systemctl restart wildfly
fi
echo $FREEM
if [ "`echo "${FREEM} > 50" | bc`" -eq 1 ];
then
echo "memory usage is ok"
else
echo "wildfly need to restart"
systemctl restart wildfly
fi
awk處理後數值換成文字了,所以要傳給bc去處理,才能使用數學運算式
最後用 -eq 1 來比較前面運算後的結果boolean值 0 為 假(false),1 為 真(true)
如果結果為真(1),就跳去if else判斷式,這樣也行
方法二:發現直接在awk把結果變成數值就好?
musage=$(free | awk '/Mem/{printf("RAM Usage: %.2f%\n"), $3/$2*100}' | awk '{print $3}' | cut -d"." -f1)
if [ $musage -le 56 ]; then
echo "Current Memory Usage: $musage%"
systemctl stop httpd && systemctl restart wildfly && systemctl start httpd
else
echo "Memory usage is: $musage% ,under threshold"
fi
if [ $musage -le 56 ]; then
echo "Current Memory Usage: $musage%"
systemctl stop httpd && systemctl restart wildfly && systemctl start httpd
else
echo "Memory usage is: $musage% ,under threshold"
fi
重點在經過cut -d 和 -f 就變成數值了?!
所以直接用 -le 比較結果
終於知道這些參數option是什麼意思Orz
我好廢啊!!
- num1 -eq num2 check if 1st number is equal to 2nd number
- num1 -ge num2 checks if 1st number is greater than or equal to 2nd number
- num1 -gt num2 checks if 1st number is greater than 2nd number
- num1 -le num2 checks if 1st number is less than or equal to 2nd number
- num1 -lt num2 checks if 1st number is less than 2nd number
- num1 -ne num2 checks if 1st number is not equal to 2nd number
以下參考資料
大概是我的問題太嫩,stackoverflow居然沒有這些作法
https://www.geeksforgeeks.org/bc-command-linux-examples/
https://www.linuxtechi.com/compare-numbers-strings-files-in-bash-script/