套接字关闭从系统等待调用 - 心跳机制

时间:2012-11-22 13:31:09

标签: c++ multithreading sockets unix aix

我实现了一个心跳机制,其中应用程序'app1'每隔60秒向看门狗进程'watch1'发送脉冲。如果watch1在60秒后没有从app1收到任何消息,则假定app1已经死亡并重新启动它。但在实际上,它还活着。这种通信是通过在同一台机器上运行的TCP / IP套接字和应用程序进行的。 watch1进程侦听端口说3000以从app1读取数据包。这些应用程序可在多个操作系统UNix,AIX等上运行。

但对于特定的AIX机器,'app1的套接字正在关闭,watch1进程一次又一次地重启app1。它的多线程应用程序,其中app1创建一个线程来向watch1发送消息/数据包。

我设置了一个脚本,每隔60秒在app1 PID上运行'procstack'以查看发生了什么。这并没有提供我希望的任何指针(比如卡在锁上),而是开始显示一些“奇怪的”堆栈模式:

 ---------- tid# 21692655 (pthread ID:   3342) ----------
 0xd4be4754  SocketBase::close()(0x0) + 0x34 
 0xd0503ca4  _event_wait(??, ??) + 0x2c4
 0xd0511e78  _cond_wait_local(??, ??, ??) + 0x378
 0xd05125d0  _cond_wait(??, ??, ??) + 0xb0
 0xd0512f1c  pthread_cond_timedwait(??, ??, ??) + 0x21c
 0xd4a2cbd8  TaskEvent::Wait(int)(0x32ebc03c, 0x7530) + 0xd8
 0xd4e40b70  SendIAmAliveThreadFunc(void*)(0x32ebc038) + 0xf50
 0xd3dfcdc4  ThreadStartRoutine(void*)(0x32ebbba8) + 0xc4
 0xd04f0c4c  _pthread_body(??) + 0xec 

内核服务_event_wait()调用我们的代码(套接字处理的包装类)SocketBase :: close()是没有意义的。可能是一些奇怪的异常;可能需要一些AIX专业知识来帮助诊断。

是否有人知道此问题或指南?

** * ** * * EDIT1 - 23-11 -12 * ***

app1进程因信号15而终止。

日志: 在线程515上接收到信号15 线程515不处理信号15 由信号引起的异常终止15kill:7143518:没有这样的过程 启动命令失败。 杀:7405740:没有这样的过程

警告:核心文件不是fullcore。一些信息可能会 不可用。

0 个答案:

没有答案