不规则地具有QTime的Solr> 50000ms

时间:2014-07-07 08:00:54

标签: solr

我正在开发一个solr-4.8.1的安装。我有一个脚本运行查询ID:*每分钟一次,并提取QTime和numFound。结果如下:

2014-07-07:09:30:12 QTime=10 numFound="6095776"
2014-07-07:09:32:02 QTime=50022 numFound="6095776"
2014-07-07:09:33:02 QTime=30 numFound="6095776"
2014-07-07:09:34:02 QTime=19 numFound="6095776"
2014-07-07:09:35:02 QTime=10 numFound="6095776"
2014-07-07:09:36:52 QTime=50029 numFound="6095776"
2014-07-07:09:37:52 QTime=26 numFound="6095776"
2014-07-07:09:38:52 QTime=12 numFound="6095776"
2014-07-07:09:39:52 QTime=11 numFound="6095776"
2014-07-07:09:40:52 QTime=12 numFound="6095776"

如您所见,偶尔QTime> 50秒。

进一步观察:

  1. 首先我认为它可能与5分钟的自动提交间隔相关,但是长QTime之间的时间是不规则的,而不是每5分钟一次。此外,我没有喂食任何东西。
  2. 除了每分钟一次查询(或者更确切地说,查询之间的差异为一分钟),机器什么都不做。没有查询负载。
  3. 当我们索引的文档少得多时,行为已经开始了。
  4. 任何想法在哪里看?

    编辑:

    我仔细查看了日志并找到了奇怪的东西。所有10个核心(全部在同一台机器上)报告QTime为0或1,但其中一个记录了其他9秒后的50秒。(为简洁起见,记录了对数)

    10:53:55.452 [core000] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core000/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=610796 status=0 QTime=1 
    10:53:55.452 [core005] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core005/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=609562 status=0 QTime=0 
    10:53:55.453 [core002] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core002/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=610392 status=0 QTime=1 
    10:53:55.453 [core004] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core004/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=609186 status=0 QTime=0 
    10:53:55.452 [core001] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core001/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=608294 status=0 QTime=0 
    10:53:55.454 [core003] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core003/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=612155 status=0 QTime=1 
    10:53:55.455 [core006] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core006/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=608606 status=0 QTime=1 
    10:53:55.456 [core009] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core009/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=608956 status=0 QTime=1 
    10:53:55.458 [core008] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core008/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=608847 status=0 QTime=1 
    10:54:45.469 [core007] params={NOW=1404723235442&shard.url=http://x.x.x.x/solr/core007/&df=content&fl=id,score&start=0&q=id:*&distrib=false&wt=javabin&isShard=true&fsv=true&version=2&rows=0} hits=608982 status=0 QTime=1 
    10:54:45.470 [core000] params={start=0&q=id:*&wt=xml&rows=0} hits=6095776 status=0 QTime=50028 
    

    它似乎总是正好是50秒(加上一些最小的开销),好像有一些超时,这恰好是50秒。这使得很难相信它是垃圾收集器(如在一个答案中提出的那样,我将继续关注),特别是因为它独立于索引内容而发生。

    编辑: 我似乎已经找到了一个完全疯狂的伪解决方案:试图弄清楚我发生了什么,我将strace连接到solr-process。从那以后,50年代不再出现了。

1 个答案:

答案 0 :(得分:0)

查询时间的大量峰值通常来自Solr的容器VM中的GC暂停,或者(很少)即将发生的硬件故障(从磁盘读取失败)。后者应在您的系统日志中指明。

然而前者是一个广泛的问题,其中可用的内存量,专用于Solr的内存,负载等都是影响因素。维基上的一个好地方是Solr GC Pause Problems。该页面的原作者也有a guide for his own settings,但您的结果会因查询配置文件和可用内存而异。您可以要求VM将GC问题记录到文件中,其中显示GC的类型及其运行的总时间。如果您将任何广泛的GC与查看时间延迟的时间相关联,那么如果GC实际上是一个问题,它可能会提示。

相关问题