2012-06-15 41 views
1

我有一个C++进程,它现在和之后崩溃(主要是在性能测试完成时)。 当我检查核心日志时,在崩溃前我可以看到很多Informix错误。Informix错误后的进程崩溃

在进程核心转储之前,我看到一系列带有错误代码406的Informix错误,这与Out of Memory异常有关。 我也看到错误代码244(不能做物理顺序读取获取下一行)。

有人可以分享你的想法如何这些情况下可能导致进程核心倾销?

更多详细信息

过程:多线程的C++过程
环境:的Solaris
数据库:Informix的与ESQL接口

ESQL DB功能(插入/更新/选择)是投掷其通过抓该过程。 catch块中的消息是出现在进程日志中的最后一条消息。之后,对这个过程没有任何线索。

当进程coredumps出现时,正常消息(Caught signal. dumped core)也丢失。

+0

是您的C++程序是核心转储还是Informix服务器?你使用线程C++程序吗?你使用线程库吗?你正在使用哪个接口(ODBC,ESQL/C,OLEDB,...)?程序运行在哪个平台上?数据库服务器?你正在使用哪些版本?你的应用程序如何处理错误报告?在线日志文件必须说明什么?等等有很多问题可能是麻烦。不过,服务器应该不会崩溃。它可以做各种各样的事情,但崩溃不是其中之一。 –

+0

@JonathanLeffler - 这是一个多线程的C++过程。它使用ESQL界面。进程正在Solaris上运行。这个过程没有任何线索而崩溃。我在进程日志中看到的最后一个日志是一系列Informix错误。甚至说所记录的过程,核心倾倒,缺失。 pstack也没有提供正确的信息。 – cppcoder

+0

您是否正在使用线程安全(r)ESQL/C库进行链接?这是Solaris;是8,9,10或11?哪个版本的ESQL/C?你是否正确地共享线程之间的连接?你知道SET CONNECTION'conn_name'DORMANT吗?在建立线程之前或之后建立连接吗?每个与数据库通信的线程是否都有自己的连接? (我的印象是,你的意见是你的C++程序崩溃了,而不是Informix数据服务器;这是否正确?) –

回答

1

当你说during performance testing那里你有一个巨大的线索!!!!!

通常对于性能测试用例而言,编译器优化会导致一些编写得不好的代码短路导致崩溃。

为了给你一个典型的例子:当变量被认为是跨线程读取时,变量没有被声明为volatile。

+0

你能举一个例子,说明volatile如何影响多线程程序?矿是一个多线程的过程。 – cppcoder

+0

http://www.eetimes。com/discussion/beginner-s-corner/4023801/Introduction to the Volatile-Keyword good article。 –