程序运行一段时间后会挂死

jixueh2kw 2008-06-19 11:58:59
我的应用在solaris/linux/hp操作系统下都能正常运行,但在aix下,运行一段时间就会挂死,每次挂死都在同一地方。刚开始时使用线程默认堆栈大小,程序仅能运行1天左右,后来设置堆栈大小为1M,则程序能运行6天左右。现在改为2M,则能运行12天。我就有点纳闷,在其它操作系统下都能正常工作,为什么在aix就运行不正常,难道线程堆栈不能被重复使用,还是有什么参数我没有设置,导致在线程运行一段时间后再分配内存时就会被挂死。
我使用pthread_attr_setstacksize()来设置线程堆栈大小。编译器使用VisualAge 8,操作系统版本AIX 5.3。
虽然以前也有人提到了类似的问题,但通过扩大线程堆栈大小不能从根本上解决问题,是不是还有什么系统参数没有设置,因为我确信我们的程序应该没有问题,在其它的操作系统下都能正常运行。
谁能给指点迷津,在此多谢了!
...全文
253 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuqd273 2008-06-20
  • 打赏
  • 举报
回复
对了,在检查api之前,也检查一下编译参数。可能也有影响的
fuqd273 2008-06-20
  • 打赏
  • 举报
回复
平台移植不是那么好做的。

HP-UX的C移植到Solaris都要费牛劲了。
C++肯定更复杂。
fuqd273 2008-06-20
  • 打赏
  • 举报
回复
。。。。。

麻烦。
是在做项目的平台移植还是在做兼容性测试?

每个平台的c实现都可能略有差异。要去查ibm的联机文档了。


Product Documentation
jixueh2kw 2008-06-20
  • 打赏
  • 举报
回复
当然是C++代码了。我也怀疑是不是内存没有释放,但我在aix操作系统下,使用gcc编译,程序也能很好的运行,而使用xlC编译,就会出现上面说的现象。
jixueh2kw 2008-06-20
  • 打赏
  • 举报
回复
是平台移植,因为我们的系统在不同的操作系统平台下都要能正常运行。
我们的程序是在xml解析时出错,虽然通过增加线程堆栈可以让程序能运行长一些,但是这终究不是解决办法。现将出错的线程堆栈信息贴出来,看对定位问题是否有帮助。使用的xml解析器是Xerces 2_1_0。
---------- tid# 544997 ----------
0xd03acca4 malloc_y(0xd01fdb54, 0x100850e5, 0x315b3150, 0xf10036d0, 0xd01fdb54, 0x100850e5, 0x315b3160, 0xf100
36d0) + 0x1c
0xd01fdb50 _Fancy_malloc(unsigned long)(??) + 0xc8
0xd01fd784 operator new(unsigned long)(??) + 0x64
0xd01fd6e4 operator new[](unsigned long)(??) + 0xc
0xd3ed1a48 XMLTranscoder::XMLTranscoder(const unsigned short*,unsigned int)() + 0x84
0xd3edb8e4 XML88591Transcoder::XML88591Transcoder(const unsigned short*,unsigned int)() + 0x14
0xd3ed3c0c ENameMapFor<XML88591Transcoder>::makeNew(unsigned int) const() + 0x5c
0xd3ed17f4 XMLTransService::makeNewTranscoderFor(const unsigned short*,XMLTransService::Codes&,unsigned int)()
+ 0x8c
0xd3ed7f10 XMLReader::XMLReader(const unsigned short*,const unsigned short*,BinInputStream*,const unsigned sho
rt*,XMLReader::RefFrom,XMLReader::Types,XMLReader::Sources,bool)() + 0x2a0
0xd3e934d8 ReaderMgr::createReader(const InputSource&,bool,XMLReader::RefFrom,XMLReader::Types,XMLReader::Sour
ces)() + 0x164
0xd3fd19c0 XMLScanner::scanReset(const InputSource&)() + 0x230
0xd3ef4088 XMLScanner::scanDocument(const InputSource&)() + 0x5c
0xd3e8c0b4 AbstractDOMParser::parse(const InputSource&)() + 0x68
0x103301bc GDKT::XmlTreeParser::string2Tree(const char*,const char*)(0x317bdd78, 0x317b82c8, 0x130f5b5c) + 0x1
0c
0x115e3484 GDKT::BackAlarmSyncAcceptSkeleton::onRecvAlarmFromChannels(gdktMsgrp&,const gdktCommServerId&,const
gdktCommConnId&)(0x309dfec8, 0x315b4f10, 0x315b4f6c, 0x315b4f74) + 0x294
0x115eacdc GDKT::BackAlarmSyncAcceptSkeleton::run(gdktMsgrp&,const gdktCommServerId&,const gdktCommConnId&)(0x
309dfec8, 0x315b4f10, 0x315b4f6c, 0x315b4f74) + 0x12c
0x1018f170 GDKT::BackServerMsgReactor::skeletonMsgrpDispatch(gdktMsgrp&,const gdktCommServerId&,const gdktComm
ConnId&)(0x2ff204a4, 0x315b4f10, 0x315b4f6c, 0x315b4f74) + 0xfbc
0x1019a598 GDKT::BackServerMsgReactor::recvCallback(gdktCommServerId,gdktCommConnId,const gdktPacket&)(0x2ff20
4a4, 0x4, 0x41c6, 0x1e, 0x15fb, 0x315b50b0) + 0x7c
0x10312628 gdktCommConnection::ReasPacket(const gdktCell*)(0x313aa1e8, 0x317b39d0) + 0x280
0x10317104 gdktCommConnection::recvMonitor()(0x313aa1e8) + 0x248
0x1031a280 gdktThreadProxy<gdktCommConnection>::Run()(0x30037838) + 0x54
0x10326004 gdktThreadPool::RunIt(gdktThreadInfo*)(0x315b0838) + 0x70
0x10326270 gdktThreadPool::ThreadProxy(void*)(0x315b0838) + 0x188
0xd0111640 _pthread_body(??) + 0x118
fuqd273 2008-06-19
  • 打赏
  • 举报
回复
请问楼主,你的代码是什么代码?c/java/c++/???

线程中的默认异常处理
C++编译器如何实现异常处理
托管线程中的异常

请参考相关连接,以及相关unix环境api以帮助你分析问题原因。
fuqd273 2008-06-19
  • 打赏
  • 举报
回复
恩,顶1楼。
还有,不是说执行结果没问题就代表代码没问题了。

charny520 2008-06-19
  • 打赏
  • 举报
回复
支持楼上说的,,仔细看一下
悠悠长风 2008-06-19
  • 打赏
  • 举报
回复
会不会是在aix上有的系统调用不同,其他系统不需要释放内存,而它需要释放内存??

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧