8.9.0中的csv文件的比较

arknldoa  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(255)

赏金4天后到期。此问题的答案有资格获得+50声誉奖励。user752590正在寻找来自可靠来源的答案

我有两台机器,在这两台机器上我都安装了solr-8.9.0。我已经更新了solr核心,使用相同的csv文件,大小为546mb。
机器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'

处理器型号名称:英特尔(r)核心(tm)i7-7700处理器@3.60ghz
处理器数量-8
ram-8gb
加载具有546m的文件时,solr-8.9.0需要5分7秒。
machine-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

处理器型号名称:英特尔(r)至强(r)cpu e5-2697 v2@2.70ghz
处理器数量-48
ram-128gb
加载大小为546m的文件时,solr-8.9.0需要9分28秒。
为什么运行在机器2上的solr加载csv文件的时间是机器1的1.65倍,如果我认为机器2作为打开文件限制所花费的时间更少,并且分配给solr的内存高于机器1的话。
这真的很糟糕。我对这一点还很陌生,所以我试着把你需要了解我的问题的所有东西都贴出来。非常感谢你的帮助。

slmsl1lt

slmsl1lt1#

是否有一个重要的原因让您继续使用旧的Java8(甚至比基于目录名的旧版本更新66还要多?)您在以后的版本中错过了很多改进。
如果没有jdk flight recorder或linux perf等分析器的结果(例如,火焰图作为可视化),我只能猜测您提供的哪些参数可能会导致减速。
尝试删除该选项 -XX:+AlwaysPreTouch 对于如此大的堆大小: -Xmx32768m 因为在Java8中,g1收集器是单线程的。
也可以考虑减少最大堆大小,如果你不需要所有的内存来允许优化,比如压缩指针(OOP),你使用的内存越少,你的代码运行得越快(除非堆太满,而且你经常运行满GC,或其他问题,例如https://plumbr.io/handbook/gc-tuning-in-practice/premature-promotion )
如果您需要继续使用Java8,您至少应该确保您使用的是最新版本(不是5年前的66更新),也可能不是在g1gc上,因为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堆很慢

相关问题