Tomcat JDBC接続の枯渇

この記事は、 VerifyProcess実行するときのMySQLのトラブルシューティングに役立ちます。 小さい 最大JDBC接続プール は、 VerifyProcess が同時に実行されると、JDBC接続を使い果たします。ユーザーが最大 Tomcat JDBC接続プール サイズを構成または一部のVerifyProcess Suiteのモデル数よりも少ないと定義した場合、 VerifyProcess が同時に実行されると、Tomcat JDBC接続プールの枯渇が発生する可能性があります。

これは、以前のLiferayポータルバージョンからLiferayポータル6.2へのアップグレード中、またはユーザーが verify.frequency = プロパティに「-1」を値として設定している場合に発生する可能性があります。

以下は、モデルが定義されているVerify Process Suiteのものです。

  1. VerifyAuditedModel
  2. VerifyGroupId
  3. VerifyResourcePermissions
  4. VerifyUUID

原因

com.liferay.portal.verify.VerifyProcessには、次のようなコードスニペットを含むメソッド doVerify() があります。

protected void doVerify(
            Collection
                throwableAwareRunnables)
        throws Exception {

        if (throwableAwareRunnables.size() <
                PropsValues.VERIFY_PROCESS_CONCURRENCY_THRESHOLD) {

            for (ThrowableAwareRunnable throwableAwareRunnable :
                    throwableAwareRunnables) {

                throwableAwareRunnable.run();
            }
        }
        else {
            ExecutorService executorService = Executors.newFixedThreadPool(
                throwableAwareRunnables.size());

検証スイートから必要なモデルの量がしきい値( verify.process.concurrency.thresholdプロパティ定義)を超えると、上記のスニペットの以下のコードに基づいて、検証プロセスが同時に実行されます。

else {

            ExecutorService executorService = Executors.newFixedThreadPool(

                throwableAwareRunnables.size());

このプロセスは、その検証スイートのモデルに基づいてJDBC接続スレッドの量を取得し、そのスイートの検証を完了するために同時実行性に対応しようとします。 通常、JDBC接続スレッドプールがデフォルト値であるか、比較的高い値(例: 典型的な生産レベル)それは問題ではありません。 ただし、お客様の最大JDBC接続プールが小さい場合(たとえば、最大JDBC接続スレッドが15)、モデルの量が最大JDBC接続プールの最大サイズを超えると、検証プロセスがハングし、ポータルが応答しなくなります。

解決

この問題を解決するには、2つのオプションがあります。
  1. Tomcat JDBC接続プールの最大値をより適切な値に増やして、並行検証スレッドに対応します。
  2. portal-ext.properties ファイルで、プロパティ verify.process.concurrency.threshold = を追加し、 VerifyProcess スイートの一部のモデルの数よりも高い値を設定して、検証プロセスを単一で実行します糸。
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています