Tomcat Solr 内存使用情况

Tomcat Solr 内存使用情况

我在 Linux 服务器上的 tomcat 服务器上运行 solr,当我使用 top 命令时,我看到“VIRT”非常高

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4786 root      20   0 19.6g 3.8g  10m S  200 15.9   8:26.13 java
 1808 root      20   0 6437m 162m 4740 S    2  0.7 101:08.75 java
 4889 root      20   0 19352 1580 1064 R    1  0.0   0:00.08 top
31700 mysql     20   0 6677m 5.2g 4468 S    0 22.0 470:51.49 mysqld
    1 root      20   0 23708 1464  972 S    0  0.0   0:23.06 init

这可能是什么原因造成的,或者我该如何分析这个问题?

答案1

您看到如此高的虚拟内存使用率的原因是 Solr 使用 MMapFSDirectory 作为操作 Lucene 索引的默认类。此类将尝试将 Solr 控制下的任何索引映射到虚拟内存 - 核心/索引越多,情况就越糟。有趣的是,这超出了 JVM 的知识/控制范围。JVM 将仅报告您为 servlet 容器指定的最小/最大内存(例如 -Xms:128m -Xmx:1024m)。如果他们能警告人们或使用更保守的 directoryFactory 作为默认值,那就太好了。

更改 solrconfig.xml 中的行:

directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"

指向类似 NIOFSDirectoryFactory 的东西。

相关内容