为了账号安全,请及时绑定邮箱和手机立即绑定

jetbrains.exodus.ExodusException:0 毫秒后无法获取环境锁

jetbrains.exodus.ExodusException:0 毫秒后无法获取环境锁

ibeautiful 2021-07-02 14:00:01
我们在一个Servlet容器上使用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方法是从一个Servlet端点调用,服务器因此多个并发客户端调用此方法。
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

顺便说一句,在每个请求上打开/关闭环境是非常低效的。在更新时保持环境打开是有意义的。为了限制开放环境的数量,可能最好有一个开放环境的缓存并关闭那些从缓存中推出的环境。


查看完整回答
反对 回复 2021-07-14
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

这发生在尝试同时访问数据库的情况下,无论是来自多个进程还是来自单个进程。该文件xd.lck包含有关数据库锁所有者的人类可读信息。


查看完整回答
反对 回复 2021-07-14
  • 2 回答
  • 0 关注
  • 244 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信