知识大全 Oracle9i进程内存占用问题解决方法

Posted

篇首语:莫道桑榆晚,为霞尚满天。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle9i进程内存占用问题解决方法相关的知识,希望对你有一定的参考价值。

Oracle9i进程内存占用问题解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   年 月 日 发现Oracle公布了有关此问题的一些说明和部分解决方法 大致的内容是 AIX 可以打个补丁来获得更好的效果 而其他版本只能通过设置以下环境变量来减少消耗     AIXTHREAD_SCOPE=S;export AIXTHREAD_SCOPE    NUM_SPAREVP= ; export NUM_SPAREVP(AIX 和 )     详细内容参考Metalink文档 Memory Consumption on AIX 此文档是 DEC 创建的 最近更新 JAN      年 月 日 我们拿了一台新的M 安装了AIX 开始测试这一结果 设置这些环境可以起一定的作用 但没有明显效果     根据文档说明 安装AIX APAR IY 补丁 执行如下步骤     从这里下在相关脚本    ) save your current version of $ORACLE_HOME/oracle    ) create a working directory $ORACLE_HOME/relink    ) cd to $ORACLE_HOME/relink    ) unzip the relinking package    ) link $ORACLE_HOME/bin/oracle to /oracle    ) run the script /genscript to generate some required files and scripts    ) run /relink sh to generate the new oracle binary oracle new $$    ) copy oracle new $$ to $ORACLE_HOME/bin/oracle and verify that the permissions match the original oracle binary     验证结果很明显 内存占用改善了很多 没有打补丁的一个空连接server进程占用最低都是 M多 而现在只有 M多 改善了 %!  hawk > ps v (没打补丁的空连接)  PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM MAND   A : xx oracle  localhost> ps v (打过补丁的空连接)  PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM MAND   A : oracleor    虽然说这里ps v看到的结果不是很准确 但是二者使用相同的标准计算 并不影响对比结果 而且和我们使用NMON的统计结果也是一致的     至此 Oracle i在AIX上的内存占用问题算是基本解决了 前后经历了快一年的时间 这恐怕是我关注一个Oracle问题时间最久的一次 理由很简单 这是工作需要 生产需要 要知道这么随便一搞 给我们剩下了很多麻烦 之前为了允许更多的连接 我们不得不将内存从 G扩容到 G 现在一降下来可以为企业节省很多硬件投入 毕竟这玩艺内存卖的还是挺贵的 而这是无成本的     过去这段时间 我工作的其中之一就是在为一个电信业务系统的升级做准备 在两台IBM M ( CPU* G MEM AIX L)上对ORACLE I RAC做详细的测试工作 开始的时候一切都很顺利 但后来却遇到一个难题 就是Oracle i的单个进程占用的内存过多     经过一段时间测试 在先后解决了其它问题后 最后的主要问题集中到了内存上 ORACLE i在AIX L上每个进程都占用了很多内存 一个空连接进程就会用到 M多的内存 而众所周知 Oracle i的单个进程占用的内存一般是 ~ M 所以这就引起了我们的高度重视 因为如果按此计算 个连接什么事不做就要 G内存了!而我们的实际应用连接数比这还要多     在出现问题之后 我先后对ORACLE进行了不同方向的调整 也问过了一些朋友以及IBM和ORACLE的技术支持 翻遍了国内外我所知道的论坛 都没有看到任何有意思的消息 更不要说解决方案了 这让我开始怀疑是Oracle i的BUG 果然在 月底Oracle公布了这个BUG(我是在 月底看到的 因为 月份的大部分时间在处理别的事)!造成这个问题是因为AIX上C的编译器问题 使得本来可以共享的部分 最后都没有共享 造成每个进程都浪费了大约 MB的内存 详情参见本文最后BUG 的描述     为了验证确实是AIX的问题 我在另外一台HP UX B 上进行了同样的测试 结果显示Oracle i的单个进程仍然占用很多内存!经过分析发现这是由于两方面原因造成的      Oracle i的初始化参数CURSOR_SPACE_FOR_TIME从默认的FALSE改成了TRUE      HP UX上的Oracle i将虚拟内存数据页(virtual memory data pages)的默认值从原来的D( KB)改成了L( GB)     使用/usr/bin/chatr $ORACLE_HOME/bin/oracle查看oracle程序的内部属性 我们发现虚拟内存的text段从原来的 M改成了 M 而DATA段从原来的 M改成了L(最大可达到 GB) 经过测试验证 DATA段这个参数直接影响了Oracle i单个进程所占用的内存的大小 对于空连接来说 MB是扩展的临界点 因为空连接是扩不到 MB( MB的下一个可设DATA段大小)     Oracle i和Oracle i虚拟内存默认值对比    i     shared library binding:  deferred  global hash table disabled shared vtable support disabled segments:  index type address flags size    text z r c M    data m M  executable from stack: D (default)kernel assisted branch prediction enabled lazy swap allocation for dynamic segments disabled     i     shared library binding:  deferred  global hash table disabled shared vtable support disabled segments:  index type address flags size    text z r c M    data m L (largest possible)executable from stack: D (default)kernel assisted branch prediction enabled lazy swap allocation for dynamic segments disabled    我们可以使用/usr/bin/chatr +pd newsize $ORACLE_HOME/bin/oracle来更改DATA段的可用内存大小 对于text段的内存大小我们也可以使用chatr +pi来改 但gototop并不建议你这样做 因为text段是给命令用的     至此 我就在想了 自然在HP UX上是因为这个原因造成的 那么在AIX上除了C编译器的原因之外 是否也存在着同样的问题呢?到目前为止 gototop还没有的等到任何可靠的消息来证明这一点 但我猜想可能性很大     附 BUG: 描述   >  问题陈述:    ORACLE ON AIX DOES NOT SHARE MANY CONST STRUCTS PER PROCESS MEMORY OVERHEAD          *** / / : am ***     =========================       PROBLEM:      Clear description of the problem encountered:     Oracle on IBM AIX platforms (AIX L and ) use a large amount of memory per dedicated connection For Oracle on AIX L the memory required per idle Oracle process appears to be about Mb A significant portion of this is related to non shared const structures (probably about Mb)       This bug is to track the issue of the non shared const structures cha138/Article/program/Oracle/201311/18891

相关参考

知识大全 用java监视系统进程的两个解决方案

  用第一个java虚拟机启动另一个虚拟机并用第一个虚拟机的java程序去测试另一个虚拟机上java程序运行时的内存CPU资源占用情况  解决问题的限制和条件  》两个虚拟机运行在同台Windows_

知识大全 SQL Server占用内存的解决方法

SQLServer占用内存的解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  经常有网友会

知识大全 关于MSSQL占用过多内存的问题

关于MSSQL占用过多内存的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  经常看见有人问M

什么是互斥?什么是“饿死”问题?如何处理和解决饿死问题?

  互斥是指多个进程竞用资源时的使用次序和排它性占用或封锁资源的条件。  在分布式多机系统中,由于互斥算法不完善或资源分配存在问题而使某一进程总是得不到它所需的资源,始终在互斥区外等待,进程得不到运行

什么是互斥?什么是“饿死”问题?如何处理和解决饿死问题?

  互斥是指多个进程竞用资源时的使用次序和排它性占用或封锁资源的条件。  在分布式多机系统中,由于互斥算法不完善或资源分配存在问题而使某一进程总是得不到它所需的资源,始终在互斥区外等待,进程得不到运行

解决死锁问题的方法主要有几种?

  防止死锁的方法就是从某一环节上打破其死循环,这就要使其三个条件至少有一个不能满足。可分别采取以下的措施。  (1)进程被挂起后释放其占有的资源,即强制使挂起的进程放弃其占用的资源,等待下一次重新申

解决死锁问题的方法主要有几种?

  防止死锁的方法就是从某一环节上打破其死循环,这就要使其三个条件至少有一个不能满足。可分别采取以下的措施。  (1)进程被挂起后释放其占有的资源,即强制使挂起的进程放弃其占用的资源,等待下一次重新申

知识大全 使用共享内存在进程之间传送数据

  今日在项目中碰到一个问题就是一个程序的两个进程之间需要频繁的传送数据具体的来说是一个需要频繁的发送数据而另一个实例需要频繁的访问获得这些数据当然这个问题是有很多解的例如数据库再例如文件可是因为这个

知识大全 Oracle9i的物理内存管理

Oracle9i的物理内存管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Oraclei以

知识大全 Oracle9i在AIX上的性能调整--内存篇

Oracle9i在AIX上的性能调整--内存篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!内存访