linux - 使用 LINUX top 命令计算已用内存百分比

标签 linux bash

我正在将 top 命令输出写入文本文件。 我正在尝试编写一个简单的 bash 脚本来计算已用内存的百分比并发送一个 如果内存使用百分比超过 90%,则发送电子邮件。

这是我到目前为止的 bash 脚本。

#!/bin/bash
top -n 1 -b | grep "Mem" > /home/modadm/top-output.txt
MAXMEM=/home/modadm/top-output.txt | grep "Mem" | cut -c 7-14 
USEDMEM=/home/modadm/top-output.txt | grep "Mem" | cut -c 25-31
$USEDPCT='echo $USEDMEM / $MAXMEM * 100 | bc'
$USEDPCT | mail -s "Test Email from MOD Server" test@test.com

当我保存并执行脚本时,出现错误“没有这样的文件或目录”:

-bash-3.2$ ./memcheck.sh
./memcheck.sh: line 4: =echo $USEDMEM / $MAXMEM * 100 | bc: No such file or directory
Null message body; hope that's ok
-bash-3.2$ 

有人可以帮忙吗?我是 bash 脚本的新手,这是我的第一个脚本。

谢谢

最佳答案

其他答案的内容我就不重复了;相反,当您需要的只是有关系统内存使用情况的信息时,我会质疑解析 top 输出的智慧。

top 的输出是供人类使用的,还包含许多不需要且生成成本很高的每个进程的信息。 free 的输出更适合这种特殊用途。

其次,根据您脚本中的计算判断,您似乎不了解在 Linux 和其他类 Unix 系统上测量系统内存使用的方式。与其他 操作系统相反,已用内存大小包含用于磁盘缓存和其他缓冲区的内存。在任何已经启动一段时间的系统上,空闲内存趋于零 - 未使用的内存是浪费的内存。

找出进程使用的内存量的第一步是从已用内存大小中减去用于缓冲区的内存量。但即使是这样在现代系统上也是不够的——即使是 freetop 也会在一定程度上出错,如 this older answer of mine 中所述。 .

关于linux - 使用 LINUX top 命令计算已用内存百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118767/

相关文章:

linux - Ubuntu:在启动时使用 args 启动 shell 脚本

linux - "can' t 读取文件夹”调用 sed 时出错

linux - 在 C/C++ 中执行与 Windows API 的 SSH 连接?

c - 如何在 SIGSEGV 处理程序中安全地转储内存。 C、Linux

bash - 如何在脚本中更改 shell

linux - (Ubuntu) Linux : Is it possible to find out if you're running inside §script§ command?

linux - Shell 在 if;then 条件后停止执行命令

linux - 使用另一个应用程序在 docker 中运行 nginx

linux - Unix 差异与上下文并排

regex - Linux 中包含多行正则表达式和数据模式的 2 个文件之间的 PCRE 模式匹配验证