一个衬垫来获取内存使用情况

一个衬垫来获取内存使用情况

希望做一个单行来告诉系统上的可用内存总量,包括交换和缓存。

free -t不是一个选项,所以我必须对空闲列下的值进行求和。

我不确定如何获得这些值;如果我使用awk,如何在不同行中引用不同的数字(空闲Mem$3,而例如不同行上的空闲交换空间是$4)?

答案1

在我现在面前的 debian 上,free -t显示Total:一行:

             total       used       free     shared    buffers     cached
Mem:       8197980    2583348    5614632          0     222508    1904352
-/+ buffers/cache:     456488    7741492
Swap:      7807584          0    7807584
Total:    16005564    2550180   13455384

如果您只需要该行,您可以使用tailawk来获取值。

但是,如果您free没有显示这一行,您可以使用 awk withRS=""来连接行:

free | awk -v RS="" '{print $10 "+" $17 "+" $21}' | bc

如果您的列布局free与我的不同,您可能需要调整字段编号。

说明:该RS字段为记录分隔符。将其设置为""连接 free 输出中的所有行,因此awk可以像在一行上一样引用它们。

从头开始计数,$1to$6是列标题,$7to 是Mem:行标题,$8to$10是该行上的值...因此$10是可用内存值。对于以下值,以类似的方式完成此操作;

             total       used       free     shared    buffers     cached
Mem:            $8         $9        $10        $11        $12        $13
-/+ buffers/cache:        $16        $17
Swap:          $19        $20        $21

awk 命令{print $10 "+" $17 "+" $21}基本上将这些值用+中间的符号连接起来,然后通过管道传输输出来bc计算总和。

答案2

也许这可以是一个替代方案free

cat /proc/meminfo | grep -e MemFree -e Buffers -e SwapFree | gawk 'BEGIN{s=0}{s+=$2}END{print s}'

答案3

您是否能够运行free然后解析输出,例如

free | awk '{print $4}' | tail -3 | sed '2d' |paste -sd+ | bc

相关内容