Linux性能监控之Memory篇

首先说说虚拟内存和物理内存:

虚拟内存就是采用硬盘来对物理内存进行扩展,将暂时不用的内存页写到硬盘上而腾出更多的物理内存让有需要的进程来用。当这些内存页需要用的时候在从硬盘读回内存。这一切对于用户来说是透明的。通常在Linux系统说,虚拟内存就是swap分区。在X86系统上虚拟内存被分为大小为4K的页。

每一个进程启动时都会向系统申请虚拟内存(VSZ),内核同意或者拒就请求。当程序真正用到内存时,系统就它映射到物理内存。RSS表示程序所占的物理内存的大小。用ps命令我们可以看到进程占用的VSZ和RSS。

# ps –aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

daemon 2177 0.0 0.2 3352 648 ? Ss 23:03 0:00 /usr/sbin/atd

dbus 2196 0.0 0.5 13180 1320 ? Ssl 23:03 0:00 dbus-daemon-1 --sys

root 2210 0.0 0.4 2740 1044 ? Ss 23:03 0:00 cups-config-daemon

root 2221 0.3 1.5 6108 4036 ? Ss 23:03 0:02 hald

root 2231 0.0 0.1 2464 408 tty1 Ss+ 23:03 0:00 /sbin/mingetty tty1

内核会定期将内存中的数据同步到硬盘,这个过程叫做Memory Paging。同时内核也要负责回收不用的内存,将他们分给其他需要的进程。PFRA算法(Page Frame reclaim algorithm)负责回收空闲的内存。算法根据内存页的类型来决定要释放的内存页。有下列4种类型:

1. Unreclaimable –锁定的,内核保留的页面;

2. Swappable –匿名的内存页;

3. Syncable –通过硬盘文件备份的内存页;

4. Discardable –静态页和被丢弃的页。

除了第一种(Unreclaimable)之外其余的都可以被PFRA进行回收。与之相关的进程是kswapd。在kswapd中,有2个阀值,pages_hige和pages_low。当空闲内存页的数量低于pages_low的时候,kswapd进程就会扫描内存并且每次释放出32个free pages,直到free page的数量到达pages_high。具体kswapd是如何回收内存的呢?有如下原则:

1.   如果页未经更改就将该页放入空闲队列;

2.   如果页已经更改并且是可备份回文件系统的,就理解将内存页的内容写回磁盘;

3.   如果页已经更改但是没有任何磁盘上的备份,就将其写入swap分区。

# ps -ef | grep kswapd

root 30 1 0 23:01 ? 00:00:00 [kswapd0]

在回收内存过程中还有两个重要的方法,一是LMR(Low on memory reclaiming),另一个是OMK(Out of Memory Killer)。当分配内存失败的时候LMR将会其作用,失败的原因是kswapd不能提供足够的空闲内存,这个时候LMR会每次释放1024个垃圾页知道内存分配成功。当LMR不能快速释放内存的时候,OMK就开始其作用,OMK会采用一个选择算法来决定杀死某些进程。当选定进程时,就会发送信号SIGKILL,这就会使内存立即被释放。OMK选择进程的方法如下:

1.   进程占用大量的内存;

2.   进程只会损失少量工作

3.   进程具有低的静态优先级;

4.   进程不属于root用户。

进程管理中另一个程序pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘。

# ps -ef | grep pdflush

root 28 3 0 23:01 ? 00:00:00 [pdflush]

root 29 3 0 23:01 ? 00:00:00 [pdflush]

每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘。这个比率是可以调节的,通过参数vm.dirty_background_ratio。

# sysctl -n vm.dirty_background_ratio

10

Pdflush同PFRA是独立运行的,当内核调用LMR时,LMR就触发pdflush将垃圾页写回硬盘。

我们来看内存监控的一个例子,用vmstat命令的输出如下:

# vmstat 3
procs          memory            swap     io        system      cpu
r b  swpd   free   buff cache   si so    bi   bo    in   cs   us sy id wa
3 2 809192 261556 79760 886880 416 0    8244  751   426  863  17 3   6 75
0 3 809188 194916 79820 952900 307 0    21745 1005  1189 2590 34 6  12 48
0 3 809188 162212 79840 988920 95  0    12107 0     1801 2633 2  2   3 94
1 3 809268 88756 79924 1061424 260 28   18377 113   1142 1694 3  5   3 88
1 2 826284 17608 71240 1144180 100 6140 25839 16380 1528 1179 19 9  12 61
2 1 854780 17688 34140 1208980 1   9535 25557 30967 1764 2238 43 13 16 28
0 8 867528 17588 32332 1226392 31  4384 16524 27808 1490 1634 41 10  7 43
4 2 877372 17596 32372 1227532 213 3281 10912 3337  678  932  33 7   3 57
1 2 885980 17800 32408 1239160 204 2892 12347 12681 1033 982  40 12  2 46
5 2 900472 17980 32440 1253884 24  4851 17521 4856  934  1730 48 12 13 26
1 1 904404 17620 32492 1258928 15  1316 7647  15804 919  978  49 9  17 25
4 1 911192 17944 32540 1266724 37  2263 12907 3547  834  1421 47 14 20 20
1 1 919292 17876 31824 1275832 1   2745 16327 2747  617  1421 52 11 23 14
5 0 925216 17812 25008 1289320 12  1975 12760 3181  772  1254 50 10 21 19
0 5 932860 17736 21760 1300280 8   2556 15469 3873  825  1258 49 13 24 15

其中:swpd为虚拟内存的使用大小单位为KB.

Free为空闲的物理内存的大小(KB);

Buff为内存中缓存的大小,这些缓存是read()和write()函数使用的(KB);

Cache进程的地址空间在物理内存中的映射(KB);

So为从内存写入swap空间的数据大小(KB);

Si为从swap空间写入内存的数据大小(KB);

Bo为从内存写入硬盘或swap的页数量;

Bi为从硬盘或swap写入内存的页数量;

从上面的输出我们可以看到:

1. 大量的disk pages(bi)被写入内存,这点可以从cache的不断增长来证明;

2. 在这个过程中,物理内存始终保持在17MB虽然不断有数据从硬盘读入来消耗内存;

3. 为了保持可用物理内存,kswapd不断的从Buff中偷取内存,来加入空闲列表,buff不断减小;

4. 同时kswapd不断的将垃圾页写入swap空间,我们可以看到so和swpd不断增加.

现在我们可以得出结论,这是一个IO Bound的程序,并且造成了虚拟内存的大量使用,加大物理内存可以改善性能.

总结下来:

1. 当一个系统有越少的页错误(所需数据不在内存,需要从硬盘读入),就会有越好的响应时间.因为内存比硬盘快得多.

2. Free memory数量低是一个好的征兆,因为证明了cache在起作用,除非同时存在大量的bi和so.

3. 如果一个系统有持续的si和so,就说明系统的内存是一个瓶颈.

转自:http://blog.163.com/[email protected]/blog/static/96061992201210101619125/

时间: 2024-10-27 19:19:49

Linux性能监控之Memory篇的相关文章

Linux性能监控——CPU,Memory,IO,Network

版权声明:本文由刘爽原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/107 来源:腾云阁 https://www.qcloud.com/community 一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%. 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是

Linux系统和性能监控之CPU篇

Linux系统和性能监控之CPU篇 性能优化就是找到系统处理中的瓶颈以及去除这些的过程.本文由sanotes.net站长tonnyom在2009年8月翻译自Linux System and Performance Monitoring系列文章.本文是系列的第一篇,讲述CPU方面的性能监控. 作者:tonnyom来源:sanotes.net|2010-12-24 13:25 移动端 收藏 分享 CTO训练营 | 12月3-5日,深圳,是时候成为优秀的技术管理者了 编者注:本文由sanotes.ne

Linux 性能监控 —— 磁盘 I/O

零. 前言 如果从磁盘(disk)中读取/写入数据, CPU 就会处于空闲状态, 大大浪费了这段等待时间 CPU 的计算能力. 所以SSD. 缓存. 内存. 寄存器之类的设计就是为了减少 CPU 的等待时间, 释放计算能力. 可以看出业界对磁盘 I/O 的重视, 以及磁盘 I/O 对系统的影响之大. 一.  如何查看磁盘 I/O 在 Linux 平台或者 BSD 平台下, 借助 top 命令可以清楚看到磁盘 I/O 情况. 二. 如何衡量磁盘 I/O 存在瓶颈 磁盘 I/O 是否存在瓶颈取决于当

Linux性能监控

Linux性能监控的目的是找到系统的瓶颈,并且调节系统来设法消除这些瓶颈.我们在监控性能的时候重点在于监视一下子系统: 1.CPU 2.MEMORY 3.IO 4.NETWORK 但这些系统都是彼此依赖,不能单独只看其中一个.当一个系统负载过重时往往会引起其它子系统的问题,比如说:       ->大量的读入内存的IO请求(page-in IO)会用完内存队列:        ->大量的网络流量会造成CPU的过载:        ->CPU的高使用率可能正在处理空闲内存队列:      

六个 Linux性能监控命令行工具

六个 Linux性能监控命令行工具  1.htop - http://htop.sourceforge.net/一个可以让用户与之交互的进程查看器.作为文本模式的应用程序,主要用于控制台或 X 终端中.当前具有按树状方式来查看进程,支持颜色主题,可以定制等特性. 2.dstat - http://dag.wieers.com/home-made/dstat/一个用来替换vmstat, iostat, netstat, nfsstat 和ifstat 这些命令的工具,是一个全能系统信息统计工具. 

Linux性能监控与分析之

Linux性能监控与分析之---CPU CPU性能指标 1. 用户进程使用CPU的比率 2. 系统进程使用CPU的比率 3. WIO, 等待I/O 而是CPU处于空闲状态的比率. 4. CPU的空闲率 5. CPU用于上下文交换的比率 6,nice 7,real-time 8,运行进程队列的长度 9,平均负载 Linux下常用监控CPU性能的工具有 1. iostat  www.ahlinux.com 只能查看所有CPU的平均信息 2. vmstat 能查看所有CPU的平均信息, 能查看CPU队

vmstat和iostat命令进行Linux性能监控

这是我们正在进行的Linux命令和性能监控系列的一部分.vmstat和iostat两个命令都适用于所有主要的类unix系统(Linux/unix/FreeBSD/Solaris). 如果vmstat和iostat命令在你的系统中不可用,请安装sysstat软件包.vmstat,sar和iostat命令都包含在sysstat(系统监控工具)软件包中.iostat命令生成CPU和所有设备的统计信息.你可以从这个连接中下载源代码包编译安装sysstat,但是我们建议通过YUM命令进行安装. 在Linu

【转载,整理】Linux性能监控

一. 比较全的linux性能检测网站 1. 很好的网站,原文:http://os.51cto.com/art/201402/430050.htm 监测 cpu.内存.网络.IO等命令及工具   2. Sysstat 一种常用在Linux系统服务器中的软件工具包,可以用来监控服务器的性能.比如可以监控CPU.硬盘.网络等数据,我们可以用来进行分析服务器的性能和资源的使用效率.老左将在这篇文章中学习.整理Sysstat监控工具包的安装和常用的使用命令. 二. linux性能检测软件 1. linux

Linux 性能监测:Memory

这里的讲到的 “内存” 包括物理内存和虚拟内存,虚拟内存(Virtual Memory)把计算机的内存空间扩展到硬盘,物理内存(RAM)和硬盘的一部分空间(SWAP)组合在一起作为虚拟内存为计算机提供了一个连贯的虚拟内存空间,好处是我们拥有的内存 ”变多了“,可以运行更多.更大的程序,坏处是把部分硬盘当内存用整体性能受到影响,硬盘读写速度要比内存慢几个数量级,并且 RAM 和 SWAP 之间的交换增加了系统的负担. 在操作系统里,虚拟内存被分成页,在 x86 系统上每个页大小是 4KB.Linu