【问题标题】:Limiting memory usage for Solr on Jetty限制 Jetty 上 Solr 的内存使用
【发布时间】:2011-04-25 13:01:12
【问题描述】:

我有一个内存受限的环境,我正在使用以下命令在 Jetty 上运行 Solr

java -jar -Xmx64M -Xmn32M -Xss512K start.jar

但 Solr 实例(或 Jetty)的总内存消耗似乎远高于我提供的堆限制。 ps 的输出是:

ps -u buradayiz -o rss,etime,pid,command

155164 01:37:40 21989 java -jar -Xmx64M -Xmn32M -Xss512K start.jar

如您所见,RSS 超过 150M。我怎样才能避免这种情况?当 Solr/Jetty 使用的内存比我允许的多时,我只想获得一个简单的 OutOfMemory 异常。

我了解我提供的堆限制与实际内存使用量之间可能存在差异,但对我来说,差异因子为 2(实际上是 2.5)似乎很大。我一定是错过了什么。

谢谢。

【问题讨论】:

    标签: java memory solr jetty


    【解决方案1】:

    有许多因素会导致超出堆规范的内存使用量。

    在您的情况下,一个主要的问题是永久代。它用于为运行应用程序所需的所有依赖项和其他一些东西加载类。由于必要的类,对于给定的应用程序,没有太多绕过某个最小值。您可能需要大约 64M(可能更多)才能在 Jetty 上运行 Solr。

    您可以指定一个最大大小以防止永久代因其他事物而增长,例如将-XX:MaxPermSize=64M 添加到您的命令行。不过,它不太可能有太大帮助,如果需要更多,它甚至可能会破坏它。通常它几乎都被您需要的类使用。

    堆以外的内存使用的另一个因素是每个线程的堆栈大小。在您的案例中,每个线程将消耗 512K。您可能可以安全地指定 256K,尽管您可能没有足够的线程在运行,这并不重要。

    【讨论】:

      【解决方案2】:

      我也有同样的问题;试图在有限的环境中运行它。 (最大 400mb 内存/虚拟机大小)。这个解决方案似乎至少让它运行起来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        • 2012-09-28
        • 2017-05-12
        • 2011-03-27
        相关资源
        最近更新 更多