「ORA-00020: 最大プロセス数(150)を超えました」が発生した場合の調査方法

「ORA-00020: 最大プロセス数(150)を超えました」が発生した場合の調査方法
今まで元気に動いていたシステムで、突然以下のエラーが発生しました。

TNS-12518: TNS: リスナーはクライアント接続をハンドオフできません。

もう一度同じ処理を動かすと、今度はエラーは発生せず。

見間違いかな?と思って、何度も同じ処理を動かしましたが、エラーが発生したのは一度きりでした。

リスナーログを確認する

リスナーログを確認してみます。

Oracleのバージョンは12cだったので、リスナーログは以下のフォルダにありました。

$ADR_BASE\diag\tnslsnr\[ホスト名]\[リスナー名]\trace\[リスナー名].log

ログを確認してみると、確かに一度だけ「TNS-12518」が発生していました。

アラートログを確認する

今度はアラートログを確認してみます。

アラートログは以下のフォルダにあります。

$ADR_BASE\diag\rdbms\[DATABASE]\[SID]\trace\alert_[SID].log

アラートログには以下のエラーが出力されていました。

ORA-00020: 最大プロセス数(150)を超えました

どうやらこれがTNS-12518の原因のようです。

プロセス数を確認する

現在使用中のプロセス数と最大数を確認します。

以下のSQLを実行することで確認できます。

select * from v$resource_limit
where resource_name in ('processes','sessions');

<実行結果>
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE CON_ID
processes 62 148 150 150 0
sessions 72 161 248 248 0

CURRENT_UTILIZATION」は、現在使用されているプロセスの数、「MAX_UTILIZATION NUMBER」は最後にインスタンスを起動してからのリソース最大消費量です。

リソース最大消費量が最大値の150に迫るところまで来ていました。

おそらく「MAX_UTILIZATION NUMBER」が148を記録したタイミングでORA-00020が発生したのでしょう。

問題のプログラムを何度も動かすと、「CURRENT_UTILIZATION」の値がどんどん増えていきます。

根本原因

ある担当者が作成したプログラムにバグがあることが判明しました。

条件によってDisconnectしないルートが存在したため、プロセスがどんどん溜まってしまう状態となっていたようです。

コネクションの切断処理を全プログラムで見直したところ、「CURRENT_UTILIZATION」の値が増え続けることはなくなりました。

まとめ

ORA-00020が原因でプロセスが強制終了すると、ほかのエラーを併発することがあるようです。

最初に発覚した「TNS-12518」だけでは何のエラーなのかよくわかりませんでしたが、アラートログを見ることで根本原因までたどり着くことが出来ました。

まずはアラートログを確認することが基本ですね。

以上

<スポンサーリンク>


0 件のコメント :

コメントを投稿