【问题标题】:Weird Memory Usage by TomcatTomcat 奇怪的内存使用情况
【发布时间】:2014-12-23 07:00:25
【问题描述】:

这是一个模糊的问题。因此,请随时询问任何具体数据。

我们有一个运行两个 web 服务的 tomcat 服务器。使用 spring 构建的一个 tomcat。我们使用 mysql 来处理 90% 的任务,使用 mongo 来缓存 jsons (10%)。另一个 Web 服务是使用 grails 编写的。这两个服务都是中型代码库(每个大约 35k 行代码)

只有在有 HTTP 请求时才会进行计算(无批处理)。每个请求大约有 2000 个数据库命中(我知道它的巨大。我们正在努力)。请求速率约为 30 req/min。对于一个特定的请求,有一个非常昂贵的图像处理。任何地方都没有 JNI

我们发现了一个奇怪的行为。昨晚,我可以确认大约 12 个小时没有对服务器的请求。但是当我查看内存消耗时,它非常混乱:

在没有任何请求的情况下,内存不断地从 500Mb 跳到 1.2Gb(700Mb 的跳动令人担忧)。如前所述,服务器端没有计算。我不确定它是否是内存泄漏:

  1. 内存使用量下降。 (如果内存没有下降,事情会容易得多)。
  2. 这种行为可以通过基于 SoftReference 左右的缓存重现。带有完整的gc。但我没有在任何地方使用它们(不确定是否有其他东西在使用它)

还有什么原因。有什么担心的吗?

PS:最近我们经常发生内存崩溃(不是错误,而是 JVM 崩溃)。

【问题讨论】:

  • 连接池泄漏?
  • 你使用ThreadLocal变量吗?
  • @shazin ThreadLocal 没有。
  • @ochi 可以。但是能造成这么大的消耗吗
  • 确保您使用的任何第三方库也没有 ThreadLocal,因为带有线程池的 ThreadLocal 可能会导致像这样不必要的内存保留。

标签: java spring tomcat


【解决方案1】:

这实际上是正常行为。你只是看到垃圾收集发生了。

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多