Conky $mem/$memmax RAM 报告与 free -m 命令不同

Conky $mem/$memmax RAM 报告与 free -m 命令不同

我的桌面屏幕上有这个 Conky 报告:

在此处输入图片描述

这是该文件的相关部分conky.conf

${color1}${font ConkySymbols:size=16}J${font} ${voffset -10}Memory» $hr${color}
${color1}${goto 35}RAM : ${color}$mem/$memmax ${alignr}$memperc% ${membar 4,100}
${color1}${goto 35}SWAP: ${color}$swap/$swapmax $alignr}$swapperc% ${swapbar 4,100}

但是当我运行时free -m我得到了这个:

在此处输入图片描述

比 Conky 的报告 (6GB 对 8.3GB) 少了 2GB。

我也尝试在终端中运行该mem命令,但该命令无法识别。

如何在终端中运行 Conky 用来查找已用/可用 RAM 统计信息的命令,以及为什么该命令存在差异free -m

编辑

${color1}${goto 35}RAM: ${execi 10 free --si -m|awk '/^Mem/{printf "%.2f",$3/1024}'}/$memmax ${execi 10 free --si -m|awk '/^Mem/{printf "%.1f%%", 100*$3/$2}'} \
${execibar 10 free --si -m|awk '/^Mem/{print 100*$3/$2}'}

在此处输入图片描述

答案1

来自来源看来这是根据从字段中读取这些内容的位置info.mem来计算的:info.memmax - memavail/proc/meminfo

    if (strncmp(buf, "MemTotal:", 9) == 0) {
      sscanf(buf, "%*s %llu", &info.memmax);
...
    } else if (strncmp(buf, "MemAvailable:", 13) 
      sscanf(buf, "%*s %llu", &memavail);

要从 conky调用free,你可以使用,例如,


RAM: ${execi 10 free --si -m|awk '/^Mem/{printf "%.2fGiB\n",$3/1024}'}/$memmax   \
${execi 10 free --si -m|awk '/^Mem/{printf "%.1f%%\n", 100*$3/$2}'} \
${execibar 10 free --si -m|awk '/^Mem/{print 100*$3/$2}'}

但是生成的条的大小由execibar您必须在部分中设置的全局变量固定conky.config

default_bar_height = 4,
default_bar_width = 100,

is的输出free被传递给它awk,它查找行首并取出行中的Mem第三个 ( ) 字并重新格式化它(参见)。您可以通过更改数字 2 来设置格式中的小数位数。$3man sprintf%.2f

相关内容