Сокет закрывается при ожидании вызова от системы - механизм биения
У меня реализован механизм сердцебиения, при котором приложение "app1" отправляет импульс каждые 60 секунд для сторожевого процесса "watch1". Если watch1 не получает никакого сообщения от app1 через 60 секунд, он предполагает, что app1 мертв, и перезапускает его. Но на самом деле он жив. Эта связь происходит через сокеты TCP/IP и приложения, работающие на одной машине. Процесс watch1 прослушивает порт скажем 3000, чтобы прочитать пакет из app1. Эти приложения работают на нескольких ОС UNIX,AIX и т. Д.
Но для конкретной машины AIX сокет 'app1 закрывается, и процесс watch1 перезапускает app1 снова и снова. Это многопоточное приложение, в котором app1 создает один поток для отправки сообщения / пакета в watch1.
Я установил скрипт, который каждые 60 секунд запускал 'procstack' для PID app1, чтобы посмотреть, что происходит. Это не дало никаких указателей, на которые я надеялся (например, застрял в замке), скорее, он начал показывать некоторые "странные" шаблоны стека:
---------- 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.
Журналы: полученный сигнал 15 в потоке 515 Поток 515 не обрабатывает сигнал 15 Аварийное завершение из-за сигнала 15kill: 7143518: нет такого процесса Команда запуска не выполнена. kill: 7405740: нет такого процесса
предупреждение: основной файл не является полным ядром. Некоторая информация может быть недоступна.