gpt4 book ai didi

java - 如何在 Servlet 中集成 memcached? Tomcat 和内存泄漏

转载 作者:行者123 更新时间:2023-11-29 06:13:11 25 4
gpt4 key购买 nike

在google中搜索memcached java,第一个结果是Using Memcached with Java .

这个家伙(自称​​只是互联网上的一些随机 SCSS !)提出了一个基于 net.spy.memcached 的单例。它基本上通过创建 20 个 MemcachedClient 实例来创建 20 个线程和连接。对于每个请求,它随机选择一个。

然而,这些线程和连接永远不会关闭,并且每次我在开发期间热交换应用程序时它们都会堆积起来(来自 Tomcat 7 的警告)。

SEVERE: The web application [/MyAppName] appears to have started a thread named
[...] but has failed to stop it. This is very likely to create a memory leak.

通过查看 MemcachedClient JavaDoc,我看到一个名为 shutdown 的方法,唯一的描述是“立即关闭”。关什么?客户端?服务器?我想是客户端,因为它在 MemcachedClient 中,我想这个方法会关闭连接并终止线程。 编辑:是的,它关闭了客户端。

问题 1 如何在应用程序热插拔之前强制执行 Tomcat 7 中的清理代码?

问题 2 这种使用 memcached 的方法(带有清理代码)是正确的还是我以不同的方式重新开始更好?

最佳答案

我认为创建 20 个内存缓存客户端很愚蠢——这就像创建 20 个独立的数据库连接池副本。该客户端的想法是它使用异步 IO 多路复用各种请求。 http://code.google.com/p/spymemcached/wiki/Optimizations

就关闭它而言,只需调用:yourClient.shutdown() 立即关闭,或者yourClient.shutdown(3, TimeUnit.SECONDS) 例如,留出一些时间来更正常地关闭。

这可以从您的 Servlet 的 .destroy 方法或整个 WAR 的上下文监听器中调用。

关于java - 如何在 Servlet 中集成 memcached? Tomcat 和内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6048917/

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