全部博文(33)
2008年(33)
分类:
2008-09-04 14:46:11
内存管理
简介
主要从九个方面进行描述
1. HP-UX系统怎么执行内存管理
2. 涉及内存管理的主要性能问题描述
3. 描述 UNIX Buffer Cache
4. 描述 sync 进程
5. 识别内存瓶颈的征兆
6. 识别全局和进程内存指标
7. 用性能分析工具分析内存管理问题
8. 描述恰当的内存瓶颈的更改措施
9. 描述serialize命令的功能
内存管理理解
我们通过TOP,vmstat 等内存查看命令总有一个VM值,这个值的大小就是:
Virtual memory=physical memory+swap space (at disk)
内存管理是kernel的一个子系统 ,它负责管理计算机的主内存(物理内存 RAM)
当Process(进程) 需要空间的时候,kernel 就会分配memory page (缺省大小4kb)给进程,当主内存(物理内存)free空间不够的时候,kernel 将会把一些pages 拷贝到swap space ,来释放主内存的空间,因此Swap space 可以看着为主内存的一个扩展
注:当进入到swap space 进程需要执行时,必须要被重新page in 到主内存后,才能执行。
怎样确保主内存有最小的free 空间呢?
通过kernel 通过vhand 守护进程来搞定这件事情。
Vhand 守护进程负责保持对主内存有一个最小的free空间。通过监控未使用的pages,尽量保持free的pages数量大于某个阀值。Kernel通过paging 和deactivation的综合方式来进行free memory数量的管理。
Free memory的大小分别通过三个阀值进行确认,三个阀值分别为:LOTSFREE ,DESFREE,MINFREE
free memory 大于 LOTSFREE 将不产出paging
free memory 小于LOTSFREE 将产出paging
free memory 小于 DESFREE 这个过程不是一个稳定的过程,相比较开始时的paging 频率,此时的paging的频率将大大的提高,直到free memory 大于 DESFREE
当free memory 小于MINFREE
一些process (进程)将deactivation,当一个process 被deactivation ,process 将被放入deactivation queue(队列),vhand 守护进程将page out处于deactivation queue 里process 的所有pages(包括u-area) swaping 到swap partition。
当free memory 大于 MINFREE,这些process 又将自动的被reactivate。当process 被reactivate后,仅仅 u-area 立即被page in。别的pages 将在需要时候才能被faulted in。
注:HP-UX 11.00 LOTSFREE ,DESFREE,MINFREE 值是可以通过内核参数调整的
在早于HP-UX 11.00版本LOTSFREE ,DESFREE,MINFREE值是不能手工调整的,都是使用HP 的推荐值。
Buffer Cache
因为硬盘通常是瓶颈,系统尽量减少硬盘的访问次数。因此大部分常访问的文件就缓存在内存的某个区域,这个区域就叫buffer cache。
只要记住buffer cache如下几条描述,就很明白了。
Buffer cache 用来从硬盘缓存大量的常用访问文件
Buffer cache 仅仅适用于文件系统访问,不适用于裸设备。
Buffer cache 的值通过内核参数 dbc_min_pct 和dbc_max_pct进行控制
Buffer cache 加速了文件系统的访问速度。
Buffer cache 的值是可变化的,变化范围在dbc_min_pct 和dbc_max_pct之间。
当需要缓存更多的文件时,buffer cache 将增大,但是不能超过dbc_max_pct设定值(以物理内存的百分比计算)。
当系统别的应用需要更多的内存时,buffer cache 也可以适当的减小。但是不能少于dbc_min_pct设定值(以物理内存的百分比计算)。
记住:通常一个东西都具有双面性的,我们不要只记得buffer cache 大点的好处,其实害处也是有的。
通常一个较大的buffer cache 可以缓存更多的文件,它将缩短文件系统的访问时间,但是这将耗费更多的内存,从而别的应用使用的内存将减少。
注意:
1.如果buffer cache 设置过大,将可能造成应用突然中断,因为此时在进行buffer cache 文件到硬盘的存写。
2. Buffer cache 的值通过内核参数 dbc_min_pct 和dbc_max_pct进行控制的前提是bufpages和nbuf 内核参数的值设置为“