用Bash脚本监控Linux上的内存使用情况

系统 Linux 系统运维
在本教程中,我们添加了两个 shell 脚本来监视 Linux 系统上的内存利用率。当系统达到给定阈值时,它将给特定电子邮件地址发邮件。

[[268754]]

目前市场上有许多开源监控工具可用于监控 Linux 系统的性能。当系统达到指定的阈值限制时,它可以发送电子邮件警报。它可以监视 CPU 利用率、内存利用率、交换利用率、磁盘空间利用率等所有内容。

如果你只有很少的系统并且想要监视它们,那么编写一个小的 shell 脚本可以使你的任务变得非常简单。

在本教程中,我们添加了两个 shell 脚本来监视 Linux 系统上的内存利用率。当系统达到给定阈值时,它将给特定电子邮件地址发邮件。

方法-1:用 Linux Bash 脚本监视内存利用率并发送电子邮件

如果只想在系统达到给定阈值时通过邮件获取当前内存利用率百分比,请使用以下脚本。

这是个非常简单直接的单行脚本。在大多数情况下,我更喜欢使用这种方法。

当你的系统达到内存利用率的 80% 时,它将触发一封电子邮件。

  1. */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

注意:你需要更改电子邮件地址而不是使用我们的电子邮件地址。此外,你可以根据你的要求更改内存利用率阈值。

输出:你将收到类似下面的电子邮件提醒。

  1. High Memory Alert: 80.40%

我们过去添加了许多有用的 shell 脚本。如果要查看这些内容,请导航至以下链接。

 * 如何使用 shell 脚本自动执行日常活动?

方法-2:用 Linux Bash 脚本监视内存利用率并发送电子邮件

如果要在邮件警报中获取有关内存利用率的更多信息。使用以下脚本,其中包括基于 top 命令和 ps 命令的***内存利用率和进程详细信息。

这将立即让你了解系统的运行情况。

当你的系统达到内存利用率的 “80%” 时,它将触发一封电子邮件。

注意:你需要更改电子邮件地址而不是使用我们的电子邮件地址。此外,你可以根据你的要求更改内存利用率阈值。

  1. # vi /opt/scripts/memory-alert.sh
  2.  
  3. #!/bin/sh
  4. ramusage=$(free | awk '/Mem/{printf("RAM Usage: %.2f\n"), $3/$2*100}'| awk '{print $3}')
  5.  
  6. if [ "$ramusage" > 20 ]; then
  7.  
  8. SUBJECT="ATTENTION: Memory Utilization is High on $(hostname) at $(date)"
  9. MESSAGE="/tmp/Mail.out"
  10. TO="2daygeek@gmail.com"
  11. echo "Memory Current Usage is: $ramusage%" >> $MESSAGE
  12. echo "" >> $MESSAGE
  13. echo "------------------------------------------------------------------" >> $MESSAGE
  14. echo "Top Memory Consuming Process Using top command" >> $MESSAGE
  15. echo "------------------------------------------------------------------" >> $MESSAGE
  16. echo "$(top -b -o +%MEM | head -n 20)" >> $MESSAGE
  17. echo "" >> $MESSAGE
  18. echo "------------------------------------------------------------------" >> $MESSAGE
  19. echo "Top Memory Consuming Process Using ps command" >> $MESSAGE
  20. echo "------------------------------------------------------------------" >> $MESSAGE
  21. echo "$(ps -eo pid,ppid,%mem,%Memory,cmd --sort=-%mem | head)" >> $MESSAGE
  22. mail -s "$SUBJECT" "$TO" < $MESSAGE
  23. rm /tmp/Mail.out
  24. fi

***添加一个 cron 任务 来自动执行此操作。它将每 5 分钟运行一次。

  1. # crontab -e
  2. */5 * * * * /bin/bash /opt/scripts/memory-alert.sh

注意:由于脚本计划每 5 分钟运行一次,因此你将在最多 5 分钟后收到电子邮件提醒(但不是 5 分钟,取决于具体时间)。

比如说,如果你的系统达到 8.25 的给定限制,那么你将在 5 分钟内收到电子邮件警报。希望现在说清楚了。

输出:你将收到类似下面的电子邮件提醒。

  1. Memory Current Usage is: 80.71%
  2.  
  3. +------------------------------------------------------------------+
  4. Top Memory Consuming Process Using top command
  5. +------------------------------------------------------------------+
  6. top - 12:00:58 up 5 days, 9:03, 1 user, load average: 1.82, 2.60, 2.83
  7. Tasks: 314 total, 1 running, 313 sleeping, 0 stopped, 0 zombie
  8. %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
  9. %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
  10. %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
  11. %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
  12. %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
  13. %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
  14. %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
  15. %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
  16. KiB Mem : 16248588 total, 5015964 free, 6453404 used, 4779220 buff/cache
  17. KiB Swap: 17873388 total, 16928620 free, 944768 used. 6423008 avail Mem
  18.  
  19. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  20. 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+
  21. 1121 daygeek 20 4191388 419180 100552 S 5.0 2.6 126:02.84 /usr/bin/gnome-shell
  22. 1902 daygeek 20 1701644 327216 82536 S 20.0 2.0 153:27.92 /opt/google/chrome/chrome
  23. 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+
  24. 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
  25. 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+
  26.  
  27. +------------------------------------------------------------------+
  28. Top Memory Consuming Process Using ps command
  29. +------------------------------------------------------------------+
  30. PID PPID %MEM %CPU CMD
  31. 8223 1 6.4 6.8 /usr/lib/firefox/firefox --new-window
  32. 13948 1121 6.3 1.2 /usr/bin/../lib/notepadqq/notepadqq-bin
  33. 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
  34. 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
  35. 1121 1078 2.5 1.6 /usr/bin/gnome-shell
  36. 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
  37. 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
  38. 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
  39. 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

 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2010-06-02 11:06:15

Linux 内存监控

2017-01-18 21:57:14

2010-06-02 12:47:12

Linux 内存监控

2022-06-09 08:07:15

Shell脚本Linux

2019-05-20 16:21:51

LinuxShell监控磁盘

2010-02-03 17:16:58

Linux内存使用

2019-09-17 12:13:05

BashLinuxCPU

2009-07-09 18:03:25

tomcatJVM内存

2023-08-21 14:18:48

操作系统Linux

2022-07-13 14:26:26

Linux

2022-09-26 09:44:10

Linux

2020-08-15 07:30:58

Linux命令汇总

2020-02-10 19:50:08

Linux内存使用命令

2017-11-30 18:42:22

PythonCPU脚本分析

2019-11-27 14:38:41

Windows 10Firefox高CPU

2020-02-04 13:50:09

Linux进程内存使用

2020-06-17 14:10:01

Python内存程序

2019-08-01 09:35:09

LinuxBashmessages

2023-01-27 15:28:04

开发Python内存

2022-04-07 06:04:00

NetHogs开源网络工具
点赞
收藏

51CTO技术栈公众号