gpt4 book ai didi

embedded-jetty - 使用 objectbox 在网络服务器上出现大量警告

转载 作者:行者123 更新时间:2023-12-04 07:56:42 25 4
gpt4 key购买 nike

我在带有 ObjectBox 的 nginx 代理后面使用 SparkJava(基本上是 Jetty)Web 服务器。
我开始注意到很多

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 之后,还有可能重用查询,这可能会解决问题。 .我可以重做大部分代码来创建一次查询,然后在使用它们时设置参数值。当被网络服务器使用时,这有多线程安全?即,如果我更改查询的值以使用它,并且它已经被另一个线程使用,会发生什么?

最佳答案

您可能想做的是调用 closeThreadResources()一旦您完成了来自为其提供服务的线程的 Web 请求。这适用于线程池,Web 服务器也使用线程池。您可以对所有请求执行此操作,例如servlet 过滤器,但不确定这些天是否有更好的方法来做到这一点。
一些背景:使用 ObjectBox 的每个线程“缓存”一些资源(线程本地)。使用 ObjectBox “完成”(至少现在,例如服务于 eb 请求)线程后清理的最佳方法是调用 closeThreadResources() .一旦该线程返回(例如从线程池中),它将简单地再次分配它需要的资源。
查询:是的,您可以重复使用它们,但请确保锁定例如查询时的 Query 对象,因为您也可能与服务请求的其他线程竞争。

关于embedded-jetty - 使用 objectbox 在网络服务器上出现大量警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66665519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com