1

アプリケーション「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:そのようなプロセスはありません

警告:コアファイルはフルコアではありません。一部の情報が利用できない場合があります。

4

0 に答える 0