Linux 系统监控、诊断工具之 top命令详解(2)

Mem: 191272k total   物理内存总量  
173656k used   使用的物理内存总量  
17616k free   空闲内存总量  
22052k buffers   用作内核缓存的内存量  
Swap: 192772k total   交换区总量  
0k used   使用的交换区总量  
192772k free   空闲交换区总量  
123988k cached   缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
 

PS:如何计算可用内存和已用内存?

除了 free -m 之外,也可以看 top:

Mem: 255592k total, 167568k used, 88024k free, 25068k buffers Swap: 524280k total, 0k used, 524280k free, 85724k cached 3.1  实际的程序可用内存数怎么算呢?

The answer is: free + (buffers + cached)

88024k + (25068k + 85724k) = 198816k

3.2  程序已用内存数又怎么算呢?

The answer is: used – (buffers + cached)

167568k – (25068k + 85724k) = 56776k

3.3  怎么判断系统是否内存不足呢?

如果你的 swap used 数值大于 0 ,基本可以判断已经遇到内存瓶颈了,要么优化你的代码,要么加内存。

3.4  buffer 与cache 的区别

A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use 从应用程序角度来看,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读写的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存 = 系统free memory + buffers + cached.

buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。

实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。

#free
#man X
#free
#man X
#free
你可以先后比较一下free后显示buffers的大小。
另一个实验:
#free
#ls /dev
#free
你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。
因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)

(4)进程信息区:

统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号   列名   含义  
a   PID   进程id  
b   PPID   父进程id  
c   RUSER   Real user name  
d   UID   进程所有者的用户id  
e   USER   进程所有者的用户名  
f   GROUP   进程所有者的组名  
g   TTY   启动进程的终端名。不是从终端启动的进程则显示为 ?  
h   PR   优先级  
i   NI   nice值。负值表示高优先级,正值表示低优先级  
j   P   最后使用的CPU,仅在多CPU环境下有意义  
k   %CPU   上次更新到现在的CPU时间占用百分比  
l   TIME   进程使用的CPU时间总计,单位秒  
m   TIME+   进程使用的CPU时间总计,单位1/100秒  
n   %MEM   进程使用的物理内存百分比  
o   VIRT   进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES  
p   SWAP   进程使用的虚拟内存中,被换出的大小,单位kb。  
q   RES   进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA  
r   CODE   可执行代码占用的物理内存大小,单位kb  
s   DATA   可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb  
t   SHR   共享内存大小,单位kb  
u   nFLT   页面错误次数  
v   nDRT   最后一次写入到现在,被修改过的页面数。  
w   S   进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
 
x   COMMAND   命令名/命令行  
y   WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名  
z   Flags   任务标志,参考 sched.h  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/17148.html