jetbrains.exodus.ExodusException:缶は0ミリ秒後に環境のロックを取得していません

xybrek:

(私たちは、原因が何であるかを知らない)私たちは、サーブレットコンテナにXodusを使用していて、時々アプリケーションはこのエラーをスローします

jetbrains.exodus.ExodusException: Can't acquire environment lock after 0 ms.

 Lock owner info: 
null
    at jetbrains.exodus.log.Log.tryLock(Log.java:935)
    at jetbrains.exodus.log.Log.<init>(Log.java:91)
    at jetbrains.exodus.env.Environments.newLogInstance(Environments.java:137)
    at jetbrains.exodus.env.Environments.newLogInstance(Environments.java:115)
    at jetbrains.exodus.env.Environments.newLogInstance(Environments.java:104)
    at jetbrains.exodus.env.Environments.newInstance(Environments.java:49)
    at jetbrains.exodus.env.Environments.newInstance(Environments.java:39)

これが発生する原因は何だろうか?

使用例:

public void put(String instance, final String storeName, final String key, final String value) {
    final Environment env = Environments.newInstance(xodusRoot + instance);
    env.executeInTransaction(new TransactionalExecutable() {
        @Override
        public void execute(@NotNull final Transaction txn) {
            final Store store = env.openStore(storeName, StoreConfig.WITHOUT_DUPLICATES, txn);
            store.put(txn, StringBinding.stringToEntry(key), StringBinding.stringToEntry(value));
        }
    });
    env.close();
}

この場合はputメソッドは、サーブレットのエンドポイントから呼び出され、サーバーのように、複数の同時クライアントは、このメソッドを呼び出します。

ヴャチェスラフLukianov:

ところで、それはそれぞれのリクエストに応じて、オープン/クローズ環境に非常に非効率的です。それは彼らが更新されながら、オープンな環境を保つために理にかなっています。オープン環境の数を制限するには、おそらくそれは、オープンな環境のキャッシュを持っているし、キャッシュから押し出されたものを閉じて良いことです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=224008&siteId=1