虚拟内存管理:VMM=Virtual Memory Manager
观察进程内存使用情况:
ps aux 观察参数%mem:内存使用百分比 RSS:实际使用内存
vmstat free的单位为块,缺省值为4096bytst
slibclean 清除处理程序遗留的旧分页信息
页面空间的大小: 512+(实际内存大小-256M)*1.25
Pagingsize= 512+(1024-256)*1.25=1472M
当内存是4-8G时,观察页面空间,最好是4G;使用率超过70%,需要增加页面空间。
vmstat 查看页面空间
#vmstat 2 5
#lsps -a
#lsps -c hd6
#Psname:Pvname:Vgname:Size:Used:Active:Auto:Type:Chksum
hd6:hdisk0:rootvg:32:1:y:y:lv:0
#lsps -s
Total Paging Space Percent Used
2048MB 1%
slibclean 清除内存中未用的代码或数据模块
lsdev -Cc memory 显示系统中的内存
# lsdev -Cc memory
L2cache0 Available L2 Cache
mem0 Available Memory
lsattr -El mem0 -H 显示内存的属性获得内存的大小
# lsattr -El mem0 -H
attribute value description user_settable
goodsize 6912 Amount of usable physical memory in Mbytes False
size 6912 Total amount of physical memory in Mbytes False
lsattr -El L2cache0 显示二级缓存的大小
# lsattr -El mem0 -H
attribute value description user_settable
goodsize 2048 Amount of usable physical memory in Mbytes False
size 2048 Total amount of physical memory in Mbytes False
# lsattr -El L2cache0 -H
attribute value description user_settable
size 1920 Size of L2 cache in Kbytes False
svmon -G
添加页面空间: smitty mkps
[Entry Fields]
Volume group name datavg
SIZE of paging space (in logical partitions) [4]
PHYSICAL VOLUME name
Start using this paging space NOW? no
Use this paging space each time the system is no
RESTARTED?
最好不用 mkps -s4 -n -a rootvg hdisk1
s4只PG的大小4个LP的大小 n 创建后立即激活;a 系统启动时激活
smitty----ssm---lvm---paging space
激活页面空间:
swapon -a 激活所有页面空间
swapon /dev/paging01 激活单个页面空间
smitty swapon
关闭页面空间
5L以前版本
chps -a n myps 系统启动不激活
shutdown -Fr
lsps -a
5L以后版本
swapoff /dev/paging00
smitty swapoff
修改页面空间的属性:
smitty chps Number of additional logical partitions:需要额外增加的LP,
Number of logical partitions to remove: 需要减少的LP
Use this paging space …… is RESTARTED: Yes,重启后加载
chps -s 4 myps 增加4个LP
chps -d 3 myps 减少
chps -a y myps 启动激活
chps -s LPs(number) -d LPs(number) -a y|n Pagingspace Name
etc/swapspaces文件
删除页面空间:
sydumpdev -l 查看基本dump 设备 删除hd6
sysdumpdev -P -p /dev/paging00 改变dump device
AIX 5L后
swapoff /dev/paging00
rmps paging00
smitty rmps
lsattr -El sys0 -a realmem 显示真实内存大小KB
lscfg | grep proc 要显示您系统上的处理器数量
lscfg prtcfg 获得系统的详细配置
uname -p 显示系统的芯片类型。例如,PowerPC。
uname -r 显示操作系统的版本号。
uname -s 显示系统名称。例如,AIX。
uname -n 显示节点名称。
uname -a 显示系统名称、节点名称、版本、计算机 ID。
uname -M 显示系统型号名称。例如,IBM, 9114-275。
uname -v 显示操作系统版本。
uname -m 显示运行系统的硬件的计算机 ID 编号。
uname -u 显示系统 ID 编号。
mount -V cdrfs -o ro /dev/cd0 /cdrom Mount CD-Rom
instfix -ik IY24043 系统上是否安装了某个修复程序
instfix -i | grep ML 系统上是否安装了所有维护级文件集
lppchk -v 证文件集是否有必需的先决条件和是否已完全安装
lsps -a 确定已分配和使用的分页空间量
migratepv -l hd6 hdisk0 hdisk1 移动hd6从HDISK0到HDISK1
AIX 操作系统中的 Paging Space 是很重要的设备,Paging Space 使用率过高将影响系统整体性能,甚至会造成系统挂起。文中对 Paging Space 使用率过高的常见原因进行了分析,并给出了相应的解决方案。
AIX操作系统中Paging Space是很重要的设备,当系统中Paging Space使用率过高、系统内存不足时,将影响系统的整体性能,甚至会造成系统的挂起。针对这种情况,通常可以靠增加Paging Space来加以缓解;但是当Paging Space已经相当大,而Paging Space使用率仍旧居高不下时,则需要通过进一步的分析来找出原因并加以解决。文中分析了几种Paging Space使用率持续增长直至过高的常见原因,并给出了相应的解决方案,以确保Paging Space使用率被控制在安全的范围内。
1 Paging Space的创建原则
AIX中Paging Space大小确定的指导原则如下:
系统实际内存小于64MB, paging space= 2 * RAM ;
系统实际内存在 64MB to 256MB 之间, Page Space = RAM size + 16MB ;
系统实际内存大于 256MB , Page Space = 512 + ( RAM - 256 ) * 1.25 ;
当内存超过4GB时,则需要根据实际情况来定,一般可初始3GB, 然后观察paging space的使用情况,如果使用率超过70%, 则需要增加paging space 。
此外在创建Paging Space时还应遵循以下原则以提高性能:
创建的数量应尽可能的多;
每个Paging Space的大小应该相同;
每个Paging Space应尽可能的分配在不同的硬盘上。
AIX中可以通过命令lsps -s查看Paging Space的使用情况。列Total Paging Space给出的是系统总的Paging Space空间大小,Percent Used则表示已被占用的Paging Space的百分比。
命令lsps -a可以用来查看Paging Space的分布情况
2 文件型内存对Paging Space使用率的影响
在AIX系统中,内存可以简单的分为两类:计算型内存和文件型内存。类似大量文件类操作,如压缩、数据库的dump/load等操作会大量占用文件型内存。如果按照系统缺省的配置,文件型内存最多会占用到内存总量的80%,由于文件型内存占用并不主动释放,从而可能造成内存资源的短缺及Paging Space使用率过高。
命令topas可以用来查看文件型内存占用内存情况,在MEMORY一栏中的%Noncomp显示的是文件型内存的占用百分比。
如果文件型内存所占比例很高,而Paging Space使用率居高不下时,可以通过降低minperm、maxperm的参数值来进行调优,减少文件型内存可占用的份额。
在进行调整前,首先通过命令vmo -a/vmtune -a来查看目前的参数值;minperm及maxperm的缺省值分别是30%和80%。
随后根据当前的值来确定minperm、maxperm新的参数值,并通过命令vmo 及参数p和P来进行设定。如需将minperm、maxperm的值分别设为15%和30%可用命令vmo -p 15 -P 30来实现。
因为参数maxperm充当的是软限制,所以文件型内存的占用率依旧可以超过maxperm的设定值。如果需要进行强制限制,则需要将参数strict_maxperm的值设为1,该参数的缺省值为0,但此方法需谨慎使用。
3 应用程序内存泄露对Paging Space使用率的影响
应用程序的内存泄露也是造成Paging Space使用率不断增长的另一常见原因,此类情况的解决方法主要是找出内存泄露的应用,然后进行修正或安装补丁。
以下方法可用来找出发生内存泄露的应用:
该命令每m秒钟按降序列出前n个最耗内存进程。为了便于分析,可以将结果输出到文件中,然后对内容进行分析,从而找出内存泄露的应用。
下例中命令svmon -P -t 10 -i 5的结果被输出到文件svmonresult.txt中,该命令每5秒种输出一次最耗内存的前10个进程。
找出发生内存泄露的应用后可自行进行修正或查找相关的补丁进行安装。
4 数据库参数配置对Paging Space使用率的影响
在装有数据库的系统环境中,数据库相关参数的设置不当也容易造成Paging Space的占用率过高。以DB2为例,因为 DB2 使用自己的缓冲池进行数据缓存,所以其所能占用的内存量不受参数maxperm的控制,而是由自身的参数值来决定。数据库占用的内存过多并且不及时释放的话同样会造成Paging Space使用率的持续增长乃至耗尽,本节中采用DB2的设置为例来对此类情况进行说明。
就Paging Space使用率而言,DB2的相关参数中需要特别关注的有DB2MEMDISCLAIM、DB2MEMMAXFREE、NUM_POOLAGENTS、 ESTORE_SEG_SZ及NUM_ESTORE_SEGS。其中DB2MEMDISCLAIM、DB2MEMMAXFREE、NUM_POOLAGENTS与DB2中代理的私有内存相关,而ESTORE_SEG_SZ、NUM_ESTORE_SEGS则决定扩展缓冲池的大小。
AIX中,注册变量DB2MEMDISCLAIM指明当程序停止时DB2 UDB是否应该释放其占用的全部或部分内存。DB2MEMDISCLAIM保持缺省值YES,则在DB2MEMMAXFREE的值为空时,程序结束后释放所有相关内存,否则只保留DB2MEMMAXFREE值大小的内存量,该值缺省为8M。如果DB2MEMDISCLAIM的值被改为NO,则程序结束后内存不会被释放。
NUM_POOLAGENTS指定了DB2中可以保留的空闲代理的最大数目,如果该值过大,将会有大量的内存被空闲代理占用。如NUM_POOLAGENTS的值为125,DB2MEMMAXFREE的值为8M,在DB2MEMDISCLAIM为YES时将最多有约1G的内存被空闲代理占用。
因此,当Paging Space使用率偏高时,可以尝试查看DB2MEMDISCLAIM、DB2MEMMAXFREE、NUM_POOLAGENTS的值来确保没有过多的内存被DB2代理所占用。如果空闲代理占用内存太多,则需要调整DB2MEMMAXFREE、NUM_POOLAGENTS的值来削减。
DB2MEMDISCLAIM、DB2MEMMAXFREE的值可用db2set命令来查看和设定;NUM_POOLAGENTS的值则可以通过以下步骤来查看和修改:
DB2中除了主缓冲池之外还经常用到扩展缓冲池,扩展缓冲池的大小也是决定内存使用量的一个重要因素。扩展缓冲池(EXTENDED STORAGE)充当的是缓冲池中被换出页的辅助缓存,它的存在可以减少I/O操作,提高查询速度。通常扩展缓冲池占用的内存不会主动释放,因此如果扩展缓冲池过大,随着时间的增加、缓冲池占用的内存量的不断增长,有相当大的可能造成内存资源的短缺、Paging Space使用率过高。
扩展缓冲池的大小是由参数ESTORE_SEG_SZ、NUM_ESTORE_SEGS共同决定的,通过以下命令可以查看它们的值:
扩展缓冲池最多占用内存的计算方式如下:
假如系统中共有3个配置相同的DB,ESTORE_SEG_SZ的值为16000,NUM_ESTORE_SEGS的值为65,页面大小为4K,则扩展缓冲池最多可占用的内存为:
ESTORE_SEG_SZ、NUM_ESTORE_SEGS的参数值设定可以通过如下命令来实现:
DB2中还有其他一些参数决定着内存的使用情况,但是当发现内存占用后不释放的情况时,可以考虑首先查看本节中提到的相关参数。
对于其他的数据库,同样也需要注意一些类似参数值的设置,避免造成对内存的过量占用,从而造成对系统整体性能的影响。