AIX 中 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中还有其他一些参数决定着内存的使用情况,但是当发现内存占用后不释放的情况时,可以考虑首先查看本节中提到的相关参数。
对于其他的数据库,同样也需要注意一些类似参数值的设置,避免造成对内存的过量占用,从而造成对系统整体性能的影响。
转自《http://www.ibm.com/developerworks/cn/aix/library/au-cn-pagingspace/》
AIX 中 Paging Space 使用率过高的分析与解决的更多相关文章
- (转)AIX 中 Paging Space 使用率过高的分析与解决
AIX 中 Paging Space 使用率过高的分析与解决 原文:https://www.ibm.com/developerworks/cn/aix/library/au-cn-pagingspac ...
- 性能测试分析过程(二)cpu 使用率过高的分析方法
Linux 系统下 cpu 使用率过高的分析方法 1.通过 top 命令可以很明显查看出哪个进程耗cpu比较高 2. ps -mp 25147-o THREAD,tid,time\top -Hp pi ...
- MySQL 实例空间使用率过高的原因和解决方法
用户在使用 MySQL 实例时,会遇到空间使用告警甚至超过实例限额被锁定的情况.在 RDS 控制台的实例基本信息中,即会出现如下信息: 本文将介绍造成空间使用率过高的常见原因及其相应的解决方法.对于M ...
- Windows服务器java.exe占用CPU过高问题分析及解决
最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题. 在硬着头皮查找 ...
- 【译】Asp.net core应用在 Kubernetes上内存使用率过高问题分析
原文:https://blog.markvincze.com/troubleshooting-high-memory-usage-with-asp-net-core-on-kubernetes/ ps ...
- sql server 的cpu使用率过高的分析
有哪些SQL语句会导致CPU过高? 1.编译和重编译 编译是 Sql Server 为指令生成执行计划的过程.Sql Server 要分析指令要做的事情,分析它所要访问的表格结构,也就是生成执行计划的 ...
- 工具运行过程中,CPU占用过高的分析定位
之前使用Java Swing开发了一款设备档案收集工具.支持多台设备同时收集,每个设备使用一个线程.在同时收集多台设备信息时,发现CPU占用率居然达到了97%,而且高居不下.显然这样的性能是令人无法忍 ...
- Android中使用Handler造成内存泄露的分析和解决
什么是内存泄露?Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用所指向 ...
- 在Service中抛出异常事务未回滚问题分析与解决
1.问题提出:在service中写方法时,抛出了一个Exception, 本来目的是为了让事务回滚, 但事实上没有回滚,产生了脏数据.代码如下:@Override@Transactionalpubli ...
随机推荐
- [Java] SSH框架笔记_框架整合示例(一)
本文描述的是框架SSH集成的示例,由于在这个过程中有一些小的细节容易被遗忘,特别撰写了一篇小的博文来记录这个过程,希望对自己以及后来者能够起到积极意义. 本文中使用的框架和版本号为: struts-2 ...
- ajax步骤和理解
步骤: 1.利用html+css来实现页面,表达信息: 2.用XMLHttpRequest和web服务器进行数据的异步交换 3.运营js操作DOM,实现动态局部刷新: XMLHttpRequest对象 ...
- c#入门实例
1.概述 C#是一个语言,.net是一个平台,上面支持用C#或者VB.Net写代码 2.注释 若注释量较少用 // 开头,大量用 /* */ 表示 输出结果 3.命名空间 所谓n ...
- 一路踩过的坑 php
1.数据表唯一索引 (两列字段,组合索引) 遇到的情形:项目搭建新测试环境(其实就是所谓的灰度 与线上一致的一个环境):从线上拉回来代码搭建的,数据也是来自于线上数据,但是由于线上数据有部分为机密数 ...
- 两种局部刷新UITableView的方法的使用条件
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //1.取消选 ...
- Stimulsoft Reports筛选数据来绑定显示2个报表
今天用Stimulsoft Reports做报表的时候,遇到一个问题,需要一个报表中显示2个报表视图,我在百度和博客园中搜索了一下,发现这方面的资料很少,我自己最后把问题解决了之后,整理了一下给大家分 ...
- SQL Server 2012入门图解:建表、备份、还原
一.建立你的第一个数据库和表 例:建立一个用于描述一个学校学生情况的数据库.把它命名为School.并且要在School数据库下建立保存学生信息的表Student.在可视化界面下,我们通常这样操作 ...
- Android之聊天室设计与开发
我们要设计和实现一个有聊天室功能的APP,需要服务器不断读取来自客户端的信息,并即时地将信息发送给每个连接到本服务器上的客户端,每个客户端可以向服务器发送消息,并不断地接收来自服务器的消息,并将消息显 ...
- 批处理脚本修改hosts文件指定域名解析IP
现在很多网站都是前后台分开部署的,这样做是相对安全的.就算黑客拿到了前台shell也找不到后台的管理地址,增加安全性. 大家应该知道hosts文件的功能吧,用户在访问网站的时候 需要把域名解析成IP地 ...
- 入门必须掌握8个DOS命令
一,ping 它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP ...










