此异常查到网上有一篇不错的文章例如以下:

08:56:03,273 INFO – 运行Do func=[GetSeqNo] keyNam=[keynam];KeyVal=[PRYPAYBILSYSTRACKNO20130125];SeqNam=[keyval];tblName=[pryseqrec];len=[6];circleString=[1];colName=[null]
2 08:56:03,296 ERROR – 获取数据库连接失败! : Cannot create PoolableConnectionFactory (ORA-01034: ORACLE not available
3 ORA-27123: unable to attach to shared memory segment
4 Linux Error: 22: Invalid argument
5 Additional information: 7
6 Additional information: 2162692
7 )

OK,我看到了ORA-27123:unable to attach to shared memory segment错误,我猜想多数和内存有关。

这是一台CentOS 5.5上跑着Oracle 11.2.0.1的PC SERVER。

首先我查了下告警日志,发现近期有不少进程死掉现象,例如以下:

 1 ...
2 Fri Jan 25 00:00:46 2013
3 Process m001 died, see its trace file
4 Fri Jan 25 00:07:36 2013
5 Process W000 died, see its trace file
6 Fri Jan 25 01:00:48 2013
7 Process m000 died, see its trace file
8 Fri Jan 25 01:07:45 2013
9 Process W000 died, see its trace file
10 Fri Jan 25 01:55:40 2013
11 Process m000 died, see its trace file
12 Fri Jan 25 02:07:50 2013
13 Process W000 died, see its trace file
14 Fri Jan 25 02:35:28 2013
15 Process m000 died, see its trace file
16 Fri Jan 25 03:05:45 2013
17 Process m000 died, see its trace file
18 Fri Jan 25 03:37:56 2013
19 Process W000 died, see its trace file
20 Fri Jan 25 03:58:01 2013
21 Process W000 died, see its trace file
22 Fri Jan 25 04:05:34 2013
23 Process m000 died, see its trace file
24 Fri Jan 25 04:25:51 2013
25 Process m000 died, see its trace file
26 Fri Jan 25 05:00:07 2013
27 Process m001 died, see its trace file
28 Fri Jan 25 05:09:22 2013
29 Process m000 died, see its trace file
30 Fri Jan 25 05:45:57 2013
31 Process m000 died, see its trace file
32 Fri Jan 25 06:01:04 2013
33 Thread 1 cannot allocate new log, sequence 1781
34 Private strand flush not complete
35 Current log# 1 seq# 1780 mem# 0: /opt/11g/oracle/oradata/orcl/redo01.log
36 Thread 1 advanced to log sequence 1781 (LGWR switch)
37 Current log# 2 seq# 1781 mem# 0: /opt/11g/oracle/oradata/orcl/redo02.log
38 Fri Jan 25 06:20:45 2013
39 Process m000 died, see its trace file
40 Fri Jan 25 07:00:15 2013
41 Process m001 died, see its trace file
42 …...

网上对Process m001 died,see its trace file和Process W0000 died,see its trace file类似的问题有非常多讨论,基本都是由于进程数达到上限了。

    我也查了下数据库參数设置和当前情况:

1 SQL> col RESOURCE_NAME for a20
2 SQL> col LIMIT_VALUE for a20
3 SQL> select resource_name,MAX_UTILIZATION,LIMIT_VALUE from v$resource_limit where resource_name in ('processes','sessions');
4
5 RESOURCE_NAME MAX_UTILIZATION LIMIT_VALUE
6 -------------------- --------------- --------------------
7 processes 281 500
8 sessions 282 792

--可见离上限还有非常大距离。问题不是它导致的。

--查看了下top,当前server也非常空暇,free查看内存使用情况,也没有问题。

1 [root@orcl ~]# free -m
2 total used free shared buffers cached
3 Mem: 12172 10245 1926 0 363 8288
4 -/+ buffers/cache: 1593 10579
5 Swap: 5535 68 5467

--我手动切换日志而且checkpoint了下,发现告警日志里又出现了Process died。

 1 SQL> alter system switch logfile;
2
3 System altered.
4
5 SQL> alter system checkpoint;
6
7 System altered.
8
9 Process m001 died, see its trace file
10 Fri Jan 25 10:09:34 2013
11 Process m000 died, see its trace file
12 Fri Jan 25 10:17:39 2013

--我查了下/dev/shm的情况,尽管在物理内存12G的server上仅设置6G认为有点小。但眼下情况看来并不会导致太大问题。

1 [root@orcl ~]# df -Th /dev/shm
2 文件系统 类型 容量 已用 可用 已用% 挂载点
3 tmpfs tmpfs 6.0G 8.1M 6.0G 1% /dev/shm

--接着我查了下shmmax值设置。这个參数定义了共享内存段的最大尺寸(以字节为单位)。假设设置不当,我们就会遇到ORA-27123。

1 [root@orcl ~]# more /etc/sysctl.conf | grep shmmax
2 kernel.shmmax = 1073741824
3
4 [root@orcl ~]# more /proc/sys/kernel/shmmax
5 1073741824

--我发现此參数设置了1G,我认为在一个使用AMM的系统(这是我没全然检查之后的想法)上这个值应该须要上调的。

我没立即更改,继续查问题。

    --OS上找了以上内容之后我又回到数据库。看了下内存相关设置,这一查吓一跳。本以为使用AMM的系统竟然颠覆了我得想法:

1 SQL> show parameter memory
2
3 NAME TYPE VALUE
4 ------------------------------------ ---------------------- ------------------------------
5 hi_shared_memory_address integer 0
6 memory_max_target big integer 0
7 memory_target big integer 0
8 shared_memory_address integer 0

--OK。Oracle 11g引入了AMM特性之后。Oracle也推荐使用它,当然,这不表示10g的ASSM不可用,依据特殊情况也有系统这样使用。 但我手头里的11g版本号数据库基本都在使用AMM特性。并且用得也非常好。

--查看sga和pga。例如以下:

 1 SQL> show parameter sga
2
3 NAME TYPE VALUE
4 ------------------------------------ ---------------------- ------------------------------
5 lock_sga boolean FALSE
6 pre_page_sga boolean FALSE
7 sga_max_size big integer 1G
8 sga_target big integer 1G
9
10 SQL> show parameter pga
11
12 NAME TYPE VALUE
13 ------------------------------------ ---------------------- ------------------------------
14 pga_aggregate_target big integer 3844M

--到这里问题发生原因基本浮出水面了,SGA大小不足以满足需求而导致的。

    --问题发生阶段的AWR报告中也能看到library hit命中率非常低。硬解析比較严重。另外软解析的比重也非常低。

原因找到了,解决这个问题就简单了。

首先跟开发的同事大概说明了一下原因。然后也跟开发的领导申请了停机时间,通知了其它开发者之后改动參数并重新启动数据库攻克了问题。

--操作例如以下:

1、改动shmmax參数值,提升到2G:

1 [root@orcl ~]# vi /etc/sysctl.conf
2 kernel.shmmax = 2147483648
3
4 [root@orcl ~]# sysctl -p
5
6 [root@orcl ~]# more /etc/sysctl.conf | grep shmmax
7 kernel.shmmax = 2147483648

2、启动AMM特性,设置memory_target为6G:

 1 SQL> create pfile='/home/oracle/pfile_20130125.bk' from spfile;
2
3 File created.
4
5 SQL> alter system set memory_target=6G scope=spfile;
6
7 System altered.
8
9 SQL> shutdown immediate
10 Database closed.
11 Database dismounted.
12 ORACLE instance shut down.
13
14 SQL> startup
15 ORACLE instance started.
16
17 Total System Global Area 2042241024 bytes
18 Fixed Size 1337548 bytes
19 Variable Size 1392510772 bytes
20 Database Buffers 637534208 bytes
21 Redo Buffers 10858496 bytes
22 Database mounted.
23 Database opened.
24
25 -- 查看
26 SQL> show parameter memory
27
28 NAME_COL_PLUS_SHOW_PARAM TYPE VALUE_COL_PLUS_SHOW_PARAM
29 ------------------------------ ---------------------- ------------------------------
30 hi_shared_memory_address integer 0
31 memory_max_target big integer 6G
32 memory_target big integer 6G
33 shared_memory_address integer 0
34
35 SQL> select * from v$sgainfo;
36
37 NAME BYTES RESIZE
38 ---------------------------------------------------------------- ---------- ------
39 Fixed SGA Size 1337548 No
40 Redo Buffers 10858496 No
41 Buffer Cache Size 520093696 Yes
42 Shared Pool Size 486539264 Yes
43 Large Pool Size 16777216 Yes
44 Java Pool Size 16777216 Yes
45 Streams Pool Size 16777216 Yes
46 Shared IO Pool Size 0 Yes
47 Granule Size 16777216 No
48 Maximum SGA Size 2042241024 No
49 Startup overhead in Shared Pool 167772160 No
50 Free SGA Memory Available 973078528
51
52 12 rows selected.
53
54 SQL> show parameter sga
55
56 NAME_COL_PLUS_SHOW_PARAM TYPE VALUE_COL_PLUS_SHOW_PARAM
57 ------------------------------ ---------------------- ------------------------------
58 lock_sga boolean FALSE
59 pre_page_sga boolean FALSE
60 sga_max_size big integer 1952M
61 sga_target big integer 1G

相似进程死掉Process com.midea.mmp2 died.的更多相关文章

  1. 502的错误其实不是nginx的问题,要从后端找原因。php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。

    502的错误其实不是nginx的问题,要从后端找原因.php-cgi进程数不够用.php执行时间长.或者是php-cgi进程死掉,都会出现502错误.

  2. Shell脚本监控Linux某个后台进程,当进程死掉后重新启动服务,以httpd为例

    Shell脚本如下: vim monitor.sh #!/bin/bash while true # 无限循环 flag=`ps -aux |grep "httpd" |grep ...

  3. system函数遇到的问题 - 程序死掉

    system函数遇到的问题 解决方案见最下边 http://blog.csdn.net/yangzhenzhen/article/details/51505176 这几天调程序(嵌入式linux),发 ...

  4. 在Python程序中的进程操作,multiprocess.Process模块

    在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...

  5. python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)

    昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...

  6. Oracle 监听莫名死掉

    有一台oracle 10g的监听莫名死掉,进行查看 select * from v$version Oracle Database 10g Enterprise Edition Release 10. ...

  7. HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法

    [问题] 用C#模拟网页登陆,其中去请求几个页面,会发起对应的http的请求request,其中keepAlive设置为true,提交请求后,然后会有对应的response: resp = (Http ...

  8. Android 进程生命周期 Process Lifecycle

    Android 进程生命周期 Process Lifecycle 进程的生命周期 Android系统会尽力保持应用的进程,但是有时为了给新的进程和更重要的进程回收一些内存空间,它会移除一些旧的进程. ...

  9. 系统上线后WCF服务最近经常死掉的原因分析总结

    前言 最近系统上线完修改完各种bug之后,功能上还算是比较稳定,由于最近用户数的增加,不知为何经常出现无法登录.页面出现错误等异常,后来发现是由于WCF服务时不时的就死掉了.后来就开始分析问题.得到的 ...

随机推荐

  1. linux监控平台搭建-磁盘

    linux监控平台搭建-磁盘 磁盘:随着大数据快速发展.人工智能.自动化.云平台.数据量指数的增长.磁盘的使用量也在增长.目前的机器基本上采用SSD或者SATA盘,一直有人比较那个好.会不会使用时间短 ...

  2. 解决c#所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。 转载

    最近做一个后来程序,启动了事务后有一段操作业务,当运行一段时间后,出现这个异常 CLR 无法从 COM 上下文 0x1b1c38 转换为 COM 上下文 0x1b1da8,这种状态已持续 60 秒.拥 ...

  3. 【CF1023A】Single Wildcard Pattern Matching(模拟)

    题意:给定两个串s与t,其中s可能有至多一个通配符*可以被当做任意长度与内容的串,问t能否与s匹配 n,m<=2e5 思路: #include<cstdio> #include< ...

  4. net3:DropDownList的动态绑定

    原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System.Data;using System.Configuration;using System ...

  5. CSS 实践:实现下拉菜单的方法

    基于display属性的切换. 将需要不可见的二级菜单ul元素的display元素设为none,当需要可见的时候改为block. .menu ul li ul { display: none; } . ...

  6. 关于微信浏览器不支持offset()的兼容性处理

    问题的背景: 在手机触屏版中,当页面向上滑动的时候,导航条可以固定在顶部,通过判断offset().top的值来实现这个功能,其他的浏览器都可以,只有微信浏览器中出现问题(向上滑动的时候,导航条就会直 ...

  7. 001为什么Linux使用~作为家目录?为什么vim用hjkl作为方向键?

  8. React-Native Navigator 过渡动画卡顿的解决方案

    在RN0.44版本之前,路由导航跳转几乎是使用的是Navigator组件,在0.44版本以后就不推荐使用了,官方推荐的是react-navigation,当然还是可以在废弃的库中找到: import ...

  9. Java RandomAccessFile类

    RandomAccessFile类是Java中操作文件内容功能最强大的类,既可以读,也可以写. RandomAccessFile支持随机访问,可以直接访问文件的任意位置,在文件的任意位置读写数据.如果 ...

  10. uitableview执行deleteRowsAtIndexPaths时出错

    Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid updat ...