热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

swap耗尽导致的系统故障

有些事情不能多念叨,老白前几天发了两篇关于HUGEPAGE的文章,10月30号,一个朋友

有些事情不能多念叨,老白前几天发了两篇关于HUGEPAGE的文章,10月30号,一个朋友的数据库就出问题了。这是一个刚刚上线的新系统,用户把oracle数据库迁移到了VMWARE的虚拟机上,刚刚上线第一天就出现了问题。
当时观察到的现象是SWAP都耗尽了,SYS CPU很高,系统几乎Hang死,登录操作系统都无法完成,只能关电处置。从ALERT LOG上看,10点15分左右的时候出现了系统严重换页:

然后系统就经常出现网络连接报错了。为了确认是不是SWAP耗尽,可以检查该时间点的messages日志:

从中可以看出确实free swap = 0kB,SWAP耗尽了。为什么SWAP会耗尽呢?从上面的信息可以看出,当时是没有配置hugepage的:

而这个系统中的会话数是多少呢?从awr报告中可以看出:

这个系统当时的会话数十分高,达到2000多个。这个系统是一台虚拟机,有128G内存,其中

SGA使用了不到60G,按理说内存是应该够用的。因为没有使用HUGEPAGE,导致了大量的内存被PAGETABLE使用,所以导致了内存耗尽。同时这个系统的VM参数swapiness使用了缺省值100,因此CACHE/BUFFER会占用部分内存。因此要优化这个系统的思路还是很清晰的,调整下面的参数,启用HUGEPAGE就可以了。

重启后系统一切恢复正常。通过检查meminfo文件:

/proc/meminfo 

MemTotal:       131758716 kB

MemFree:        24927812 kB

MemAvailable:   52118112 kB

Buffers:           28884 kB

Cached:         28436296 kB

SwapCached:            0 kB

Active:         13958424 kB

Inactive:       18295280 kB

Active(anon):    3848916 kB

Inactive(anon):     4560 kB

Active(file):   10109508 kB

Inactive(file): 18290720 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:       4194300 kB

SwapFree:        4194300 kB

Dirty:               484 kB

Writeback:             0 kB

AnonPages:       3847020 kB

Mapped:           170540 kB

Shmem:              4764 kB

Slab:             415324 kB

SReclaimable:     201516 kB

SUnreclaim:       213808 kB

KernelStack:       26592 kB

PageTables:       375072 kB

NFS_Unstable:          0 kB

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:    33373496 kB

Committed_AS:    8963948 kB

VmallocTotal:   34359738367 kB

VmallocUsed:      384416 kB

VmallocChunk:   34359310332 kB

HardwareCorrupted:     0 kB

AnonHugePages:         0 kB

CmaTotal:          16384 kB

CmaFree:           12664 kB

HugePages_Total:   35840

HugePages_Free:    20943

HugePages_Rsvd:    15824

HugePages_Surp:        0

Hugepagesize:       2048 kB

DirectMap4k:       20288 kB

DirectMap2M:     3125248 kB

DirectMap1G:    133169152 kB

可以看出,HUGEPAGE已经起作用了。此时PAGETABLE也仅仅使用了不到400M,FREE内存也有24G+,可用内存52G+,系统暂时安全了。不过这个系统还存在一个隐患,就是SWAP只配置了4G,还是存在一定的隐患。为了防止类似问题的发生,还是需要把这个系统的SWAP加大一些。


推荐阅读
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 在安装Oracle 11g时,CentOS 6.5系统提示交换空间不足。本文详细介绍了如何通过两种方法增加交换空间,并提供了具体步骤和命令,帮助用户解决这一问题。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • MySQL PMM:MyISAM 和 Aria 存储引擎的性能优化
    本文探讨了 MyISAM 和 Aria 存储引擎在 MySQL 中的关键性能指标,包括密钥缓冲区效率、页面缓存读写性能以及事务日志同步策略。通过优化这些参数,可以显著提升数据库的整体性能。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • MySQL InnoDB Double Write机制详解
    本文深入探讨了MySQL InnoDB存储引擎的Double Write技术,该技术通过在内存和磁盘上创建数据页的副本,确保了部分写失效(Partial Page Write)情况下的数据完整性和可靠性。同时,文章介绍了InnoDB以页为单位进行读取和更新的机制,并详细解析了Double Write的工作原理。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 本文介绍 SQL Server 的基本概念和操作,涵盖系统数据库、常用数据类型、表的创建及增删改查等基础操作。通过实例帮助读者快速上手 SQL Server 数据库管理。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本文介绍了解决Oracle 10G数据库中ORA-12541 TNS: no listener错误的详细步骤。该错误通常发生在监听器服务未正确启动或配置不当的情况下,文章将指导您通过检查服务状态、配置注册表和启动监听器来解决问题。 ... [详细]
author-avatar
_忘却的思念_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有