首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用objectbox的lots服务器上有很多警告

使用objectbox的lots服务器上有很多警告
EN

Stack Overflow用户
提问于 2021-03-17 08:50:27
回答 1查看 52关注 0票数 2

我使用的是带有ObjectBox的nginx代理后面的SparkJava (基本上是Jetty) web服务器。

我开始注意到很多

代码语言:javascript
复制
Hint: use closeThreadResources() to avoid finalizing recycled transactions (initial commit count: 213).
Hint: use closeThreadResources() to avoid finalizing recycled transactions (initial commit count: 213).
Hint: use closeThreadResources() to avoid finalizing recycled transactions (initial commit count: 213).
Hint: use closeThreadResources() to avoid finalizing recycled transactions (initial commit count: 213).
Hint: use closeThreadResources() to avoid finalizing recycled transactions (initial commit count: 213).
Hint: use closeThreadResources() to avoid finalizing recycled transactions (initial commit count: 213).
038-22:43:52.3260 [WARN ] Skipping low-level close for read-only cursor (non-creator thread 'java')
038-22:43:52.5815 [WARN ] Skipping low-level close for read-only cursor (non-creator thread 'java')
038-22:43:52.5815 [WARN ] Skipping low-level close for read-only cursor (non-creator thread 'java')
038-22:43:52.5815 [WARN ] Destroyed recycled transaction from non-owner thread 'java'
038-22:43:52.5820 [WARN ] Skipping low-level close for read-only cursor (non-creator thread 'java')
038-22:43:52.5820 [WARN ] Destroyed recycled transaction from non-owner thread 'java'
038-22:43:52.5821 [WARN ] Skipping low-level close for read-only cursor (non-creator thread 'java')

警告,在我的日志中,我正在考虑解决这个问题的方法。

我所看到的建议,可能是按照提示中的建议调用closeThreadResources(),可能是在每次调用完成之后。但是,我不是Jetty方面的专家,也不确定是否每个线程都会被杀死或重用。如果线程被重用,调用closeThreadResources()可能会中断?另外,我有多个ObjectBox框,所以我可能必须记住使用了哪些框,或者对所有框调用closeThreadResources()。不是完美的,但可行的。

然后,在读取https://github.com/objectbox/objectbox-java/issues/753#issuecomment-525314808之后,还可能重用查询,这可能会修复问题。我可能会重做我的大部分代码来创建查询一次,然后在使用参数值时设置它们。当它被when服务器使用时,它的线程安全性如何?例如,如果我更改了一个查询的值以使用它,而它已经被另一个线程使用,会发生什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-17 16:25:53

您可能想要做的是,一旦处理完来自服务它的线程的web请求,就调用closeThreadResources()。这与线程池一起工作得很好,线程池也被web服务器使用。您可以使用servlet过滤器对所有请求执行此操作,但不确定目前是否有更好的方法来执行此操作。

一些背景知识:每个使用ObjectBox的线程都会“缓存”一些资源(线程本地)。在线程被“完成”(至少现在,例如处理eb请求)之后,最好的清理方法是使用ObjectBox,它调用closeThreadResources()。一旦该线程返回(例如,从线程池中),它将简单地再次分配所需的资源。

查询:是的,你可以重用它们,但是在你查询的时候,请确保锁定查询对象,因为你可能也会与其他服务请求的线程竞争。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66665519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档