問題描述
我的 Solr 系統有兩個內核(Solr 版本 3.6.1).當我在我們的專用 Solr 服務器上調用以下命令行來添加并索引文件時:
java -Durl=http://solrprod:8080/solr/original/update -jar/home/solr/solr3/biomina/solr/post.jar/home/solr/tmp/2008/c2m-dump-01.noDEID_clean.xml
/usr/share/tomcat7/logs/solr.2013-12-11.log
文件中出現異常(大約等待 6 分鐘后):
嚴重:org.apache.lucene.store.LockObtainFailedException:鎖獲取超時:NativeFSLock@/home/solr/solr3/biomina/solr/original/data/index/write.lock
(您可以在此消息的末尾看到它的詳細輸出).
我嘗試修改鎖的超時時間(通過將 writeLockTimeout
設置為 300000
),但這并沒有解決問題.我沒有使用任何自定義腳本,只是使用 Solr 3.1.6 附帶的 post.jar
來添加和索引.
關于需要更改哪些內容以消除此錯誤并成功將 XML 文件添加到 Solr 并對其進行索引有什么想法嗎?
/home/solr/solr3/biomina/solr/solr.xml的內容
:
<?xml version="1.0" encoding="UTF-8" ?><!--獲得 Apache 軟件基金會 (ASF) 的一項或多項許可貢獻者許可協議.請參閱分發的 NOTICE 文件這項工作以獲取有關版權所有權的更多信息.ASF 根據 Apache 許可證 2.0 版將此文件許可給您(許可證");除非符合以下規定,否則您不得使用此文件許可證.您可以在以下網址獲取許可證的副本http://www.apache.org/licenses/LICENSE-2.0除非適用法律要求或書面同意,否則軟件根據許可分發是在原樣"基礎上分發的,沒有任何明示或暗示的保證或條件.請參閱許可證以了解特定語言的管理權限和許可證下的限制.--><!--所有(相對)路徑都相對于安裝路徑持久性:將通過 API 所做的更改保存到此文件sharedLib:將在所有內核之間共享的 lib 目錄的路徑--><solr 持久化="true"><!--adminPath:管理核心的 RequestHandler 路徑.如果為null"(或不存在),則無法通過請求處理程序管理核心--><cores adminPath="/admin/cores"><core name="original" instanceDir="original"/><core name="deidentified" instanceDir="deidentified"/></核心></solr>
solrconfig.xml 的相關部分(對于名為 original
的核心):
<!-- maxFieldLength 指定每個索引的 *tokens* 的最大數量場地.默認值:10000 --><!-- <maxFieldLength>10000</maxFieldLength>--><!-- 等待 IndexWriter 寫入鎖定的最長時間(毫秒).默認值:1000 --><writeLockTimeout>300000</writeLockTimeout>
solrconfig.xml 的相關部分(對于名為 deidentified
的核心):
<!-- maxFieldLength 指定每個索引的 *tokens* 的最大數量場地.默認值:10000 --><!-- <maxFieldLength>10000</maxFieldLength>--><!-- 等待 IndexWriter 寫入鎖定的最長時間(毫秒).默認值:1000 --><writeLockTimeout>300000</writeLockTimeout>
異常的詳細輸出
2013 年 12 月 11 日上午 11:27:25 org.apache.solr.core.SolrCore 執行INFO:[原始] webapp=/solr path=/update params={} status=500 QTime=3000702013 年 12 月 11 日上午 11:32:25 org.apache.solr.common.SolrException 日志嚴重:org.apache.lucene.store.LockObtainFailedException:鎖定獲取超時:NativeFSLock@/home/solr/solr3/biomina/solr/original/data/index/write.lock在 org.apache.lucene.store.Lock.obtain(Lock.java:84)在 org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1098)在 org.apache.solr.update.SolrIndexWriter.<init>(SolrIndexWriter.java:84)在 org.apache.solr.update.UpdateHandler.createMainIndexWriter(UpdateHandler.java:101)在 org.apache.solr.update.DirectUpdateHandler2.openWriter(DirectUpdateHandler2.java:171)在 org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:219)在 org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:61)在 org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:115)在 org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:157)在 org.apache.solr.handler.XMLLoader.load(XMLLoader.java:79)在 org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:58)在 org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)在 org.apache.solr.core.SolrCore.execute(SolrCore.java:1376)在 org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:365)在 org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:260)在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:626)在 java.lang.Thread.run(Thread.java:804)2013 年 12 月 11 日上午 11:32:25 org.apache.solr.core.SolrCore 執行INFO:[原始] webapp=/solr path=/update params={} status=500 QTime=556916
系統詳情:
uname -aLinux solrprod 3.0.93-0.8-default #1 SMP Tue Aug 27 08:44:18 UTC 2013 (70ed288) x86_64 x86_64 x86_64 GNU/Linuxjava版本java版本1.7.0"Java(TM) SE 運行時環境(構建 pxa6470sr6-20131015_01(SR6))IBM J9 VM(build 2.6,JRE 1.7.0 Linux amd64-64 Compressed References 20131013_170512(啟用 JIT,啟用 AOT)J9VM - R26_Java726_SR6_20131013_1510_B170512JIT - r11.b05_20131003_47443GC - R26_Java726_SR6_20131013_1510_B170512_CMPRSSJ9CL-20131013_170512)JCL - 20131011_01 基于 Oracle 7u45-b18
以下修改解決了這個問題:
應用了 https://stackoverflow.com/a/3035916/236007 中描述的更改p>
切換到 Oracle Java 運行時(它是 IBM Java 運行時).
把
ulimit -v unlimited
放到/etc/init.d/tomcat7
中.修改
/usr/share/tomcat7/bin/setenv.sh
文件如下(給它大約4 GB內存):<代碼>export JAVA_OPTS="$JAVA_OPTS -Xmx4000m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/data/tomcat_dump"
I have two cores for our Solr system (Solr version 3.6.1). When I invoke the following command line on our dedicated Solr server to add and then index a file:
java -Durl=http://solrprod:8080/solr/original/update -jar /home/solr/solr3/biomina/solr/post.jar /home/solr/tmp/2008/c2m-dump-01.noDEID_clean.xml
I get an exception in /usr/share/tomcat7/logs/solr.2013-12-11.log
file (after about 6 minutes of waiting):
SEVERE: org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/home/solr/solr3/biomina/solr/original/data/index/write.lock
(You can see the detailed output of it at the end of this message).
I tried to modify the time-out for locks (by setting writeLockTimeout
to 300000
) , but this did not solve the problem. I'm not using any custom script, just the post.jar
that comes with Solr 3.1.6, to add and index.
Any ideas about what needs to be changed to get rid of this error and successfully add the XML file about to Solr and index it?
Contents of /home/solr/solr3/biomina/solr/solr.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
All (relative) paths are relative to the installation path
persistent: Save changes made via the API to this file
sharedLib: path to a lib directory that will be shared across all cores
-->
<solr persistent="true">
<!--
adminPath: RequestHandler path to manage cores.
If 'null' (or absent), cores will not be manageable via request handler
-->
<cores adminPath="/admin/cores">
<core name="original" instanceDir="original" />
<core name="deidentified" instanceDir="deidentified" />
</cores>
</solr>
Relevat part of solrconfig.xml (for the core named original
):
<indexConfig>
<!-- maxFieldLength specifies max number of *tokens* indexed per
field. Default: 10000 -->
<!-- <maxFieldLength>10000</maxFieldLength> -->
<!-- Maximum time to wait for a write lock (ms) for an IndexWriter.
Default: 1000 -->
<writeLockTimeout>300000</writeLockTimeout>
Relevat part of solrconfig.xml (for the core named deidentified
):
<indexConfig>
<!-- maxFieldLength specifies max number of *tokens* indexed per
field. Default: 10000 -->
<!-- <maxFieldLength>10000</maxFieldLength> -->
<!-- Maximum time to wait for a write lock (ms) for an IndexWriter.
Default: 1000 -->
<writeLockTimeout>300000</writeLockTimeout>
Detailed Output of Exception
Dec 11, 2013 11:27:25 AM org.apache.solr.core.SolrCore execute
INFO: [original] webapp=/solr path=/update params={} status=500 QTime=300070
Dec 11, 2013 11:32:25 AM org.apache.solr.common.SolrException log
SEVERE: org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/home/solr/solr3/biomina/solr/original/data/index/write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:84)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1098)
at org.apache.solr.update.SolrIndexWriter.<init>(SolrIndexWriter.java:84)
at org.apache.solr.update.UpdateHandler.createMainIndexWriter(UpdateHandler.java:101)
at org.apache.solr.update.DirectUpdateHandler2.openWriter(DirectUpdateHandler2.java:171)
at org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler2.java:219)
at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:61)
at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:115)
at org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:157)
at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:79)
at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:58)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1376)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:365)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:260)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:626)
at java.lang.Thread.run(Thread.java:804)
Dec 11, 2013 11:32:25 AM org.apache.solr.core.SolrCore execute
INFO: [original] webapp=/solr path=/update params={} status=500 QTime=556916
System details:
uname -a
Linux solrprod 3.0.93-0.8-default #1 SMP Tue Aug 27 08:44:18 UTC 2013 (70ed288) x86_64 x86_64 x86_64 GNU/Linux
java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build pxa6470sr6-20131015_01(SR6))
IBM J9 VM (build 2.6, JRE 1.7.0 Linux amd64-64 Compressed References 20131013_170512 (JIT enabled, AOT enabled)
J9VM - R26_Java726_SR6_20131013_1510_B170512
JIT - r11.b05_20131003_47443
GC - R26_Java726_SR6_20131013_1510_B170512_CMPRSS
J9CL - 20131013_170512)
JCL - 20131011_01 based on Oracle 7u45-b18
The following modifications solved the issue:
Applied the changes described at https://stackoverflow.com/a/3035916/236007
Switched to Oracle Java runtime (it was IBM Java runtime).
Put the
ulimit -v unlimited
in/etc/init.d/tomcat7
.Modified the
/usr/share/tomcat7/bin/setenv.sh
file as the following (giving it about 4 GB memory):export JAVA_OPTS="$JAVA_OPTS -Xmx4000m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/data/tomcat_dump"
這篇關于簡單使用 Solr 時如何解決“鎖定獲取超時"?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!