Linux--资源监控

资源监控
1 free 内存监控
语 法: free [-bkmotV][-s < 间隔秒数 >]
补充说明: free 指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以
及系统核心使用的缓冲区等。
参 数:
-b Byte 为单位显示内存使用情况。
-k KB 为单位显示内存使用情况。
-m MB 为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s< 间隔秒数 > 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况
第 1 行 Mem: total:表示物理内存总量。 used:表示总计分配给缓存(包含 buffers 与 cache )使用的数量,但其中可能部分缓存并未实际使
用。
free:未被分配的内存。
shared:共享内存,一般系统不会用到,这里也不讨论。
buffers:系统分配但未被使用的 buffers 数量。
cached:系统分配但未被使用的 cache 数量。buffer 与 cache 的区别见后面。 total = used + free
第 2 行 -/+ buffers/cached: used:也就是第一行中的 used – buffers-cached 也是实际使用的内
存总量。
free:未被使用的 buffers 与 cache 和未被分配的内存之和,这就是系统当前实际可用内存。 free 2=
buffers1 + cached1 + free1 //free2 为第二行、buffers1 等为第一行
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 第 3 行: 第三行所指的是从应用程序角度
来看,对于应用程序来说,buffers/cached 是等于可用的,因为 buffer/cached 是为了提高文件读取
的性能,当应用程序需在用到内存的时候,buffer/cached 会很快地被回收。
所以从应用程序的角度来说,可用内存=系统 free memory+buffers+cached.
接下来解释什么时候内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换,如何看额定值( RHEL4.0 ):
#cat /proc/meminfo
交换将通过三个途径来减少系统中使用的物理页面的个数:
1. 减少缓冲与页面 cache 的大小,
2. 将系统 V 类型的内存页面交换出去,
3. 换出或者丢弃页面。 (Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用 swap 是不是影响到系统性能的。
下面是 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)
使用 free 命令
将 used 的值减去 buffer 和 cache 的值就是你当前真实内存使用 ————– 对操作系统 来讲是
Mem 的参数.buffers/cached 都是属于被使用,所以它认为 free 只有 16936 .
对应用程序 来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为 buffer/cached 是为 了
提高 程序执行的性能, 当程序使用内存时,buffer/cached 会很快地被使用。 所以,以应用来看看,
以(-/+ buffers/cache)的 free 和 used 为主.所以我们看这个就好了.另外告诉大家 一些常识.Linux
为了提高磁盘和内存存取效率, Linux 做了很多精心的设计, 除了对 dentry 进行缓存(用于 VFS,加速
文件路径名到 inode 的转换), 还采取了两种主要 Cache 方式:Buffer Cache 和 Page Cache。 前者针
对磁盘块的读写,后者针对文件 inode 的读写。这些 Cache 能有效缩短了 I/O 系统调用(比如
read,write,getdents)的时间。 记住内存是拿来用的,不是拿来看的. 不象 windows,无论你的真实物
理内存有多少,他都要拿硬盘交换 文件来读.这也就是 windows 为什么常常提示虚拟空间不足的原因.
你们想想,多无聊,在内存还有大部分 的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.
所以我们看 linux,只要不用 swap 的交换 空间,就不用担心自己的内存太少.如果常常 swap 用很多,可
能你就要考虑加物理内存了.这也是 linux 看 内存是否够用的标准哦 .
[root@scs-2 tmp]# free
total used free shared buffers cached
Mem: 3266180 3250004 16176 0 110652 2668236
-/+ buffers/cache: 471116 2795064
Swap: 2048276 80160 1968116
下面是对这些数值的解释:
total: 总计物理内存的大小。
used: 已使用多大。
free: 可用有多少。
Shared: 多个进程共享的内存总额。
Buffers/cached: 磁盘缓存的大小。
第三行 (-/+ buffers/cached):
used: 已使用多大。
free: 可用有多少。
第四行就不多解释了。
区别:第二行 (mem) used/free 与第三行 (-/+ buffers/cache) used/free 的区别。 这两个的区别在于使用
的角度来看,第一行是从 OS 的角度来看,因为对于 OS buffers/cached 都是属于被使用,所以他的可
用内存是 16176KB, 已用内存是 3250004KB, 其中包括,内核( OS )使用 +Application(X, oracle,etc) 使用的
+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说, buffers/cached 是等于可用的,因为
buffer/cached 是为了提高文件读取的性能,当应用程序需在用到内存的时候, buffer/cached 会很快地被
回收。
所以从应用程序的角度来说,可用内存 = 系统 free memory+buffers+cached
如上例:
2795064=16176+110652+2668236
接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进
行交换。
如何看额定值: cat /proc/meminfo
[root@scs-2 tmp]# cat /proc/meminfo
MemTotal: 3266180 kB
MemFree: 17456 kB
Buffers: 111328 kB
Cached: 2664024 kB
SwapCached: 0 kB
Active: 467236 kB
Inactive: 2644928 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 3266180 kB
LowFree: 17456 kB
SwapTotal: 2048276 kB
SwapFree: 1968116 kB
Dirty: 8 kB
Writeback: 0 kB
Mapped: 345360 kB
Slab: 112344 kB
Committed_AS: 535292 kB
PageTables: 2340 kB
VmallocTotal: 536870911 kB
VmallocUsed: 272696 kB
VmallocChunk: 536598175 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB
free -m 查看的结果:
[root@scs-2 tmp]# free -m
total used free shared buffers cached
Mem: 3189 3173 16 0 107 2605
-/+ buffers/cache: 460 2729
Swap: 2000 78 1921
查看 /proc/kcore 文件的大小(内存镜像):
[root@scs-2 tmp]# ll -h /proc/kcore
-r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore
备注:
占用内存的测量
测量一个进程占用了多少内存, linux 为我们提供了一个很方便的方法, /proc 目录为我们提供了所有的
信息,实际上 top 等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid 为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存 [root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
输出解释
CPU 以及 CPU0 。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 ( VmData+ VmStk 4
dt(pages) 04
查看机器可用内存
/proc/28248/>free
total used free shared buffers cached
Mem: 1023788 926400 97388 0 134668 503688
-/+ buffers/cache: 288044 735744
Swap: 1959920 89608 1870312
我们通过 free 命令查看机器空闲内存时,会发现 free 的值很小。这主要是因为,在 linux 中有这么一种
思想,内存不用白不用,因此它尽可能的 cache buffer 一些数据,以方便下次使用。但实际上这些内
存也是可以立刻拿来使用的。
所以 空闲内存 =free+buffers+cached=total-used
2 vmstat
很显然从名字中我们就可以知道 vmstat 是一个查看虚拟内存( Virtual Memory )使用状况的工具,但
是怎样通过 vmstat 来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回顾一下 Linux 中关于虚拟
内存相关内容。
  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值