アプリケーション「app1」が60秒ごとにウォッチドッグプロセス「watch1」にパルスを送信するハートビートメカニズムを実装しています。watch1が60秒後にapp1からメッセージを受け取らない場合、app1が停止していると見なし、再起動します。しかし、実際にはそれは生きています。この通信は、同じマシンで実行されているTCP/IPソケットとアプリケーションを介して行われます。watch1プロセスは、ポートsay 3000でリッスンして、app1からパケットを読み取ります。これらのアプリケーションは、複数のOS UNix、AIXなどで実行されます。
ただし、特定のAIXマシンの場合、'app1のソケットが閉じられ、watch1プロセスがapp1を何度も再起動します。app1がメッセージ/パケットをwatch1に送信するための1つのスレッドを作成するマルチスレッドアプリケーション。
60秒ごとにapp1PIDで「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を処理しませんシグナル15による異常終了kill:7143518:そのようなプロセスの開始コマンドは失敗しませんでした。殺す:7405740:そのようなプロセスはありません
警告:コアファイルはフルコアではありません。一部の情報が利用できない場合があります。