客户数据库出现ORA-600[729]错误。
详细信息如下:
Sun Oct 16 04:31:31 2011 Errors IN file /u01/app/oracle/admin/db1/udump/db1_ora_6459722.trc: ORA-00600: internal error code, arguments: [729], [360], [SPACE leak], [], [], [], [], [] |
这个ORA-600的三个参数的含义分别为:729是错误的编号,729的错误和内存泄漏相关;360是内存泄漏的字节数;space leak:对于729错误,第三个参数永远是space leak,表明这是一个内存泄漏的问题。
正常情况下,Oracle的进程会自动管理当前进程内存的分配和释放,只有当进程结束的时候,Oracle会接管进程的内存,将其全部释放。在Oracle释放进程的内存时,会检查每个内存chunk的状态,正常情况下所有的状态都是free和permanent,如果出现了其他状态,比如FREEABLE或者RECREATABLE等,说明进程没有及时的释放一些内存chunk,这就是所谓的内存泄漏。
详细的TRACE如下:
*** 2011-10-16 04:31:31.115 *** SERVICE NAME:(SYS$USERS) 2011-10-16 04:31:31.114 *** SESSION ID:(6191.1172) 2011-10-16 04:31:31.114 ******** ERROR: UGA memory leak detected 360 ******** ****************************************************** HEAP DUMP heap name="session heap" DESC=1104473d8 extent sz=0xff80 alt=32767 het=32767 rec=0 flg=2 opc=3 parent=110198a30 owner=7000013ff452bf0 nex=0 xsz=0xff80 EXTENT 0 addr=110490080 Chunk 110490090 sz= 7800 perm "perm " alo=4480 Chunk 110491f08 sz= 57592 free " " EXTENT 1 addr=110480080 Chunk 110480090 sz= 16184 free " " Chunk 110483fc8 sz= 192 perm "perm " alo=192 Chunk 110484088 sz= 22136 free " " Chunk 110489700 sz= 360 freeable "K2I iter " Dump OF memory FROM 0x0000000110489700 TO 0x0000000110489868 110489700 00B38F00 00000169 00000001 10484088 [.......i.....H@.] 110489710 00000001 04DEFFC0 0000BEA1 0000000A [................] 110489720 00000008 00000000 00000001 104897E4 [.............H..] 110489730 00000001 10489824 00000000 00000000 [.....H.$........] . . . 110489860 00000000 00000000 [........] Chunk 110489868 sz= 26520 free " " EXTENT 2 addr=110460080 Chunk 110460090 sz= 2200 perm "perm " alo=2200 Chunk 110460928 sz= 63192 free " " EXTENT 3 addr=110450098 Chunk 1104500a8 sz= 41392 perm "perm " alo=41392 Chunk 11045a258 sz= 23976 free " " Total heap SIZE = 261544 FREE LISTS: Bucket 0 SIZE=56 Bucket 1 SIZE=88 Bucket 2 SIZE=152 Bucket 3 SIZE=168 Bucket 4 SIZE=280 Bucket 5 SIZE=432 Bucket 6 SIZE=536 Bucket 7 SIZE=1048 Bucket 8 SIZE=2072 Bucket 9 SIZE=4120 Bucket 10 SIZE=8216 Chunk 110480090 sz= 16184 free " " Bucket 11 SIZE=16408 Chunk 11045a258 sz= 23976 free " " Chunk 110489868 sz= 26520 free " " Chunk 110484088 sz= 22136 free " " Bucket 12 SIZE=32792 Chunk 110460928 sz= 63192 free " " Chunk 110491f08 sz= 57592 free " " Bucket 13 SIZE=65560 Bucket 14 SIZE=131096 Bucket 15 SIZE=262168 Bucket 16 SIZE=524312 Bucket 17 SIZE=2097176 Total free SPACE = 209600 UNPINNED RECREATABLE CHUNKS (lru FIRST): PERMANENT CHUNKS: Chunk 110490090 sz= 7800 perm "perm " alo=4480 Chunk 110483fc8 sz= 192 perm "perm " alo=192 Chunk 110460090 sz= 2200 perm "perm " alo=2200 Chunk 1104500a8 sz= 41392 perm "perm " alo=41392 Permanent SPACE = 51584 ****************************************************** *** 2011-10-16 04:31:31.116 ksedmp: internal OR fatal error ORA-00600: internal error code, arguments: [729], [360], [SPACE leak], [], [], [], [], [] ----- Call Stack Trace ----- calling CALL entry argument VALUES IN hex location TYPE point (? means dubious VALUE) -------------------- -------- -------------------- ---------------------------- ksedst+001c bl ksedst1 088424844 ? 041124844 ? ksedmp+0290 bl ksedst 104A506E8 ? ksfdmp+0018 bl 03F4BE78 kgeriv+0108 bl _ptrgl kgesiv+0080 bl kgeriv 10008FD0C ? 1100CAFF0 ? 000000000 ? 00000000A ? 1100CB230 ? ksesic2+0060 bl kgesiv 110000BF8 ? 104B032A8 ? FFFFFFFFFFF9260 ? 000000000 ? 7000013FF453A10 ? ksmuhe+02dc bl ksesic2 2D9000002D9 ? 000000000 ? 000000168 ? 000000001 ? 00000000A ? 104A4F2D8 ? 000000000 ? 000000000 ? ksmugf+01b8 bl 03F49FA0 ksuxds+0c04 bl 01FB5D60 ksudel+0054 bl ksuxds 7000013FF452BF0 ? 104B032A8 ? opilof+0c7c bl 03F49D84 opiodr+0ae0 bl _ptrgl ttcpip+1020 bl _ptrgl opitsk+1124 bl ttcpip 1100CB0D8 ? FFFFFFFFFFFBBB0 ? 000000001 ? 000000000 ? FFFFFFFFFFFBB30 ? 1100E0428 ? 000000000 ? 1104B0B70 ? opiino+0990 bl opitsk 000000000 ? 000000000 ? opiodr+0ae0 bl _ptrgl opidrv+0484 bl 01FB7E64 sou2o+0090 bl opidrv 3C02AB90DC ? 440660000 ? FFFFFFFFFFFF9D0 ? opimai_real+01bc bl 01FB5C2C main+0098 bl opimai_real 000000000 ? 000000000 ? __start+0098 bl main 000000000 ? 000000000 ? --------------------- Binary Stack Dump --------------------- |
在TRACE文件中,这个记录信息表明了内存泄漏的存在:
Chunk 110489700 sz= 360 freeable "K2I iter " |
而在TRACE文件中,还存在opilof函数,说明找个会话在进行LOGOFF操作。其实对于4000以下的内存泄漏,被认为是安全的,Oracle甚至提供了EVENTS 10262可以屏蔽这个错误的产生。而如果在alert文件中发现这个错误时,曾经泄漏的内存已经被释放,因此这个问题不会对实例的运行造成影响。
如果错误频繁发生,或者泄漏的空间超过4000或更高,可以进一步去分析,或者去寻找专门的补丁,Metalink文档Understanding and Diagnosing ORA-600 [729] Space Leak Errors [ID 403584.1]介绍了space leak相关的内容。