我实现了一个心跳机制,其中应用程序'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。一些信息可能会 不可用。