衡量内存负载的一个很重要的指标就是页面置换的频率。当linux系统频繁的对页进行换进换出
的时候,说明物理内存不过,不得不进行频繁的置换页面。
使用vmstat(virtual memory
statistics)进行内存负载分析
[oracle@zeng ~]$ vmstat 2 3
procs -----------memory---------- ---swap--
-----io---- --system-- -----cpu-----
r b swpd free
buff cache si so bi
bo in cs us sy id wa st
0 0 0 758668
19688 64508 56 0 0
256 263 118 3 22 74 2 0
0 0 0 758668
19688 64532 0 0 0
0 21 10 0 1 99 0
0
0 0 0 758668
19688 64532 0 0 0
0 19 7 0 1 100 0
0
对于内存负载分析其中关键的字段是:
swpd:虚拟内存的使用总量。
si:每秒从虚拟内存读入内存的大小。
so:每秒从内存写入虚拟内存的大小。
如果这3个字段的值比较高说明出现了内存瓶颈。
也可以使用free 来标识内存的负载情况.
[oracle@zeng ~]$ free
total used free
shared buffers cached
Mem: 911564
155492 756072 0
20564 65696
-/+ buffers/cache: 69232
842332
Swap: 3481592
0 3481592
如果发现linux
系统使用了其中大部分的物理内存。这是正常的linux使用这些物理内存来
提升系统的性能。其中要注意的是swap 那一行.
[oracle@zeng ~]$ free -s 3
total used free
shared buffers cached
Mem: 911564
155748 755816 0
20620 65732
-/+ buffers/cache: 69396
842168
Swap: 3481592
0 3481592
total used free
shared buffers cached
Mem: 911564
155748 755816 0
20620 65732
-/+ buffers/cache: 69396
842168
Swap: 3481592
0 3481592
-s
选项表示间隔多少秒,报告一次内存负载情况。使用Ctrl+C退出。可以把上面
的输出重定向到文件。
也可以通过查看虚拟文件 /proc/meminfo
来查看内存的负载情况。
[oracle@zeng ~]$ cat /proc/meminfo
MemTotal: 911564
kB
MemFree:
239024 kB
Buffers:
23304 kB
Cached:
513724 kB
SwapCached:
0 kB
Active:
216272 kB
Inactive: 387160
kB
如果你在输出中看到SwapFree
字段的值较低,说明你的系统内存负载很高,需要添加
额外的内存,或者监控系统进程对内存的使用情况,把一些不需要的进程结束掉。缓解
内存负载。vmstat,free,cat /proc/meminfo 都可以和watch
一起配合使用。
使用sar
进行实时,当天,当天前本月的其他天的内存负载情况分析。
使用sar 进行历史内存发展分析.
[oracle@zeng ~]$ sar -B -f
/var/log/sa/sa08
Linux 2.6.32-71.el6.i686 (zeng)
03/08/2012 _i686_ (1
CPU)
09:50:01 AM LINUX
RESTART
10:00:02 AM pgpgin/s pgpgout/s
fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s
%vmeff
10:10:01 AM 0.00
79.83 0.00 124.61
0.00 0.00 0.00
0.00 0.00
10:20:01 AM 0.00
1.42 0.00 51.98
0.00 0.00 0.00
0.00 0.00
10:30:01 AM 0.00
113.79 0.00 135.36
0.00 0.00 0.00
0.00 0.00
10:40:02 AM 0.00
0.02 0.00 32.64
0.00 0.00 0.00
0.00 0.00
10:50:01 AM 0.00
0.02 0.00 33.78
0.00 0.00 0.00
0.00
-B 表示报告系统的分析统计情况。
pgpgin/s :每秒从磁盘中调入的大小,bytes。
pgpgout/s :每秒从内存中换出的大小,bytes。
-f 表示要从哪个历史日志文件中读取相应的报告数据。/var/log/sa/saNN
NN表示本月的天数。
[oracle@zeng ~]$ sar -W -f
/var/log/sa/sa13
Linux 2.6.32-71.el6.i686 (zeng)
03/13/2012 _i686_ (1
CPU)
12:57:10 PM LINUX
RESTART
01:00:02 PM pswpin/s
pswpout/s
01:10:02 PM 20.41
0.00
01:20:01 PM 58.31
0.00
01:30:02 PM 19.76
0.00
01:40:01 PM 20.00
0.00
01:50:01 PM 19.75
0.00
02:00:01 PM 19.98
0.00
02:10:01 PM 33.62
0.00
02:20:01 PM 20.94
0.00
02:30:01 PM 20.84
0.00
02:40:01 PM 20.40
0.00
-W 表示报告交换的统计情况。
pswpin/s:每秒置换进来的大小。
pswpout/s:每秒置换出的大小。
如果这两个值较高,说明内存负载大。
使用sar 进行实时内存负载分析.
[oracle@zeng ~]$ sar -W 3 5
Linux 2.6.32-71.el6.i686 (zeng)
03/14/2012 _i686_ (1
CPU)
10:54:01 AM pswpin/s
pswpout/s
10:54:04 AM 22.61
0.00
10:54:07 AM 17.02
0.00
10:54:10 AM 22.38
0.00
10:54:13 AM 16.84
0.00
10:54:16 AM 22.30
0.00
Average: 20.24
0.00
3 表示报告的时间间隔s。
5 表示报告的次数。
使用sar 进行当前内存负载分析。
[oracle@zeng ~]$ sar -W
Linux 2.6.32-71.el6.i686 (zeng)
03/14/2012 _i686_ (1
CPU)
09:48:13 AM LINUX
RESTART
09:50:02 AM pswpin/s
pswpout/s
10:00:01 AM 1.00
0.00
10:10:01 AM 0.61
0.00
10:20:01 AM 19.49
0.00
10:30:02 AM 29.70
0.00
10:40:01 AM 38.41
0.00
10:50:02 AM 20.49
0.00
Average: 18.07
0.00
[oracle@zeng ~]$ sar -r
Linux 2.6.32-71.el6.i686 (zeng)
03/14/2012 _i686_ (1
CPU)
09:48:13 AM LINUX
RESTART
09:50:02 AM kbmemfree kbmemused
%memused kbbuffers kbcached kbcommit
%commit
10:00:01 AM 755660
155904 17.10 20240 65580
176952 4.03
10:10:01 AM 755684
155880 17.10 20628 65732
176056 4.01
10:20:01 AM 209720
701844 76.99 23648 537324
693520 15.79
10:30:02 AM 177240
734324 80.56 24452 568336
693476 15.79
10:40:01 AM 60144
851420 93.40 86464 576484
694376 15.81
10:50:02 AM 59284
852280 93.50 87264 576512
694376 15.81
Average: 336289
575275 63.11 43783 398328
521459 11.87
-r 表示报告内存使用率统计。
字段解释:
kbmemfree 空闲内存大小。
kbmemused 已被使用的内存大小。
%memused 被使用的内存占总内存的百分比。
kbbuffers 被用作buffer 的内存大小。
kbcached 被用作cache 的内存大小。
kbcommit
确保当前的工作负载,所需要的内存大小。以保证不需要使用到swap。
%commit kbcommit 与 RAM+swap
的比值。