- 浏览: 1098498 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:352988
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
在运行Oracle 数据库的linux 服务器上,某个时间段的每分钟负载会突然上升到40 以上,在进程队列里看到kswapd0 出现,导致数据库无响应,持续时间数分钟。
对于应用而言,这个时间段有明显的停滞感,像系统已经挂掉了一样。
如果这是发生在Oracle RAC 环境中某一个节点上,那么这个节点就可能会重启。
这属于非常严重和致命的问题。
(miki西游 @mikixiyou 文档原文链接: http://mikixiyou.iteye.com/blog/1573976 )
1. 问题
环境是这样,数据库服务器的内存96GB ,操作系统linux redhat 5 ,采用hugepages 管理部分内存,运行一个数据库实例,数据库系统版本为10.2.0.4 。
数据库实例中sga_max_size 的值为48GB, pga_aggregate_target 的值为24GB 。
还有个实例为ASM ,用于存储数据库的数据文件等。
性能摇摆期间的top 显示的结果如下:
top - 13:21:11 up 49 days, 21:52, 4 users, load average: 42.76, 14.42, 6.12
Tasks: 471 total, 26 running, 444 sleeping, 0 stopped, 1 zombie
Cpu(s): 87.2%us, 12.2%sy, 0.0%ni, 0.1%id, 0.1%wa, 0.1%hi, 0.2%si, 0.0%st
Mem: 98989932k total, 98152840k used, 837092k free, 2056k buffers
Swap: 50331636k total, 12554316k used, 37777320k free, 37715224k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1057 root 20 -5 0 0 0 R 100.2 0.0 991:39.65 [kswapd0]
zzz ***Fri Jun 29 13:21:35 CST 2012
top - 13:21:39 up 49 days, 21:52, 4 users, load average: 28.99, 13.85, 6.19
Tasks: 471 total, 2 running, 468 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.2%us, 8.4%sy, 0.0%ni, 91.3%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 98989932k total, 98104680k used, 885252k free, 3028k buffers
Swap: 50331636k total, 12801004k used, 37530632k free, 37606456k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1057 root 20 -5 0 0 0 R 100.3 0.0 992:07.44 [ kswapd0 ]
12530 root 15 0 13032 1400 812 R 0.7 0.0 0:00.03 top -b -c -n 2
1376 root 10 -5 0 0 0 S 0.3 0.0 22:00.23 [scsi_eh_1]
可以明显看到服务器的一分钟负载上升的很厉害,都到42 了,而正常才4 左右。在运行的进程队列中,看到 kswapd0 。
操作系统每过一定时间就会唤醒kswapd ,看看内存是否紧张,如果不紧张,则睡眠,在 kswapd 中,有2 个阀值, pages_hige和pages_low,当空闲内存页的数量低于 pages_low 的时候, kswapd进程就会扫描内存并且每次释放出32 个free pages,直到 free page 的数量到达pages_high.
通过检查vmstat 的输出结果,发现在那个时间段内,系统的页面换入换成现象很严重。
zzz ***Fri Jun 29 13:22:05 CST 2012
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
7 0 13022188 919216 3064 37429916 27 17 203 559 0 0 3 1 95 1 0
4 0 13040224 914712 3116 37411924 680 2196 1450 2844 1387 1654 13 10 77 0 0
2 0 13058536 919060 3216 37395064 104 1444 1118 1492 1235 839 16 9 75 0 0
zzz ***Fri Jun 29 13:22:35 CST 2012
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
9 0 13573224 912300 3356 36885376 27 17 203 559 0 0 3 1 95 1 0
8 0 13573088 913408 3368 36885224 276 0 3740 5643 1643 7707 31 9 60 0 0
1 0 13572892 913300 3368 36885920 252 0 374 3955 2209 9632 14 9 77 0 0
就是说,问题是内存紧张了,导致了交换分区频繁使用到。kswapd0 进程需要换入换出虚拟内存磁盘空间,导致了系统出现短时间摇摆。
操作系统的物理内存有25576 个page 没有被使用,所以肯定会有kswap 进程执行虚拟内存换页操作。
2. 分析
问题既然发生在内存使用上,但我们的服务器物理内存配置是96GB ,数据库实例的内存配置也是合理的。
但在vmstat 确实有交换分区的换页情况发生。
我们需要分析的是,这96GB 的内存都是如何使用的呢?
在环境介绍中,我们介绍了使用大内存管理模式管理内存的。因此,我们首先查询系统内存信息中关于大内存的使用情况。
[root@db3 ~]# cat /proc/meminfo |grep -i huge
HugePages_Total: 25576
HugePages_Free: 25517
HugePages_Rsvd: 4
Hugepagesize: 2048 kB
哇,看到结果大吃一惊。大内存有25517 个页面没有使用,一个页面大小是2MB ,也就是说有51034MB 内存被大内存管理机制限制了,属于空闲状态,而系统上其他进程也无法使用到。只有59 个页面合计118MB 的内存使用到了。
(注,为什么新进程如何使用到该内存区域,而是使用虚拟内存空间呢?这是一个疑问。可能是新数据库实例的SGA 已经使用了剩余的48 内存,还不够用,所以用到虚拟内存。)
在系统配置中,hugepages 的大小设置为25576 ,计48GB 内存,是物理内存的一半。
[root@db3 ~]# sysctl -p
vm.nr_hugepages = 25576
使用ipcs –m 看到oracle 用户下使用的共享内存段如下所示:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0xb0af65c0 3047451 oracle 600 132120576 13
0x4507bd98 3702814 oracle 640 51541704704 132
最大的51541704704 字节,计49154MB 。这个SGA 中所有 'shared_pool_size' , 'large_pool_size' , 'java_pool_size' , 'streams_pool_size' , 'db_cache_size' 大小之和。
Oracle 用户的共享内存段完全没有使用到hugepages 。
再检查系统日志,发现之前有一个oracle 的实例使用到该hugepages ,而现在的实例是后来启动的,所以使用到另外的内存。
后来前一个实例关闭了,但hugepages 中的内存空间却一直空闲下来,新的实例也不能使用到这个内存空间。
3. 解决
问题分析到这里,其实已经有解决方法了。
我们重启了一下数据库实例,就可以使用该hugepages 内存空间。
如果实例不能重启,我们也可以通过设置nr_hugepages 的值降低设置。但这只是个人建议,不排除有新的问题出现。
4. 技术hugepages
如果需要增大hugepages 大小,需要重启操作系统。
如果您认为这就是一个内存参数值,可以使用sysctl –w 修改的。这点是不正确的。这里涉及到内存管理方面,hugepages 需要大量连续的内存区域,否则严重的内存碎片会影响到系统的性能。
网友 Eagle Fan 的weblog 中一篇,详细介绍了该技术,链接如下:
http://www.dbafan.com/blog/?p=435
linux 的hugepages 技术随着近年大内存服务器陆续上市,逐步推广使用,因此关于hugepages 的问题也随着而来。
本文是在hugepages 使用中遇到的问题的解决分析总结。
发表评论
-
Oracle分区表的分区交互技术实现数据快速转移
2013-01-22 11:48 14807有一个需求,将某业务表的某个时间点之前的记录转移到它的历史 ... -
等待事件enq TX row lock contention分析
2013-01-17 17:16 33295在Oracle数据库性能报告AWRRPT分析时,发现top ... -
Oracle的UNDO表空间管理总结
2013-01-14 15:06 12987UNDO是Oracle中的一个很 ... -
Oracle在不同windows系统中的迁移
2013-01-09 15:41 3806在Windows操作系统环境下 ... -
Oracle 10.2.0.1在windows 2008上安装失败经历
2013-01-07 10:29 8705这两天遇到这个一个项目上的数据库迁移的问题。原来的环境是数据库 ... -
所有的物化视图刷新脚本
2012-12-28 13:59 0select 'execute dbms_mview.refr ... -
Oracle数据库的SQL性能问题分析
2012-12-27 15:31 5289在Oracle 10.2.0.4数据库中,有一个SQL执行缓慢 ... -
db block gets和consistent gets的分析
2012-12-26 18:09 0在Oracle的文档中有这样一段解释: db block g ... -
创建增量同步Oracle物化视图问题
2012-12-25 14:07 15312我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某 ... -
查归档日志文件每小时生成量
2012-12-18 16:13 10792在O racle数据库中,通过v$archived_lo ... -
如何删掉临时表空间的文件
2012-12-18 15:40 0Unlike Oracle datafiles which m ... -
Oracle sql性能诊断暨event 10046和10053使用
2012-12-17 10:24 0早上em grid control监控显示数据库的负载增加,其 ... -
查LOB字段占用的空间大小
2012-12-13 16:00 4579查询Oracle表中LOB字段的占用空间大小。表中每一个LOB ... -
Oracle Data Guard的重做日志传输和应用状况监控
2012-12-04 14:05 4079这是一个用来监控Oracle Data Guard环境下从主库 ... -
Oracle sql loader使用速成
2012-11-30 14:14 4949Oracle SQL LOADER是Oracle的 ... -
Oracle 11g2的监听器配置
2012-11-29 14:34 4391Oracle的监听器服务注册 ... -
Deleting archivelog on physical standby with RMAN in Oracle 10g
2012-11-28 13:25 0Turns out to be quite easy ... -
to_char将number转成string的小技巧
2012-11-27 14:14 10638很多数据转换处理操作时,会遇到将0.007007040000转 ... -
to_date转成字符串时ORA-01843 not a valid month 问题分析
2012-11-26 16:38 29307(注,本文三度易稿) 在开发Oracle SQL或PL/SQL ... -
Data Guard 10g 的保护级别为RESYNCHRONIZATION问题
2012-11-25 11:01 1922Oracle的data guard创建完成 ...
相关推荐
在IT运维领域,当遇到"**kswapd0进程占用CPU非常高**"的情况时,这通常意味着系统的内存管理出现了问题。kswapd0是Linux内核的一个后台进程,它的主要职责是负责内存交换,即当物理内存不足时,将不活跃的页面(内存...
本文主要分析了Linux中的交换进程kswapd的代码实现,探究了kswapd在Linux系统中的作用和工作机制。 在Linux系统中,kswapd是后台核核心进程,也是Linux内存管理策略的重要组成部分。Linux中的内存管理采用分页机制...
但是,这也会导致系统在内存不足时可能会出现OOM问题。 设置swappiness参数为0,并不意味着系统不会出现swap操作。因为系统还会在direct reclaim时进行swap操作,以确保系统的稳定性。 Swappiness参数是Linux内核...
kswapd进程会在后台运行,监控系统的内存使用情况,并释放不再使用的内存。但是,如果kswapd进程不能及时释放不再使用的内存,可能会导致cpu load瞬间飙高。 本文将探讨可能导致cpu load瞬间飙高的原因,并讨论解决...
这通常发生在系统急需内存时,通过`__alloc_pages_slowpath -> __alloc_pages_direct_reclaim -> __perform_reclaim -> try_to_free_pages`等函数,查找并释放不常用页面。 内存回收的过程涉及到多个LRU(Least ...
1. 使用`top`命令时,第一行显示的是系统当前时间、系统运行时间、登录用户数以及系统负载。第三行则详细展示了CPU资源的整体使用情况。通过按键`P`,我们可以按CPU利用率对进程进行降序排序,从而快速定位CPU占用高...
Swap机制的引入主要是为了解决内存资源紧张的问题,避免因内存耗尽而导致的系统崩溃或进程被OOM(Out Of Memory)杀手杀死。 当系统内存紧张时,Linux内核会采取两种策略:内存回收和OOM。内存回收涉及到释放缓存和...
尽管这些策略在Linux上已经得到了实现,并证明是有效和可靠的,但在特定的工作负载和系统环境下,它们的性能可能不尽如人意。因此,针对Linux内存管理系统的研究提出了一个新的方向:利用遗传算法进行自适应的内存...
外部碎片则出现在可变大小分配单元的系统。紧缩技术通过移动已分配区域来集中空闲空间,消除碎片。 5. **分页技术**:分页存储管理将逻辑空间分割成等大的页,内存分割成块,页与块对应,通过页表进行地址转换。...
今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了。 重启服务器后,使用 top 命令看看是哪些进程消耗那么大的 ...当 mysql 的 CPU 消耗降下来之后,出现了两个奇怪的进程:kswapd0 和 events/0。
根据给定的文件信息,我们可以深入探讨Linux系统与性能监控的关键知识点,这涵盖了从系统监控的基本概念到具体的工具使用,以及对CPU、虚拟内存、I/O和网络监控的深度解析。 ### Linux系统与性能监控概览 #### ...
对换守护进程kswapd负责管理和执行页面交换,以优化内存使用并维持系统稳定运行。 综上所述,操作系统中的存储管理是复杂且至关重要的,涉及多种策略和技术,以优化内存使用、提高系统性能并确保进程安全高效地运行...
此外,过度依赖Swap可能导致磁盘I/O负载增加,从而降低整体系统性能。 了解这些内存管理知识对于理解和优化系统的性能至关重要,特别是在资源有限或者高并发的环境中,合理地分配和回收内存能有效避免系统崩溃,...
`kswapd`进程负责监视内存使用情况,根据`swappiness`参数调整页面交换的策略。 此外,Linux支持多种文件系统,如FAT、ext2、ext3、ext4、ReiserFS和JFS等。虚拟文件系统(VFS)作为接口,允许用户透明地访问不同...
- **kswapd**:内核进程,监控内存使用情况,当可用内存低于设定阈值时启动内存回收。 - **pdflush**:负责将脏页(已修改但未写回磁盘的内存页)写回磁盘,防止内存过度压力。 3. **问题识别**: - 高频率的上...
例如,在内存子系统调优中,配置bdflush和kswapd可以帮助系统更有效地管理内存和交换空间;同时,合理设定内核的交换动作参数,能够有效提升系统的内存性能。 在文件系统调优部分,需要在安装Linux系统之前做好硬件...
过长的运行队列通常意味着系统负载过高。 - **CPU利用率**:衡量CPU活跃程度的重要指标。 #### 五、CPU性能监控案例分析 1. **持续高CPU利用率**:当CPU长期处于高利用率状态时,可能会导致系统响应变慢。此时应...
在Linux系统中,文件系统的结构、中断处理机制、信号处理以及进程调度都是系统管理和日常使用中的核心概念。 1. 在Linux中断处理机制中,中断处理通常分为两部分:顶半部分(Top Half)和底半部分(Bottom Half)。...
通过对应用类型的识别,可以更好地理解系统负载的来源,并采取相应的监控策略。 ##### 1.2 基准统计的确定 基准统计是指在正常运行条件下,系统各项指标的表现情况。这些数据包括但不限于CPU利用率、内存使用情况...