用 Bash 指令碼監控 Linux 上的記憶體使用情況
目前市場上有許多開源監控工具可用於監控 Linux 系統的效能。當系統達到指定的閾值限制時,它可以傳送電子郵件警報。它可以監視 CPU 利用率、記憶體利用率、交換利用率、磁碟空間利用率等所有內容。
如果你只有很少的系統並且想要監視它們,那麼編寫一個小的 shell 指令碼可以使你的任務變得非常簡單。
在本教程中,我們新增了兩個 shell 指令碼來監視 Linux 系統上的記憶體利用率。當系統達到給定閾值時,它將給特定電子郵件地址發郵件。
方法-1:用 Linux Bash 指令碼監視記憶體利用率併傳送電子郵件
如果只想在系統達到給定閾值時通過郵件獲取當前記憶體利用率百分比,請使用以下指令碼。
這是個非常簡單直接的單行指令碼。在大多數情況下,我更喜歡使用這種方法。
當你的系統達到記憶體利用率的 80% 時,它將觸發一封電子郵件。
*/5 * * * * /usr/bin/free | awk '/Mem/{printf("RAM Usage: %.2f%\n"), $3/$2*100}' | awk '{print $3}' | awk '{ if($1 > 80) print $0;}' | mail -s "High Memory Alert" 2daygeek@gmail.com
注意:你需要更改電子郵件地址而不是使用我們的電子郵件地址。此外,你可以根據你的要求更改記憶體利用率閾值。
輸出:你將收到類似下面的電子郵件提醒。
High Memory Alert: 80.40%
我們過去新增了許多有用的 shell 指令碼。如果要檢視這些內容,請導航至以下連結。
方法-2:用 Linux Bash 指令碼監視記憶體利用率併傳送電子郵件
如果要在郵件警報中獲取有關記憶體利用率的更多資訊。使用以下指令碼,其中包括基於 top
命令和 ps
命令的最高記憶體利用率和程式詳細資訊。
這將立即讓你瞭解系統的執行情況。
當你的系統達到記憶體利用率的 “80%” 時,它將觸發一封電子郵件。
注意:你需要更改電子郵件地址而不是使用我們的電子郵件地址。此外,你可以根據你的要求更改記憶體利用率閾值。
# vi /opt/scripts/memory-alert.sh
#!/bin/sh
ramusage=$(free | awk '/Mem/{printf("RAM Usage: %.2f\n"), $3/$2*100}'| awk '{print $3}')
if [ "$ramusage" > 20 ]; then
SUBJECT="ATTENTION: Memory Utilization is High on $(hostname) at $(date)"
MESSAGE="/tmp/Mail.out"
TO="2daygeek@gmail.com"
echo "Memory Current Usage is: $ramusage%" >> $MESSAGE
echo "" >> $MESSAGE
echo "------------------------------------------------------------------" >> $MESSAGE
echo "Top Memory Consuming Process Using top command" >> $MESSAGE
echo "------------------------------------------------------------------" >> $MESSAGE
echo "$(top -b -o +%MEM | head -n 20)" >> $MESSAGE
echo "" >> $MESSAGE
echo "------------------------------------------------------------------" >> $MESSAGE
echo "Top Memory Consuming Process Using ps command" >> $MESSAGE
echo "------------------------------------------------------------------" >> $MESSAGE
echo "$(ps -eo pid,ppid,%mem,%Memory,cmd --sort=-%mem | head)" >> $MESSAGE
mail -s "$SUBJECT" "$TO" < $MESSAGE
rm /tmp/Mail.out
fi
最後新增一個 cron 任務 來自動執行此操作。它將每 5 分鐘執行一次。
# crontab -e
*/5 * * * * /bin/bash /opt/scripts/memory-alert.sh
注意:由於指令碼計劃每 5 分鐘執行一次,因此你將在最多 5 分鐘後收到電子郵件提醒(但不是 5 分鐘,取決於具體時間)。
比如說,如果你的系統達到 8.25 的給定限制,那麼你將在 5 分鐘內收到電子郵件警報。希望現在說清楚了。
輸出:你將收到類似下面的電子郵件提醒。
Memory Current Usage is: 80.71%
+------------------------------------------------------------------+
Top Memory Consuming Process Using top command
+------------------------------------------------------------------+
top - 12:00:58 up 5 days, 9:03, 1 user, load average: 1.82, 2.60, 2.83
Tasks: 314 total, 1 running, 313 sleeping, 0 stopped, 0 zombie
%Cpu0 : 8.3 us, 12.5 sy, 0.0 ni, 75.0 id, 0.0 wa, 0.0 hi, 4.2 si, 0.0 st
%Cpu1 : 13.6 us, 4.5 sy, 0.0 ni, 81.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 21.7 us, 21.7 sy, 0.0 ni, 56.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 13.6 us, 9.1 sy, 0.0 ni, 77.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 17.4 us, 8.7 sy, 0.0 ni, 73.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 20.8 us, 4.2 sy, 0.0 ni, 70.8 id, 0.0 wa, 0.0 hi, 4.2 si, 0.0 st
%Cpu6 : 9.1 us, 0.0 sy, 0.0 ni, 90.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 17.4 us, 4.3 sy, 0.0 ni, 78.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16248588 total, 5015964 free, 6453404 used, 4779220 buff/cache
KiB Swap: 17873388 total, 16928620 free, 944768 used. 6423008 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17163 daygeek 20 2033204 487736 282888 S 10.0 3.0 8:26.07 /usr/lib/firefox/firefox -contentproc -childID 15 -isForBrowser -prefsLen 9408 -prefMapSize 184979 -parentBuildID 20190521202118 -greomni /u+
1121 daygeek 20 4191388 419180 100552 S 5.0 2.6 126:02.84 /usr/bin/gnome-shell
1902 daygeek 20 1701644 327216 82536 S 20.0 2.0 153:27.92 /opt/google/chrome/chrome
2969 daygeek 20 1051116 324656 92388 S 15.0 2.0 149:38.09 /opt/google/chrome/chrome --type=renderer --field-trial-handle=10346122902703263820,11905758137655502112,131072 --service-pipe-token=1339861+
1068 daygeek 20 1104856 309552 278072 S 5.0 1.9 143:47.42 /usr/lib/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3
27246 daygeek 20 907344 265600 108276 S 30.0 1.6 10:42.80 /opt/google/chrome/chrome --type=renderer --field-trial-handle=10346122902703263820,11905758137655502112,131072 --service-pipe-token=8587368+
+------------------------------------------------------------------+
Top Memory Consuming Process Using ps command
+------------------------------------------------------------------+
PID PPID %MEM %CPU CMD
8223 1 6.4 6.8 /usr/lib/firefox/firefox --new-window
13948 1121 6.3 1.2 /usr/bin/../lib/notepadqq/notepadqq-bin
8671 8223 4.4 7.5 /usr/lib/firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 6999 -prefMapSize 184979 -parentBuildID 20190521202118 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 8223 true tab
17163 8223 3.0 0.6 /usr/lib/firefox/firefox -contentproc -childID 15 -isForBrowser -prefsLen 9408 -prefMapSize 184979 -parentBuildID 20190521202118 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 8223 true tab
1121 1078 2.5 1.6 /usr/bin/gnome-shell
17937 8223 2.5 0.8 /usr/lib/firefox/firefox -contentproc -childID 16 -isForBrowser -prefsLen 9410 -prefMapSize 184979 -parentBuildID 20190521202118 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 8223 true tab
8499 8223 2.2 0.6 /usr/lib/firefox/firefox -contentproc -childID 4 -isForBrowser -prefsLen 6635 -prefMapSize 184979 -parentBuildID 20190521202118 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 8223 true tab
8306 8223 2.2 0.8 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 184979 -parentBuildID 20190521202118 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 8223 true tab
9198 8223 2.1 0.6 /usr/lib/firefox/firefox -contentproc -childID 7 -isForBrowser -prefsLen 8604 -prefMapSize 184979 -parentBuildID 20190521202118 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 8223 true tab
via: https://www.2daygeek.com/linux-bash-script-to-monitor-memory-utilization-usage-and-send-email/
作者:Magesh Maruthamuthu 選題:lujun9972 譯者:wxy 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- 利用Bash指令碼監控Linux伺服器的記憶體使用情況的相關資料指令碼Linux伺服器記憶體
- PowerShell 指令碼來監控 CPU、記憶體和磁碟使用情況:指令碼記憶體
- 如何用bash shell 指令碼監控 Linux記憶體、磁碟和 CPU?指令碼Linux記憶體
- 在 Linux 上用 Bash 指令碼監控 messages 日誌Linux指令碼
- 用於自動監控磁碟使用情況的 Shell 指令碼指令碼
- 監控 Python 記憶體使用情況和程式碼執行時間!Python記憶體
- 用 Linux Shell 指令碼來監控磁碟使用情況併傳送郵件Linux指令碼
- 如何使用 Bash 指令碼從 SAR 報告中獲取 CPU 和記憶體使用情況指令碼記憶體
- 利用 Shell 指令碼來監控 Linux 系統的記憶體指令碼Linux記憶體
- 檢視LINUX程式記憶體佔用情況Linux記憶體
- Linux效能優化:記憶體使用情況分析Linux優化記憶體
- Linux 檢視記憶體使用情況的幾種方法Linux記憶體
- 檢查 Linux 中記憶體使用情況的 8 條命令Linux記憶體
- Linux檢視伺服器記憶體使用情況的命令Linux伺服器記憶體
- Flutter 上的記憶體洩漏監控Flutter記憶體
- Linux上執行記憶體中的指令碼和程式Linux記憶體指令碼
- 監控JVM記憶體使用情況,剩餘空間小於2M時報警JVM記憶體
- Linux系統下分析記憶體使用情況的管理工具Linux記憶體
- 總結Linux下檢視記憶體使用情況的多種方法Linux記憶體
- 在Linux中,如何監控系統資源使用情況?Linux
- linux 檢視某個程序和服務記憶體佔用情況命令Linux記憶體
- java程式碼實現檢視Tomcat記憶體使用情況JavaTomcat記憶體
- Linux中監控磁碟分割槽及使用情況的命令有哪些?Linux
- Linux中監控磁碟分割槽和使用情況的幾個工具Linux
- 在Linux中,如何檢查系統的CPU和記憶體使用情況?Linux記憶體
- 使用 vmstat 命令確定記憶體使用情況記憶體
- 記憶體CPU監控記憶體
- [實戰] Flutter 上的記憶體洩漏監控Flutter記憶體
- 使用 top 命令瞭解 Fedora 的記憶體使用情況記憶體
- 檢視 Linux 系統中程序和使用者的記憶體使用情況Linux記憶體
- Redis 記憶體突增時,如何定量分析其記憶體使用情況Redis記憶體
- RabbitMQ - 記憶體磁碟監控MQ記憶體
- 監控java程式啟動時的CPU使用情況Java
- linux實現shell指令碼監控磁碟記憶體達到閾值時清理catalina.out日誌Linux指令碼記憶體
- 使用show engine innodb status 檢視記憶體使用情況記憶體
- 查詢表空間使用情況的指令碼指令碼
- obukhov/redis-inventory: 分析redis記憶體使用情況的CLI工具Redis記憶體
- iOS微信記憶體監控iOS記憶體