【问题标题】:Segfault while running through onMessage in activemq在activemq中运行onMessage时出现段错误
【发布时间】:2014-10-07 13:04:54
【问题描述】:

我正在使用 activemq 在进程(c++ 程序)之间传递 xml 消息,它可以根据需要工作。我正在尝试将程序安装到新主机上,但遇到了麻烦。由于我没有配置我的开发系统,我很确定我在新系统 activemq 实例中遇到了配置问题。在onMessage 方法中运行一段代码时出现段错误。如果我在启动消息侦听器之前调用代码,它运行良好。不幸的是,我无法显示代码……所以是伪代码,抱歉。

Main
{
    Declare object
    Use object.            <-- works fine
}
MessageReader
{
    onMessage
    {
         Declare object.    <-- segfaults here
    }
}
Main
{
    Declare messageReader 
    Run messageReader 
}

当程序接收到消息时,它会在尝试实例化对象时出现段错误。

开发和部署系统都运行 Linux 64,并且程序也被编译 -m64。如果 activemq c++ 库是 32 位构建,我会在尝试链接时遇到精灵失败,对吗? 堆栈限制是无限的,-Xms=1G-Xmx=10G,但我收到了一些关于线程太少的警告(来自运行 activemq 的控制台),我对此一无所知。 任何帮助将不胜感激,是的,我意识到我真的不擅长描述事情

【问题讨论】:

  • 什么版本的客户端?什么操作系统?
  • Activemq 快照 5.10,activemq cpp 3.8.2。运行系统是red hat,失败的系统是suse。一旦我尝试运行消费者,对代码的一些更改现在就会失败。

标签: activemq


【解决方案1】:

问题是由于尝试在使用之间停止并重新启动 AMQ C++ 库引起的(程序员感到羞耻)

【讨论】:

    【解决方案2】:

    根据提供的信息,我的猜测是它与:https://issues.apache.org/jira/browse/AMQCPP-529 有关,但在您的情况下很难说。首先要做的是升级到库的 v3.8.3 以获取最新修复。要尝试的另一件事是通过使用新的“对象”在堆上创建对象,然后将其删除或将其分配给 auto_ptr 以进行自动清理。

    【讨论】:

    • 谢谢,将尝试升级 cpp 库。我已经从堆栈分配更改为堆分配,但它在 malloc 中失败了。
    • 担心从外部无法做更多事情,您必须在故障节点上开始调试以查看发生了什么。
    • 更新到新库(3.8.3),现在代码在lockThreadsLib中失败了???现在要得动脉瘤了
    • 重新开始 - 重新启动 activemq 服务器,放几条消息。运行我的代码无法从 `connection->start()' 返回
    • 这表明如果使用故障转移,客户端将无法连接到服务器。
    猜你喜欢
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多