gpt4 book ai didi

c++ - activemq-cpp 抛出 "Thread local storage limit"发送时到达

转载 作者:行者123 更新时间:2023-11-30 01:52:06 25 4
gpt4 key购买 nike

我一直在开发一个与ActiveMQ-cpp(库版本3.8.2)互连的线程数据池系统。该系统管理一组可以定期汇集的设备,轮询结果发送到代理中的队列。控制消息可以随时更改应答队列,因此生产者和目的地不断变化。只有一个订阅者接收所有控制命令,多个线程从它们自己的 session 中创建生产者和消息。所有消息都是文本消息。

所有 activemq-cpp 元素都包裹在 RAII 元素中,但在密集使用后的某个时刻,连接会收到消息,但当我尝试发送响应时,库会抛出异常,显示“已达到线程本地存储限制”。之后它会收到更多消息(有时文本会损坏)但尝试发出新消息时再次陷入线程存储异常,然后完全停止接收和发送。

有没有人发现这种问题?欢迎任何帮助。

更新:我已经编译使用了新的3.8.3版本,仍然可以重现错误。测试在 RHEL 5.7 和 Fedora 20 中完成,均为 64 位架构。

最佳答案

在对包装器进行几天的调试和重新计数之后,我们发现罪魁祸首是指向未删除结构的错误指针。这特别隐藏了 Valgrind 的 memcheck 中丢失的指针作为“间接损失”。

毕竟,手头的问题是未删除的 cms::Session 指针的集合(其他 cms 对象也会发生这种情况)。

作为activemq-cpp library points out在 session 部分,cms::Session 是一个单线程元素。但是,它还声明创建它的 Connection 控制它的几个操作,为此它保留对生成的 Session 的引用等,所有这些都存储在 Connection 线程堆栈中。因此,当连接容量已满时,大量的 session 创建将触发“达到线程本地存储限制”。

关于c++ - activemq-cpp 抛出 "Thread local storage limit"发送时到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com