我想知道
ORA-24550: signal received: [si_signo=6]
是什么意思?
我知道这是一个oracle错误,也许oracle最新补丁可以解决这个问题。
当触发此错误时,例如必须处理此信号的场景,或者当我的应用程序必须处理与 oracle 相关的内容而应用程序未能执行此操作时是否会发生此错误。
这表明您的 Oracle 客户端收到了它不期望的信号。 Oracle 文档 说:
ORA-24550: 收到未处理的信号 #number。字符串
原因:严重错误:收到信号
处理:参考平台特定的信号代码,看看是否是应用程序代码导致了错误。否则,记录所有错误状态并通知 Oracle 支持服务。
默认情况下,Oracle 注册自己的信号处理程序,但是 您可以将其配置为让信号传播。
您通常会看到这样的日志行:
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
。这通常意味着 有东西正在呼叫 abort()
。
我遇到了类似的错误,但我获得了 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
然后我重新尝试启动我的应用程序,问题就消失了。 事实上,这个解决方案让我明白我必须为堆栈大小索引设置一个更高的值,请考虑增加该值但不要使用无限制,因为这不是一个好的做法,它可能会导致服务器崩溃或造成性能问题。
Oracle 设置了自己的信号处理程序,因此此错误可能是由于未处理的 sigabort 信号造成的。 您可以禁用oracle信号处理来查明此错误是否是oracle提供的,或者完全是其他原因。要禁用,请在 sqlnet.ora 文件中设置 DIAG_SIGHANDLER_ENABLED=FALSE。我不认为是oracle本身的原因。
就我而言,这是 TLS 版本不匹配的问题,但仍然不应该重新启动 .exe 文件,所以我发现肥皂中的处理不正确,导致 .exe 崩溃
返回soap_set_receiver_error(soap,soap_ssl_error(soap,r),“SSL / TLS握手失败”,SOAP_SSL_ERROR);
其中 r 未初始化,因此导致 .exe 文件崩溃
https 链接中的任何拼写错误都可能重新启动 .exe,这不是一件好事,因为我正在研究关键的事务处理系统。