ibeautiful
2021-07-02 14:00:01
我們?cè)谝粋€(gè)Servlet容器上使用Xodus,應(yīng)用時(shí)不時(shí)拋出這個(gè)錯(cuò)誤(不知道是什么原因)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)什么可能導(dǎo)致這種情況發(fā)生?示例用法: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方法是從一個(gè)Servlet端點(diǎn)調(diào)用,服務(wù)器因此多個(gè)并發(fā)客戶端調(diào)用此方法。
2 回答

一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
順便說(shuō)一句,在每個(gè)請(qǐng)求上打開(kāi)/關(guān)閉環(huán)境是非常低效的。在更新時(shí)保持環(huán)境打開(kāi)是有意義的。為了限制開(kāi)放環(huán)境的數(shù)量,可能最好有一個(gè)開(kāi)放環(huán)境的緩存并關(guān)閉那些從緩存中推出的環(huán)境。

慕姐8265434
TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
這發(fā)生在嘗試同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)的情況下,無(wú)論是來(lái)自多個(gè)進(jìn)程還是來(lái)自單個(gè)進(jìn)程。該文件xd.lck
包含有關(guān)數(shù)據(jù)庫(kù)鎖所有者的人類(lèi)可讀信息。
添加回答
舉報(bào)
0/150
提交
取消