c++ - 核心转储的原因是什么?来自 oracle lib 的堆栈显示

标签 c++ oracle11g coredump

我有一个 coredmp,其中所有线程堆栈看起来都很正常,但一个堆栈显示如下。任何人都可以告诉我这可能的原因吗?我可以看到正在从 oracle 库调用 exit,这是 oracle 的问题吗?当这种情况发生时,任何人都可以指导我吗?

 Thread 3 (process 26454):
#0  0x00002b803ceb54a8 in exit () from /lib64/libc.so.6
#1  0x00002b803bbe93f5 in skgdbgcra () from /home/oracle/product/11g/lib/libclntsh.so.11.1
#2  0x00002b803be9cdec in kpeDbgCrash () from /home/oracle/product/11g/lib/libclntsh.so.11.1
#3  0x00002b803be9c627 in kpeDbgSignalHandler () from /home/oracle/product/11g/lib/libclntsh.so.11.1
#4  0x00002b803bbe64b1 in skgesig_sigactionHandler () from /home/oracle/product/11g/lib/libclntsh.so.11.1
#5  <signal handler called>


> Program terminated with signal 6, Aborted.

注意:

  1. Before voting down, can you guys tell me why voting down? I am really clueless as what to check
  2. Here is another stackoverflow link where stack is similar but not same, but still no clear answer
  3. Link talks about orable bug, Is this same isue?

最佳答案

看起来这是 oracle 11g 上的问题。

  1. 从 Oracle 11g 开始,默认情况下启用诊断信息库。 DIAG_SIGHANDLER_ENABLEDDIAG_ADR_ENABLEDDIAG_DDE_ENABLED 等自动诊断存储库 (ADR) 参数大多在 SQLNET.ORA 中设置。

DIAG_SIGHANDLER_ENABLED 将强制写入所有诊断信息,例如警报日志、跟踪文件、应用程序转储,这会导致过载,有时应用程序会出错。

  1. 要关闭信号处理程序并重新启用标准操作系统故障处理,请将以下参数设置放在 $ORACLE_HOME/network/admin 目录下的客户端或服务器端 sqlnet.ora 文件中。

    DIAG_ADR_ENABLED=OFF
    DIAG_SIGHANDLER_ENABLED=FALSE
    DIAG_DDE_ENABLED=FALSE
    

默认情况下,此参数设置为 true。

对 ADR 进行任何此类更改后,即关闭 DIAG_SIGHANDLER_ENABLEDDIAG_ADR_ENABLEDDIAG_DDE_ENABLED,建议在之后重新启动应用程序在 sqlnet.ora 中进行设置。

  1. 关闭 ADR 参数不会对您的应用程序或数据库造成任何影响。

关于c++ - 核心转储的原因是什么?来自 oracle lib 的堆栈显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28449276/

相关文章:

gdb - 核心转储注释部分

c++ - 将对象保存到二进制文件中的有效方法

c++ - 找不到核心转储错误 C++ 的原因

用于识别 "Top Performers"[?] 的 SQL 查询

java - Java应用程序在关闭时被终止而没有发送信号

mongodb - 无法运行 mongodb 因为核心转储问题?

C++ 为什么不能将这两个操作组合在一行中?

java - Java 1.6 与 C++ 的性能对比?

oracle - Pl SQL 从数据库目录读取文本文件

sql - 循环索引变量使用在 PL/SQL 集合中无效