iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >系统内存耗尽的案例分析
  • 622
分享到

系统内存耗尽的案例分析

2024-04-02 19:04:59 622人浏览 薄情痞子
摘要

    近日遇到一个RAC节点hang导致节点被重启的问题,最后经过分析,发现在系统运行一段时间后,系统内存就会耗尽,原本256G的内存,最后只剩几百M。1. 问题时间段的TOP输出可以

    近日遇到一个RAC节点hang导致节点被重启的问题,最后经过分析,发现在系统运行一段时间后,系统内存就会耗尽,原本256G的内存,最后只剩几百M。

1. 问题时间段的TOP输出可以看到,内存只剩7G,而分析内存问题,TOP输出是不够的,一般情况下,Database的SGA和PGA是内存使用大户,所以,在TOP很难发现谁是使用内存最多的。

除非某些进程内存使用的格外明显

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
linux OSWbb v7.3.3
zzz ***Tue Feb 21 00:00:10 CST 2017
top - 00:00:12 up 14:16, 10 users,  load average: 2.97, 2.31, 2.05
Tasks: 3087 total,  11 running, 3076 sleeping,   0 stopped,   0 zombie
Cpu(s): 11.7%us,  2.8%sy,  0.0%ni, 83.7%id,  0.9%wa,  0.0%hi,  0.9%si,  0.0%st
Mem:    257948M total,   250464M used,     7484M free,      113M buffers
Swap:    65537M total,        0M used,    65537M free,    59868M cached
PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND
1156 oracle    20   0  4232  568  380 R    101  0.0   0:01.67 gzip
20019 root      RT   0  308m  89m  57m S     13  0.0  24:09.96 osysmond.bin
1160 oracle    20   0 11252 3492  836 R      9  0.0   0:00.17 top
49793 oracle    20   0  128g 1.2g 1.2g S      7  0.5  36:00.74 oracle
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2.  通过AWR,可以看到数据库很忙

系统内存耗尽的案例分析

3. 但是Oracle的物理内存使用百分比只有33%,并不是oracle耗尽的主机内存。

 

系统内存耗尽的案例分析

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Memory Statistics
    Begin    End
Host Mem (MB):    257,948.4    257,948.4
SGA use (MB):    77,824.0    77,824.0
PGA use (MB):    8,938.9    6,416.3
% Host Mem used for SGA+PGA:    33.64    32.66
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


4. 注意:一般情况下Oracle的全部进程,如smon, pmon,lgwr等,都会分别使用SGA, PGA,以及一小部分内存作为进程本身使用(这部分一般很小)。

所以,这里的33%,可以代表Oracle全部使用的物理内存。

当然,出现一些bug的情况,如LMS异常使用内存等情况,就另当别论了。

参考案例:
RAC: LMS uses huge memory (Doc ID 1954701.1)
RAC LMS processes using huge PGA memory:
sql> select pid,spid,program,pga_used_mem,pga_alloc_mem,pga_freeable_mem,pga_max_mem from v$process where program like '%LMS%';
PID SPID USER PROGRAM PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM
---------- ------------------------ --------------- ------------------------------------------------ ------------
13 23698 oracle@grid06.prod.quova.com (LMS0) 1.0644E+10 1.6525E+10 0 1.6525E+10
14 23702 oracle@grid06.prod.quova.com (LMS1) 1.0644E+10 1.6525E+10 0 1.6525E+10
15 23706 oracle@grid06.prod.quova.com (LMS2) 1.0407E+10 1.6157E+10 0 1.6157E+10
16 23710 oracle@grid06.prod.quova.com (LMS3) 1.0599E+10 1.6455E+10 0 1.6455E+10
其中涉及BUG 16412220 - DLM USES EXCEESIVE PGA SEND MBUFS AND NOT RELEASE BACK TO PGA MEMORY POOL

5. 分析过程中,也确认了一下,PGA曾经使用过的最大内存情况,可以看到PGA最大也就是使用10G,对应256G物理内存来说,很少。不是问题点

select * from dba_hist_pgastat  
SNAP_ID DBID INSTANCE_NUMBER NAME    VALUE
     1054  602741423    1 aggregate PGA target parameter       5.5835E+10
     1054  602741423    1 aggregate PGA auto target       4.3041E+10
     1054  602741423    1 global memory bound       1073741824
     1054  602741423    1 total PGA inuse       8010343424
     1054  602741423    1 total PGA allocated       9373099008
     1054  602741423    1 maximum PGA allocated       1.0711E+10
     1054  602741423    1 total freeable PGA memory 396361728
     1054  602741423    1 process count     2232
     1054  602741423    1 max processes count     3053
     1054  602741423    1 PGA memory freed back to OS       6.3224E+11
     1054  602741423    1 maximum PGA used for auto workareas  5028864
     1054  602741423    1 maximum PGA used for manual workareas   542720
     1054  602741423    1 bytes processed       1036738560
     1054  602741423    1 cache hit percentage      100
     1054  602741423    1 recompute count (total)     7478
   1055  602741423    2 aggregate PGA target parameter       4.8050E+10
     1055  602741423    2 aggregate PGA auto target       3.7282E+10
     1055  602741423    2 global memory bound       1073741824
     1055  602741423    2 total PGA inuse       6643825664
     1055  602741423    2 total PGA allocated       7995835392
     1055  602741423    2 maximum PGA allocated       9677304832
     1055  602741423    2 total freeable PGA memory 420085760
     1055  602741423    2 process count     2107
     1055  602741423    2 max processes count     2365
     1055  602741423    2 PGA memory freed back to OS       8.2417E+11
     1055  602741423    2 maximum PGA used for auto workareas 33622016
     1055  602741423    2 maximum PGA used for manual workareas   542720
     1055  602741423    2 bytes processed       1.3889E+10
     1055  602741423    2 cache hit percentage      100
     1055  602741423    2 recompute count (total)     8519
Line 384:        997  602741423    2 maximum PGA allocated       1.0699E+10
Line 967:        998  602741423    2 maximum PGA allocated       1.0699E+10   <<<<<<<<<<<<<<<10G
Line 1380:        983  602741423    1 maximum PGA allocated       1.0598E+10
Line 1436:        986  602741423    1 maximum PGA allocated       1.1655E+10
Line 1808:       1056  602741423    1 maximum PGA allocated       1.1055E+10
Line 2029:        997  602741423    1 maximum PGA allocated       1.3501E+10
Line 2350:       1018  602741423    1 maximum PGA allocated       1.0049E+10
Line 2376:        985  602741423    1 maximum PGA allocated       1.1624E+10

6.   最后,查看meminfo,发现了问题,PageTables占用了168G的内存, 加上SGA和PGA的使用,刚刚好250G左右。

PageTables是内存表,是不共享的,在内存很大的情况下,如果很大process访问内存的话,就会每个process都copy一份PageTables,最终导致大量内存自耗的情况

node3_meminfo_17.02.21.0000.dat
zzz ***Tue Feb 21 00:00:10 CST 2017
MemTotal:       264139120 kB  ===> 260 GB
MemFree:         7720156 kB   ===> 7 GB
Buffers:          116576 kB
Cached:         60954824 kB  ===> 60GB (include SGA)
SwapCached:            0 kB
Active:         61768656 kB
Inactive:       12761292 kB
Active(anon):   61284872 kB  ===>
Inactive(anon): 11620960 kB
Active(file):     483784 kB  ===> 500 MB
Inactive(file):  1140332 kB   ===> 1GB
Unevictable:      333944 kB
Mlocked:          223568 kB
SwapTotal:      67110908 kB
SwapFree:       67110780 kB
Dirty:              3764 kB
Writeback:             0 kB
AnonPages:      13793504 kB
Mapped:         58621868 kB
Shmem:          59376696 kB  
Slab:            1354844 kB   ===> 1 GB
SReclaimable:     351496 kB
SUnreclaim:      1003348 kB
KernelStack:       29248 kB
PageTables:     176260660 kB  ===> 168 GB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    199180468 kB
Committed_AS:   88076096 kB

关于PageTables,参考下图

系统内存耗尽的案例分析

7. 检查之前正常时间段的meminfo,可以发现,刚启动数据库时,PageTables只有700M,但是随着进程的增加,很快PageTables就增长上来了

meminfo_17.02.20.1400.dat
zzz ***Mon Feb 20 14:19:05 CST 2017
MemTotal:       264139120 kB
MemFree:        222005744 kB
Buffers:          112332 kB
SUnreclaim:       258840 kB
KernelStack:       11320 kB
PageTables:       747560 kB   <<<<<<<<<<<<<<<
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
Line 1113: PageTables:       752060 kB
Line 1157: PageTables:       769128 kB
Line 1201: PageTables:       769252 kB
Line 1245: PageTables:       758068 kB
Line 1289: PageTables:      2995368 kB   <<<<<<<<<<<<<<<<<
Line 1333: PageTables:      4314036 kB
Line 1377: PageTables:      5717752 kB
Line 1421: PageTables:      6107780 kB
Line 1465: PageTables:      6427636 kB
Line 1509: PageTables:      7307184 kB
Line 1553: PageTables:      8552708 kB
Line 1597: PageTables:      9382396 kB
Line 1641: PageTables:     10236492 kB

8. 既然问题找到了,如何解决呢?

Hugepages是解决这种问题的最好方案。

hugepages的内存块是2M(普通内存块是4K),首先内存管理的成本就降低500倍,而且hugepages的内存表是可以共享的。


9. 最终,配置hugepages,解决问题。

相关hugepages文档,请参考另两篇blog

Hugepages你用了吗?----原理概念篇

Hugepages你用了吗?----测试案例篇

   

  题外话,oswatcher是Oracle分析和解决问题,非常有用的一个工具,在很多问题的分析上,都能提供很大的帮助。 所以强烈建议部署。



您可能感兴趣的文档:

--结束END--

本文标题: 系统内存耗尽的案例分析

本文链接: https://www.lsjlt.com/news/44133.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解分析MySQL8.0的内存消耗
    目录1、innodb_buffer_pool_size 2、innodb_log_buffer_size 1、查看2、在配置文件中写上相关的参数,开启统计,以memory/innod...
    99+
    2024-04-02
  • MySQL内存管理,内存分配器和操作系统的示例分析
    这篇文章主要介绍MySQL内存管理,内存分配器和操作系统的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!当用户使用任何软件(包括MySQL)碰到内存问题时,我们第一反应就是内...
    99+
    2024-04-02
  • 办公园区能耗分析管理系统解决方案
    办公园区能耗分析管理系统解决方案智慧园区能耗综合管理系统解决方案是园区能耗综合管理,通过一套综合能耗监测系统,及时对园区的资源使用情况能耗数据进行分析、整合、展示,使整个园区对资源的使用情况一目了然。同时也可向园区用户公布这些数据信息,使他...
    99+
    2023-06-05
  • java内存模型讨论及案例分析
    常用内存选项 -Xmx: 最大堆大小 -Xms:最小堆大小 -Xss :线程堆栈大小,默认1M 生产环境最好保持 Xms = Xmx java内存研究 内存布局 可见: 堆大小 = 新生代 + 老年代,新生代=E+From Survivo...
    99+
    2023-08-30
    java 开发语言
  • Linux文件系统与持久性内存举例分析
    本篇内容主要讲解“Linux文件系统与持久性内存举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux文件系统与持久性内存举例分析”吧!在 Linux 系统中一切皆文件,除了通常所说的...
    99+
    2023-06-15
  • 高耗能工厂能耗分析系统开发方案,在线监测平台搭建
    高耗能工厂能耗分析系统开发方案,在线监测平台搭建能源管控系统是在企业能源管理系统的基础上发展起来的,不仅融合了 EMS 原有的网络和计算机等现代化能源管理手段,更进一步与炼化生产过程中的模拟技术、优化算法、先进控制技术等相结合,正在逐步发展...
    99+
    2023-06-05
  • MongoDB技术开发中遇到的连接池耗尽问题解决方案分析
    MongoDB技术开发中遇到的连接池耗尽问题解决方案分析摘要:在进行MongoDB技术开发过程中,连接池耗尽是一个常见的问题。本文将针对这一问题进行分析,并提供解决方案。我们将从连接池管理、连接池大小配置、重试机制等多个方面进行探讨,以帮助...
    99+
    2023-10-22
    解决方案分析 MongoDB连接池 耗尽问题
  • C++技术中的内存管理:内存泄漏的典型案例分析
    c++++ 中常见的内存泄漏类型包括栈泄漏、堆泄漏和全局泄漏。本文通过一个实战案例分析了堆泄漏。该示例中,一个动态分配的指针在函数返回时丢失了作用域,但分配的内存未释放,导致内存泄漏。可...
    99+
    2024-05-08
    内存泄漏 内存管理 c++ 作用域
  • JVM系列之内存模型的示例分析
    这篇文章主要介绍JVM系列之内存模型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 内存模型和运行时数据区这一章学习java虚拟机内存模型(Java Virtual machine menory mod...
    99+
    2023-06-15
  • Linux系统中如何查看最消耗CPU内存
    这篇文章主要为大家展示了Linux系统中如何查看最消耗CPU内存,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Linux系统中如何查看最消耗CPU内存”这篇文章吧。1.CPU占用最多的前10个进程...
    99+
    2023-06-28
  • Linux系统如何查看最消耗cpu内存的进程
    这篇“Linux系统如何查看最消耗cpu内存的进程”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“Linux系统如何查看最消耗cpu内存的进程”,小编整理了以下知识点,请大家跟着小编的步伐一步一...
    99+
    2023-06-28
  • 分布式系统负载均衡案例分析
    这篇文章主要介绍“分布式系统负载均衡案例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“分布式系统负载均衡案例分析”文章能帮助大家解决问题。什么是负载均衡?记得第一次接触 Nginx 是在实验室,...
    99+
    2023-06-27
  • CentOS5.x系统内核优化的示例分析
    这篇文章主要为大家展示了“CentOS5.x系统内核优化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CentOS5.x系统内核优化的示例分析”这篇文章吧。主要是针对/etc/sysc...
    99+
    2023-06-10
  • Linux系统中内核调试的示例分析
    这篇文章主要介绍了Linux系统中内核调试的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。调试是软件开发过程中一个必不可少的环节,在 Linux 内核开发的过程中也不...
    99+
    2023-06-12
  • mysql存储过程的案例分析
    这篇文章主要介绍mysql存储过程的案例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、什么是存储过程为以后的使用而保存的一条或多条MySQL语句的集合。存储过程思想上就是数据...
    99+
    2024-04-02
  • FreeRTOS实时操作系统的内存管理分析
    目录前言1.heap_1.c功能简介:2.heap_2.c功能简介:3.heap_3.c功能简介:4.heap_4.c功能简介:5.heap_5.c(V8.1.0新增)前言 本文介绍...
    99+
    2024-04-02
  • 如何解决PHP里大量数据循环时内存耗尽的问题
    本篇文章为大家展示了如何解决PHP里大量数据循环时内存耗尽的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。最近在开发一个PHP程序时遇到了下面的错误:PHP Fatal er...
    99+
    2023-06-17
  • 分布式系统中PHP数组的使用案例分析
    随着互联网的快速发展,分布式系统已经成为了大型应用程序的标配。分布式系统的优势在于能够将应用程序的负载分散到多个节点上,从而提高了系统的可扩展性和可靠性。而PHP作为一种广泛使用的编程语言,在分布式系统中也扮演着重要的角色。本文将重点分析...
    99+
    2023-08-21
    数组 load 分布式
  • Python的内存管理举例分析
    这篇文章主要介绍“Python的内存管理举例分析”,在日常操作中,相信很多人在Python的内存管理举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python的内存管理举例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • Java内存模型的示例分析
    这篇文章主要为大家展示了“Java内存模型的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java内存模型的示例分析”这篇文章吧。1. 为什么要有内存模型?要想回答这个问题,我们需要先弄...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作