11.1.4 アプリケーション・デッドロックとは
メッセージの送信時にすべてのプロセスがブロックされると、アプリケーション・デッドロックが発生します。たとえば、クライアントからのリクエストでメッセージ領域がいっぱいになると、応答を戻すサーバーがブロックされます。そのため、メッセージを読み取れるサーバーがなくなり、デッドロックが発生します。タイムアウトによってデッドロックを解除できる場合もあります。ただし、本来行われるべき処理は何も行われていません。
特に問題となるのは、TPNOREPLYフラグが指定されているリクエストを送信するクライアントです。その場合、メッセージのサイズによって異なりますが、クライアントのキューまたはシステムのメッセージ領域にメッセージが蓄積されてしまいます。このようなアプリケーションには、未処理のメッセージ数をそのアプリケーションが制限できるようなフロー制御ルーチンが必要です。つまり、クライアントやサーバーが送信操作(サービスのリクエストまたは応答の送信)でブロックされている場合、潜在的に問題が発生する可能性があります。ただし、システム内のほかのキューにメッセージを受け付けられる領域があれば、1つのサーバー・リクエスト・キューが常にいっぱいになっている状態でも、通常は問題は発生しません。
親トピック: IPCリソースを制御するパラメータ・セット