ページの先頭行へ戻る
Symfoware Server V10.0.0 トラブルシューティング集

D.1 無応答状態の対処について

Symfoware/RDBが無応答状態になると、Symfoware/RDBを使用したアプリケーション、またはRDBコマンドが終了できません。
Symfoware/RDBの無応答状態が発生した場合、以下の原因が考えられます。

アプリケーション側の問題で停止していないか

Symfoware/RDBにアクセスするアプリケーションが無応答状態の場合は、アプリケーション内、またはSymfoware/RDBのどちらが原因となっているかを特定する必要があります。
原因の特定は、rdbcninfコマンドの出力情報の『Tran』で判断することができます。『INACT』の場合はアプリケーション内で、『ACT』の場合はSymfoware/RDB側で停止しています。

$ rdbcninf -s
RDBII rdbcninf DATE:2007/04/14 TIME:11/36/00
Local Connection Status(exec/term/free/total) : 2/  1/ 29/ 32
 Status  Idle   Tran  Type    Connection-Info
 EXEC    00:00  ACT   SQL     19660/2
 EXEC    10:00  INACT SQL     19660/3
 TERM    ----   ----  ----    16997/1
Remote Connection Status(exec/term/free/total) : 1/  0/ 31/ 32
 Status  Idle   Tran  Type   Connection-Info
 EXEC    00:00  ACT   TCP/IP  10.124.4.123/19673/3

アーカイブログファイル満杯が発生していないか

業務運用中にアーカイブログファイルが満杯になると、Symfoware/RDBはqdg03800iメッセージをコンソール、およびSymfoware/RDBのメッセージログファイルに出力し、空きのアーカイブログファイルに自動的に切り替えます。この切り替え時に、空きのアーカイブログファイルが存在しない(すべてのアーカイブログファイルが満杯になる)と、Symfoware/RDBはqdg03132uメッセージを、コンソールおよびSymfoware/RDBのメッセージログファイルに出力して無応答状態となります。Symfoware/RDBが無応答状態になると、アプリケーションも無応答状態になり業務が停止します。
アーカイブログファイルの状態は、rdblogコマンドの出力情報から確認することができます。アーカイブログファイルが満杯の場合、すべてのアーカイブログに対する『capacity』が100%に、また、『status』がfullになります。

$ rdblog -V -a
serial# status total used  avail  capacity  backup-date  path
     1  full   10M   10M    0      100%       -----      /dev/rdsk/c1t1d0s1
     2  full   10M   10M    0      100%       -----      /dev/rdsk/c1t1d0s3
     0  full   10M   10M    0      100%       -----      /dev/rdsk/c1t1d0s4

この場合、アーカイブログファイルをバックアップして、Symfoware/RDBの無応答状態を解除します。
空きのアーカイブログファイルが存在しないと、Symfoware/RDBが無応答状態になり、業務が停止するため、上記メッセージを監視する、またはrdblogコマンドでアーカイブログファイルの状態を監視する必要があります。

なお、すべてのアーカイブログファイルが満杯になることが、運用上ありえなければ、アーカイブログファイルの状態を監視する必要はありません。

参照

アーカイブログファイルの状態の監視方法、およびバックアップ方法の詳細は、“RDB運用ガイド”を参照してください。

ポイント

システム、またはアプリケーションの環境設定ファイルで、以下の設定をすることで、アーカイブログファイルが満杯状態になったとき、エラー復帰できます。

ARC_FULL = (RETURN)

詳細は、“アプリケーション開発ガイド(共通編)”の“クライアント用の動作環境ファイル”を参照してください。

トランザクションの占有待ちが発生していないか

アプリケーションがトランザクション実行中状態のまま終了せずに存在し続けると、ほかのアプリケーションで実行されるトランザクションが占有待ち状態になる可能性があります。
業務運用上の手違いなどで、このような状況が発生した場合は、実行中状態のままのトランザクションを終了させて、無応答状態が解除します。
トランザクション(アプリケーション)の占有待ち状態は、rdblkinfコマンドのlオプションで確認することができます。

$ rdblkinf -l -e
RDBII rdblkinf DATE: 2007/04/14 TIME:11/35/50
DSI-name : DB0001.DSI0001
  Status   Uid     Pid    Sid   Type  Name            Unit   Purpose
  WAIT     I4874   23045    2   SQL   APL01/CONNECT1  DSI    REFER
  ACTIVE   I4874   13254    1   SQL   APL05/CONNECT5  DSI    UPDATE

参照

rdblkinfコマンドの詳細は、“RDB運用ガイド”および“コマンドリファレンス”を参照してください。

高負荷状態あるいは大量処理中ではないか

Symfoware/RDBの無応答状態が発生しているように見え、実際は処理に時間がかかっているだけで、正常に動作している場合があります。これは、次のような状態の場合に発生する可能性があります。

このような状況が発生しているかどうかは、アプリケーション、およびRDBコマンドの動作状況を調査することで確認できます。アプリケーション、およびRDBコマンドの動作状況は、rdbpsコマンドで出力することができます。10秒程度の間隔で、rdbpsコマンドを数回実行します。出力情報に変化が見られる場合は正常に動作しています。

rdbpsコマンドの実行例

$ rdbps -s -r -ia -e >> /出力先のディレクトリ/rdbpsの結果出力ファイル名

rdbpsコマンド1回当たりの実行時間は数秒です。

参照

rdbpsコマンドの詳細は、“RDB運用ガイド”および“コマンドリファレンス”を参照してください。

高負荷状態、または大量処理中となった原因を究明するには、性能情報を採取して調査する必要があります。この場合、システム全体を調査する必要があります。クライアント、サーバのCPUの状態、メモリの使用状態(実メモリが不足して、スワップ領域を多用したために、処理が遅くなる場合があります)、ディスクのI/Oの状態、およびクライアントサーバ間のネットワークの状態をすべて調べてください。