Solr的Tomcat上,Windows操作系统占用所有内存(Solr on Tomcat, Win

2019-10-19 05:35发布

更新

我已经配置了XMS(初始内存)和XMX(最大内存分配JVM paramters,我已经迷上了视觉VM监测Tomcat的内存使用量的重新启动后,当索引程序运行,Tomcat的内存使用情况似乎确定,内存消耗是在定义的JVM则params的范围内。(见图像)
如此看来,文件系统缓存正在消耗所有剩余的内存,并且不降内存? 有没有办法解决这个问题,比如改变NGRAM大小或directoryFactory?


我很新到Solr和Tomcat的,但在这里我们去:

操作系统Windows Server 2008中

  • 4 CPU
  • 8 GB内存

Tomcat服务版本7.0(64位)

  • 只有运行的Solr
  • 无可选参数JVM设置,而是通过GUI配置的Solr

Solr的版本4.5.0。

  • 一个核心实例(包括查询和索引)

架构的配置:

  • minGramSize = “2” maxGramSize = “20”
  • 大多数字段被存储=“真”(需要的)

Solr的配置:

  • ramBufferSizeMB:100
  • maxIndexingThreads:8
  • directoryFactory:MMapDirectory
  • 自动提交:maxdocs 10000,MAXTIME 15000,opensearcher假
  • 缓存(缺省值):
    filtercache INITIALSIZE:512尺寸:512 autowarm:0
    queryresultcache INITIALSIZE:512尺寸:512 autowarm:0
    documentcache INITIALSIZE:512尺寸:512 autowarm:0

我们正在使用的.Net服务(基于Solr.Net)用于更新和插入在单个核心的Solr实例文档。 发送到Solr的文件大小从1 KB高达8MB,我们要发送的文件分批,使用一个或多个线程。 Solr的指数的当前大小约为15GB。

索引服务正在运行约3一4小时完成所有的插入和更新到Solr。 当索引程序运行Tomcat进程的内存使用量持续增长达> 7GB拉姆和不减少,甚至24小时后。 Tomcat的,或刷新核心在Solr管理重新启动后,内存降回1一2 GB RAM。 内存泄漏?

是否有可能配置在Tomcat的Solr的过程中,最大内存使用情况? 是否有其他的选择吗? 最佳做法?

谢谢

Answer 1:

您可以设置JVM内存的tomcat设置上。 我通常做这与在Tomcat中的bin目录下setenv.bat文件(相同的目录catalina.bat中/ .SH文件)。

调整下列值按您的需求:

set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m"

这里有明确的指令:

http://wiki.razuna.com/display/ecp/Adjusting+Memory+Settings+for+Tomcat


Answer 2:

首先,你必须设置XMX参数限制可以被Tomcat使用的最大内存。 但在SOLR的情况下,你要记住,它使用了大量的内存JVM之外来处理文件系统缓存。 所以,千万不要在这种情况下使用的可用内存的50%以上为Tomcat。



Answer 3:

我有以下设置(尽管小得多的问题)...... 5000页的文件,文件大小从1MB到30MB。 我们有一个2 CPU / 2GB系统上1GB下运行的Tomcat进程的要求

实验位后,我想出了JAVA这些设置。

-Xms448m
-Xmx768m
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:ParallelCMSThreads=4
-XX:PermSize=64m
-XX:MaxPermSize=64m
-XX:NewSize=384m
-XX:MaxNewSize=384m
-XX:TargetSurvivorRatio=90
-XX:SurvivorRatio=6
-XX:+CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=55
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+OptimizeStringConcat
-XX:+UseCompressedOops
-XX:MinHeapFreeRatio=5
-XX:MaxHeapFreeRatio=5

这些帮助,但我遇到使用太多显存的内存不足和Tomcat的问题,即使这样一个小数据集。

这似乎拥有很好的解决方案或事物/配置到目前为止,我还设置如下:

  1. 禁止除QueryResultCache其他所有缓存
  2. 不包含文本/在你的查询内容字段仅包括ID
  3. 不要使用行的大小大于10,不包括突出。
  4. 如果使用的是高亮(这是最大的罪魁祸首),您可以通过查询该文件标识符第一,然后用突出,并与id字段搜索词包括再次进行查询。

最后,对于内存的问题。 我只好勉强实现一个非正统的方法来解决tomcat的/ Java内存粗加工的问题(如Java从未还给内存的OS)。

我创建了一个与调试权限运行,并调用windows API函数来强制Tomcat进程释放内存的内存州长服务。 我也有一个全球性的互斥体,防止进入到tomcat而发生这种情况时,一个电话用武之地。

令人惊讶的这一做法正在制定好,但不能没有自己的危险,如果你不具备控制访问到Tomcat的选项。

如果你找到一个更好的解决方案/配置更改,请告诉我们。



文章来源: Solr on Tomcat, Windows OS consumes all memory