【问题标题】:Memused (calculate – Memtotal - Memfree ) from proc filesystemMemused(计算 - Memtotal - Memfree )来自 proc 文件系统
【发布时间】:2015-06-20 23:25:18
【问题描述】:

我试图自己解决这个问题,但由于某种原因我无法解决这个问题,请你帮我解决这个问题。我正在使用 proc 文件系统来解析信息并重定向到文件。我只是无法理解。

mhz=$(cat /proc/cpuinfo | grep -m 1 "cpu MHz" | cut -d' ' -f 3-)
model=$(cat /proc/cpuinfo | grep -m 1 "model name" | cut -d' ' -f 4-)
memory=$(cat /proc/meminfo | grep MemTotal | cut -d' ' -f 2-)
free=$(cat /proc/meminfo | grep MemFree | cut -d' ' -f 2-)
version=$(cat /proc/version | cut -d' ' -f 3)
echo >> /home/user/data/proc 
echo Filename, field name, data >> /home/user/data/proc
echo /proc/cpuinfo, cpu MHz: $model >> /home/user/data/proc
echo /proc/cpuinfo, Model Name: $mhz >> /home/user/data/proc
echo /proc/meminfo, Total Memory: $memory >> /home/user/data/proc
echo /proc/meminfo, Free Memory: $free >> /home/user/data/proc
echo /proc/version, Linux Version: $version >> /home/user/data/proc

【问题讨论】:

  • 我在想我会创建一个变量 memused = $memory - $free
  • 然后我会通过回显它来返回值
  • 我会删掉数字并在 Bash 中做减法,最后添加单位。
  • 不确定你的意思
  • ((memused = memory - free))?

标签: linux bash proc


【解决方案1】:

你得到的答案将毫无意义。理想情况下,Linux 将利用您的所有 RAM。在内存中缓存 I/O 缓冲区和文本会使您的计算无效。

现在,如果您要回答的问题是“我的系统是否已满载”,那么更有用的工具是 vmstat(8):

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
0  0 1131424 3734228 263588 3188088    1    1    52    91    6    6 41  9 49  1

您需要注意的是 SI(换入)列。如果您看到恒定的非零值,则说明您遇到了分页问题。 SO(换出)值可以忽略。

但是,一般来说,如果您遇到分页问题,​​性能会像悬崖一样下降。

网站http://www.linuxatemyram.com/ 对内核的内存管理进行了轻松的解释。

【讨论】:

    【解决方案2】:

    这是一个评论,但我的评论中没有多行,所以在这里:

    mem_total_without_unit=$(</proc/meminfo grep MemTotal | grep -Eo '[0-9]+')
    mem_free_without_unit=$(</proc/meminfo grep MemFree | grep -Eo '[0-9]+')
    # print the free memory
    # customize the unit based on the format of your /proc/meminfo
    echo "$((mem_total_without_unit - mem_free_without_unit)) kB"
    

    示例输出:

    12427860 kB
    

    【讨论】:

    • 所以我可以只取变量而不是创建一个新的变量,我可以直接回显全部 - 免费?
    • 为什么用(())包裹
    • @johndoe 您的变量包含单位,因此您不能对它们进行算术运算。 (( ))arithmetic expansion
    • 您可以做的是首先使用我的mem_total_without_unitmem_free_without_unit 替换您的$memory$free 并手动附加单元。
    • 我很欣赏它会试一试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 2014-02-25
    相关资源
    最近更新 更多