【发布时间】:2014-05-22 05:10:13
【问题描述】:
我想知道 ORA-24550: signal received: [si_signo=6] 是什么意思?
我知道这是一个 oracle 错误,也许 oracle 最新的补丁可以解决这个问题。
触发此错误时,例如必须处理此信号的场景,或者当我的应用程序必须处理与 oracle 相关的事情而应用程序未能执行此操作时是否发生此错误。
【问题讨论】:
我想知道 ORA-24550: signal received: [si_signo=6] 是什么意思?
我知道这是一个 oracle 错误,也许 oracle 最新的补丁可以解决这个问题。
触发此错误时,例如必须处理此信号的场景,或者当我的应用程序必须处理与 oracle 相关的事情而应用程序未能执行此操作时是否发生此错误。
【问题讨论】:
Oracle 设置了自己的信号处理程序,因此此错误可能是由于未处理的 sigabort 信号造成的。 您可以禁用 oracle 信号处理以查明此错误是由 oracle 提供的,还是完全有其他原因。要禁用您在 sqlnet.ora 文件中设置 DIAG_SIGHANDLER_ENABLED=FALSE。我不认为原因是 oracle 本身。
【讨论】:
这表明您的 Oracle 客户端收到了它没有预料到的信号。 Oracle docs 说:
ORA-24550:收到未处理的信号#number。字符串
原因:严重错误:收到信号
操作:参考平台特定的信号代码,查看应用程序代码是否导致错误。否则,记录所有错误状态并通知 Oracle 支持服务。
默认情况下,Oracle 注册自己的信号处理程序,但 you can configure it to let signals propagate instead。
您通常会看到这样的日志行:
ORA-24550: signal received: [si_signo=6] [si_errno=0] [si_code=1] [si_int=597680428] [si_ptr=0x239fe290] [si_addr=0x3f445c43c0]
您也可能会看到回溯。
要进行调试,您需要找出产生此信号的原因。 si_signo=6 表示您收到信号 6。我们可以通过 $ man 7 signal 找出这是哪个信号:
标准信号
Signal Value Action Comment ------------------------------------------------------------------------- SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process SIGINT 2 Term Interrupt from keyboard SIGQUIT 3 Core Quit from keyboard SIGILL 4 Core Illegal Instruction SIGABRT 6 Core Abort signal from abort(3) SIGFPE 8 Core Floating point exception SIGKILL 9 Term Kill signal SIGSEGV 11 Core Invalid memory reference SIGPIPE 13 Term Broken pipe: write to pipe with no readers SIGALRM 14 Term Timer signal from alarm(2) SIGTERM 15 Term Termination signal
我们可以看到您收到了SIGABRT。这通常意味着something is calling abort()。
【讨论】:
cx_Oracle.Connection("foo", threaded=True)。
我遇到了类似的错误,但我获得了 si_signo=11(根据之前的评论,内存引用无效),在我的情况下,我正在使用 Red Hat 6.5,而我的 Oracle DB 位于不同的服务器,问题出在我的 Red Hat 服务器本地,这里是错误:
ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=1] [si_int=1147687784] [si_ptr=0x7f8f44685368] [si_addr=0x7f8f1c001000]
在我的情况下,修复非常简单,我的 堆栈大小 数量有限,临时解决方案是将其更改为无限制
$ ulimit -s unlimited
然后我重新尝试启动我的应用程序,问题就消失了。 这个解决方案确实让我明白我必须为堆栈大小索引设置更高的值,请考虑增加该值但不要使用无限,因为这不是一个好习惯,它可能会关闭服务器或产生性能问题。
【讨论】:
在我的情况下,这是 TLS 版本不匹配的问题,但它仍然不应该重新启动 .exe 文件,所以我发现在 soap 中处理不正确导致 .exe 崩溃
return soap_set_receiver_error(soap, soap_ssl_error(soap, r), "SSL/TLS 握手失败", SOAP_SSL_ERROR);
其中 r 未初始化,因此导致 .exe 文件崩溃
https 链接中的任何拼写错误都可能重新启动 .exe,因为我正在处理关键事务处理系统,所以这不是一件好事。
【讨论】: