在不同机器上以solr-8.9.0加载csv文件的比较



我有两台机器,在这两台机器上我都安装了solr-8.9.0。我已经更新了solr核心,使用大小为546MB的相同csv文件。

机器1配置如下-

open file limit is 1024.
Max Processes Limit is 31168.

分配给solr-8.9.0的内存为512MB。这可以使用以下命令"ps-ef|grep solr"进行检查

solr    4955  6959  1 Jul19 pts/0    00:54:51 /home/solr/installer/jdk/jdk1.8.0_66/bin/java -server -Xms512m -Xmx512m -XX:+UseG1GC -XX:+PerfDisableSharedMem -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=250 -XX:+UseLargePages -XX:+AlwaysPreTouch -XX:+ExplicitGCInvokesConcurrent -verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/home/solr/Lucene/solr/solr-8.9.0/server/logs/solr_gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M -Dsolr.jetty.inetaccess.includes= -Dsolr.jetty.inetaccess.excludes= -Dsolr.log.dir=/home/solr/Lucene/solr/solr-8.9.0/server/logs -Djetty.port=8983 -DSTOP.PORT=7983 -DSTOP.KEY=solrrocks -Duser.timezone=UTC -XX:-OmitStackTraceInFastThrow -XX:OnOutOfMemoryError=/home/solr/Lucene/solr/solr-8.9.0/bin/oom_solr.sh 8983 /home/solr/Lucene/solr/solr-8.9.0/server/logs -Djetty.home=/home/solr/Lucene/solr/solr-8.9.0/server -Dsolr.solr.home=/home/solr/Lucene/solr/solr-8.9.0/server/solr -Dsolr.data.home= -Dsolr.install.dir=/home/solr/Lucene/solr/solr-8.9.0 -Dsolr.default.confdir=/home/solr/Lucene/solr/solr-8.9.0/server/solr/configsets/_default/conf -Xss256k -Dsolr.log.muteconsole -jar start.jar --module=http

要加载csv文件,已使用以下命令。

curl 'http://localhost:8983/solr/comparison/update?commit=true&separator=|' --data-binary @/home/solr/data_546MB_7fields.csv -H 'Content-type:application/csv'

处理器型号名称:Intel(R(Core(TM(i7-7700 CPU@3.60GHz

处理器数量-8

RAM-8GB

加载546M的文件时,solr-8.9.0需要5分7秒。

机器2配置如下-

open file limit is 4096.
Max Processes Limit is 9216.

分配给solr-8.9.0的内存为32GB。这可以使用以下命令"ps-ef|grep solr"进行检查

solr    28821     1 62 11:44 pts/1    00:16:28 /home/solr/installer/jdk1.8.0_66/bin/java -server -Xms10240m -Xmx32768m -XX:+UseG1GC -XX:+PerfDisableSharedMem -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=250 -XX:+UseLargePages -XX:+AlwaysPreTouch -XX:+ExplicitGCInvokesConcurrent -verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/home/solr/installer/solr/solr-8.9.0/server/logs/solr_gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M -Dsolr.jetty.inetaccess.includes= -Dsolr.jetty.inetaccess.excludes= -Dsolr.log.dir=/home/solr/installer/solr/solr-8.9.0/server/logs -Djetty.port=8983 -DSTOP.PORT=7983 -DSTOP.KEY=solrrocks -Duser.timezone=UTC -XX:-OmitStackTraceInFastThrow -XX:OnOutOfMemoryError=/home/solr/installer/solr/solr-8.9.0/bin/oom_solr.sh 8983 /home/solr/installer/solr/solr-8.9.0/server/logs -Djetty.home=/home/solr/installer/solr/solr-8.9.0/server -Dsolr.solr.home=/home/solr/installer/solr/solr-8.9.0/server/solr -Dsolr.data.home= -Dsolr.install.dir=/home/solr/installer/solr/solr-8.9.0 -Dsolr.default.confdir=/home/solr/installer/solr/solr-8.9.0/server/solr/configsets/_default/conf -Xss256k -Dsolr.log.muteconsole -jar start.jar --module=http

处理器型号名称:Intel(R(Xeon(R(CPU E5-2697 v2@2.70GHz

处理器数量-48

RAM-128GB

加载大小为546M的文件时,solr-8.9.0需要9分28秒。

为什么solr在机器2上运行加载csv文件的时间是机器1的1.65倍,如果事实上我认为机器2打开文件的时间限制应该更短,并且分配给solr的内存高于机器1。

真的很糟糕。我对此还很陌生,所以我已经试着发布了你需要了解我问题的所有内容。非常感谢你的帮助。

是否有一个重要的原因可以继续使用旧的Java 8(甚至比这个基于目录名的旧版本更新66更重要?(您在以后的版本中错过了很多改进。

如果没有JDK Flight Recorder或Linux perf等评测程序的结果(例如,将火焰图作为可视化(,我只能猜测您提供的哪些参数可能会导致速度减慢。

尝试删除具有此大堆大小的选项-XX:+AlwaysPreTouch-Xmx32768m,因为在Java 8中,G1收集器是单线程的。

如果您不需要所有的内存来进行压缩指针(oops(之类的优化,使用的内存越少,代码运行得越快(除非堆太满,并且您经常运行full GC,或者其他问题,如https://plumbr.io/handbook/gc-tuning-in-practice/premature-promotion(

如果你需要继续使用Java 8,你至少应该确保你使用最新版本(不是5年前的66更新(,也许不要使用在旧版本中仍然有点bug的G1GC,而是使用默认版本,如果你不在乎暂停时间,它应该是-XX:+UseParallelGC。(如果你确实有关心暂停时间的交互式用户,你可能想比较其他选项,比如CMS或实验性的Shenandoah(。

要了解应用程序需要多少堆内存,您可能需要使用以下工具分析solr_gc.log:https://gceasy.io/

来源:

  • https://www.elastic.co/blog/a-heap-of-trouble
  • https://access.redhat.com/solutions/2685771
  • 预接触JVM堆很慢

最新更新