从proc文件系统中记忆(计算 - Memtotal - Memfree)

时间:2015-04-15 06:15:02

标签: linux bash proc

我试图自己解决这个问题,但由于某种原因,我无法弄明白这一点,请你帮我解决这个问题。我正在使用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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

现在,如果您要回答的问题是&#34;我的系统是否已满载&#34;,则更有用的工具是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/对内核的内存管理进行了轻松的解释。