您的位置:首页 > 其它

Unix系统资源管理(3)-内存资源使用管理

2009-05-15 13:34 302 查看
内存资源管理

1、 虚拟内存与内存交换和分页:
内存资源对系统性能的影响丝毫不亚于CPU对系统的影响甚至更加重要,因此更应该给与足够的重视。几乎所有的现代操作系统都会使用“虚拟内存”技术来管理系统的内存资源。虚拟内存管理带来的好处在于,任何时候并不是所有进程内存需求总量都是必需的。在内存中只会保留那些需要用到的进程映像,那些暂不需要的进程映像可以暂时存放在磁盘上,以让出内存空间供其它进程使用。那些存放在磁盘上的进程映像,只有在需要时才从磁盘中读入,系统的地址转换机制会自动将进程的虚拟地址映射为真正的物理内存地址。当进程访问可执行映像的一部分或它的当前不再物理内存中数据时,内核就需要把这部分从磁盘读入内存,有时也会将进程不需要的一部分页面换出。
在Unix系统中支持上述虚拟内存管理进程映像换入换出技术通常有两种,即分页和交换。从技术上讲,交换就是把整个进程写到磁盘上,从而释放进程占用的所有物理内存。要换出进程就必须在继续执行时先把该进程重新读入内存。分页就是移动进程的内存片段(单位为页)到磁盘中,从而把物理内存让给别的进程。当进程需要的内存页面没有驻留在物理内存中时,就会发生缺页中断,此时内核缺页中断响应程序就必须从磁盘中换入该页到内存。在正常的虚拟内存系统中,真正的交换发生的很少,一般只有在发生严重内存资源短缺时才会发生。另外在Unix以及Linux系统中当发生内存短缺时,虚拟内存管理器取当前进程的页面进行分页,不过这种分页一开始只是简单的将该页面标记为空闲,并不会发生页面交换或者使用新数据来替换,直到迫不得已的最后一刻才会发生。这样,当再次需要该页面时,如果页面的原始内容仍然在内存中,那么拥有页面的进程可以回收该页面而不需要进行一次磁盘读取从而提高性能,这种技术称为“延迟页面回收”。
2、 监控内存使用和分页活动:
.获得当前系统内存大小:
AIX:lsattr –HE –l sys0 –a realmem
FreeBSD:grep memory /var/run/dmesg.boot
HP-UNIX:dmesg | grep Phys
Linux:free
Solaris:dmesg | grep mem
.监控内存使用:
在Unix系统中要监控内存使用情况最好的办法还是使用vmstat命令,该命令包含了丰富的内存和CPU的使用统计信息,通过分析这些统计输出数据,可以有效地帮助我们定位系统性能和资源使用问题。
在Linux系统中还可以通过使用free –m –o命令来粗略统计内寻使用情况,命令中的-m指定了现实单位(MB),-o指定省略缓冲数据。
vmstat 5 4
procs memory page disk faults cpu
r b w avm fre re at pi po fr de sr d0 d1 d2 d3 in sy cs us sy id
1 0 0 61312 9280 0 0 24 1 2 0 0 4 1 1 12 35 66 16 63 11 26
Procs::统计进程数据
Memory:统计内存使用情况
Page:统计分页情况
Disk:每个设备统计磁盘操作情况
Faults:统计系统中断和上下文切换速率
Cpu:统计CPU使用情况
其中:
W:代表被换出内存的可用进程数量
Avm:代表活动虚拟内存页数
Fre:代表空闲列表中内存的页数
Re:页回收数目,在实际重新使用时要由所有者回收
Pi:换入页数
Po:换出页数
Fr:此间隔时间内虚拟内存管理器释放的内存页
cs 上下文切换数
us 用户时间占CPU执行周期的百分比
sy 系统时间占CPU执行周期的半分比
以上这些指标项都和内存的使用情况相关,如果要分析内存问题,那么这些指标项必需要给与重视和关注。以上的vmstat命令的输出是HP-Unix系统的输出,不同的系统输出会有所不同,在使用前应该仔细阅读用户手册。
.识别内存问题:
如果系统在运行期间长时间或者周期的出现下面的情况,那么证明系统可能遇到了内存资源短缺问题:
(1)、可用内存降低到某个可接受的极限值之下。在交互系统中,可能是5%-10%。
(2)、明显的分页活动,这主要可以从上述命令的po输出项看到,如果po发生急剧增长,那么说明多个进程之间在竞争可用内存,使系统发生分页,这个状况也体现在fre和re输出项数值急剧减少。理想状态下po值应该接近于0。
(3)、w的输出不为0,这说明又可执行的进程被换出内存,如果该值不断增长或数值周期的发生抖动,说明系统内存资源不足。
(4)、上述各种情况有规律的周期性出现,即便是短时间的,也说明内存使用上可能存在问题,要重点关注。
.文件系统缓存:
大多数当前Unix系统都实现了利用空闲内存作为磁盘I/O的数据缓存,即文件系统缓存,以提高I/O性能。它使得最近访问的文件数据保留在内存中一段时间,以便再次访问时可以从内存直接获得,这只要有足够的内存就可以了。不过当系统性需要更多的内存空间时,这部分内存会被首先释放。这种策略保证了本地进程和网络系统的访问操作性能,不过在用于生产计算的系统中最好把这部分内存用于用户作业,很多系统可以按这种方式配置使用内存。
3、 配置虚拟内存管理器:
在大多数Unix系统中都支持动态更改内存管理操作方式的参数来改变虚拟内存管理进程内空间使用行为。大多数系统对内存使用情况都会定义三种情况指标参数,分别为:页面强占、分页、无分页。针对这些情况,不同的系统制定了不同的系统参数、评估标准以及命令,来控制和改变内存使用情况,这就是所谓的配置虚拟内存管理器,通过配置虚拟内存管理器,来解决内存使用问题。
理想状态下内存使用没有分页发生,这也是我们管理系统所要尽力追求的。但是理想终归是理想,内存分页是无法避免的,如果分页动作过多时的可用内存急剧减少,就会出现页面强占。如果页面强占的比值超过了某个极限值(该值可以通过vmstat命令中的po/fr来计算),VMM就会认为系统发生了内存使用颠簸。此时如果开启颠簸恢复,那么系统将会采取挂起进程的方式来解决和恢复颠簸。一般情况下系统会根据进程重新分页比率来选择进程,当一个进程因为先前页面换出而产生的页面错误比值上升到某个特定值时(通常默认为1/4),该进程就被作为获选挂起进程。一个被挂起的进程仍然会占用内存,但是会停止分页,当系统准概况改进并且稳定运行一定时间后(默认为1秒),被刮起的进程会恢复运行。因此如果启用颠簸恢复,可能会使系统的响应性大为降低。所以通常最好是防止内存过度使用,而不要启用内存颠簸恢复。不过这并不绝对,一般在非常繁忙系统负荷非常重的系统上,颠簸恢复很有用应该启用它,在启用时一定要仔细阅读使用手册。下面我们将分不同的几个系统讨论如何控制系统虚拟内存管理。
.AIX系统:
在AIX系统中可以使用schedtune命令来调整虚拟内存管理器参数,当不带参数使用这个命令时,会输出当前的参数值,这些参数值中与系统颠簸相关的参数如下:
-h:标号SYS当写入页数/强占页数>1/h的数值时,就定义为此时内存过度使用。设置该值为0,将停用颠簸恢复。
-p:标号proc在系统颠簸中,当重新分页数/页面错误>1/p的数值时,挂起该进程。默认值为4。
-m:标号multi在系统出现颠簸时为多少进程处于运行。默认为2。
-w:标号wait系统颠簸结束后,重新恢复刮起进程之前需要等待的秒数。默认为1。
-e:标号grace重新激活一个进程后再次挂起该进程之前等待的秒数。默认为2。
在AIX系统中还可以通过命令vmtune来定制页面替换算法,vmstat也位于/usr/samples/kernel目录中,如果不带选项该命令将会列出各种内存管理参数值,这些参数值中用于内存管理的选项如下:
-f:标号minfree空闲链表最小值,如果空闲链表大小低于该极限值,那么VMM就必须从正在运行的进程中强占内存页面来填充空闲链表。默认为120页。
-F:标号maxfree,当空闲链表的大小达到或超过这个值时,就停止强占内存页面。默认为128页。
-p:标号minperm,极限值强占计算用页面和文件页面。默认为18%-20%,取决于内存大小。
-P:标号maxperm极限值,仅强占文件页。默认为75%-80%.
第2对参数制定了一个特定值范围,用来选出在填充空闲链表时被强占的内存页面。在AIX系统中区分对待两种内存页面,即计算页面(进程执行时动态分配的页面)和程序代码段。除此之外所有其他内存页面成为文件页面(它们都有磁盘文件支持)。默认时VMM会强占用于计算的页面,其次为文件页面。具体机制如下:
如果内存中有两种类型内存页,当文件页百分比<minperm或者文件页面重分页率>=计算页面重分页率时,发生页面强占。
如果内存中只有文件页面,当minperm<文件页百分比<maxperm并且文件页面重分页率<计算页面重分页率时,发生页面强占;或者当文件页百分比>maxperm时,发生页面强占。
.HP-UNIX系统:
在HP-UNIX系统中内核参数使用kmtune命令来设置,分页由三个变量来控制,按如下方法:
Free memory>=lostfree时页面强占停止。
Desfree<=free memory<lostfree时页面强占发生。
minfree<=free memory<desfree时采取颠簸恢复。
.Linux系统:
在Linux系统中通过修改/proc/sys及其子目录中的文件值来改变内核参数,从而控制系统内存管理行为。对于内存管理为vm子目录之下,如下是一些有关内存管理的重要文件:
freepages:该文件包含三个值,指定空闲页面的最小级别、空闲页面的较低和空闲页面的预期级别。如果低于最小级别,将拒绝进程的额外内存申请;在最低级别和较低级别之间,将发生内存强占;在较低级别和预期级别之间,将进行分页。在预期级别之上,页面强占将会停止。默认值取决于系统物理内存大小。
buffermem:指定文件系统缓冲区要使用的内存量。由三个值分别代表:最小量、借用量和最大量。默认值为2%、10%、60%。当内存短缺而缓冲区尺寸大于借用量百分比时,将强占缓冲区直到低于该百分比。如果在分配内存时要优先应用于缓冲区,可增加借用量和最大量。如果优先应用于内存,可以减小最大量并把借用量设置为接近最大量。
overcommit_memory:设置该文件中的值为1,可以使进程分配大于实际可提供的内存量(默认为0)。
可以通过echo命令来改变这些文件中的值如:
echo “5 33 80” > /proc/sys/buffermem
另外请注意以上的修改和配置一定要在有充分理由和进行过充分测试的基础上才能进行,否则很可能适得其反或者造成宕机,还好这些设置在系统重起后会自动恢复为默认值。
4、 管理分页空间:
在大多数Unix和Linux系统中,都会有独特的、专用的磁盘分区用来保存从内存中写出的页面,这种分区成为交换分区。对于真正的生产环境,如果运行需要很多内存程序,那么交换空间的大小应当是物理内存的2-3倍,如果可用的交换空间被耗尽,有一些进程就会被结束掉。
.列举交换分区:
AIX: lsps –a
HP-UNIX:swapinfo –t –a –m
Linux: cat /proc/swaps 还可以使用swap –l列出当前交换分区使用情况
Solaris: swap –l
.激活交换分区:
一般情况下交换分区在启动时会自动激活,对于HP-Unix、Linux、FreeBSD系统交换分区列在/etc/fstab文件系统配置文件中。也可以使用命令:swapon –a > /dev/console 2&1来手动激活交换分区,其中-a代表激活所有交换分区。
对于AIX系统分区文件列在/etc/swapspaces中,在该文件中的交换分区在启动时由/etc/rc中的swapon –a命令激活。
5、 文件系统分页:
在很多新型的Unix系统中都支持文件系统分页,即分页到普通文件系统中指定的文件中,这就提供了很大的灵活性。页面文件可以根据需要创建或者删除,但也会增加分页操作的消耗。
.HP-Unix系统:
在HP-UNIX系统中使用如下命令swapon [-m min] [-l limit] [-r reserve] dir来制定一个目录作为交换设备,来初始化文件系统分页,其中-m指定用于分页的文件系统块的最小数目,-l指定了用于文件系统分页的文件系统最大块数目,-r指定了保留空间。例:swapon –l 5000 –r 10000 /chem该命令初始化/chem文件系统用于分页,限制文件页面的小为5000块,保留10000块用于将来的分配。
在HP-UNIX中还可以创建新的逻辑卷作为额外的分区空间如:
lvcreate –l 125 –n swap2 –C y –r n /dev/vg01
在/dev/vg01设备上创建交换逻辑卷swap2大小为125MB,并使用连续空间分配且禁用不良块定位。注意在逻辑卷上没有任何文件系统被创建。
swapon /dev/vg01/swap2 激活交换逻辑卷
.Linux系统:
在Linux系统中使用下面命令来创建页面文件:
dd if=/dev/zero of=/swap1 bs=1024 count=8192 ---创建8MB的文件swap1
mkswap /swap1 8192 ---是文件成为交换设备
sync;sync ---进行系统同步
swapon /swap1 ---激活页面文件
.AIX系统:
在AIX系统中分页空间被组织为专用的分页逻辑卷。像普通逻辑卷一样,只要分页卷组中有未分配的逻辑区,分页空间就可根据需要动态增长。可以使用mkps命令创建分页空间如:
mkps –a –n –s 50 chemg在卷组chemg中创建一个200M的分页空间,-a表示地动后自动激活,-n表示创建后自动激活,-s指定逻辑分区个数默认为每个逻辑分区4M,因此上述命令创建一个200M的分页空间。还可以使用chps命令来扩展现有分页空间如:chps –s 10 paging01,该命令将会添加40M大小的空间到paging01分页空间中。AIX中创建的分页空间默认为名都为pagingnn其中nn为一两位数字如01。
删除分页区:
在Linux或者HP-UNIX系统中要通过改变有关分页空间的系统配置文件来解除激活的分页空间,然后中心启动,启动后原有的激活分页空间将不再被激活,这时可以通过rm命令删除。
在AIX中,分页空间被解除激活后,可以使用rmps命令来删除
如:
chps –a –n paging01 解除激活(将分页空间从/etc/swapspaces中删除)
rmps paging01 删除分页空间文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: