約 250 万ノードの Neo4J テスト データベースがあります。すべてのノードを更新して、いくつかの追加プロパティを含めようとしています。これを実現するために、REST API を使用して各ノードを順番に更新しています。
プロセスのほぼ途中で、サーバーからメモリ不足エラーの応答を受け取り、REST 応答で次のスタック トレースが返されます。
{
"メッセージ": "java.io.IOException: マップに失敗しました",
"例外": "RuntimeException",
"フルネーム": "java.lang.RuntimeException",
"スタックトレース" : [
"org.neo4j.index.impl.lucene.LuceneDataSource.refreshSearcher(LuceneDataSource.java:514)",
"org.neo4j.index.impl.lucene.LuceneDataSource.refreshSearcherIfNeeded(LuceneDataSource.java:631)",
"org.neo4j.index.impl.lucene.LuceneDataSource.getIndexSearcher(LuceneDataSource.java:575)",
"org.neo4j.index.impl.lucene.LuceneIndex.query(LuceneIndex.java:268)", "org.neo4j.index.impl.lucene.LuceneIndex.get(LuceneIndex.java:207)",
"org.neo4j.kernel.AbstractAutoIndexerImpl$ReadOnlyIndexToIndexAdapter.get(AbstractAutoIndexerImpl.java:236)",
"org.neo4j.cypher.internal.spi.gdsimpl.GDSBackedQueryContext$$anon$1.indexGet(GDSBackedQueryContext.scala:84)",
"org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder$$anonfun$getNodeGetter$1.apply(IndexQueryBuilder.scala:76)",
"org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder$$anonfun$getNodeGetter$1.apply(IndexQueryBuilder.scala:73)",
"org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:36)",
"org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:35)",
"scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)",
"scala.collection.Iterator$class.foreach(Iterator.scala:727)",
"scala.collection.AbstractIterator.foreach(Iterator.scala:1156)",
"scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)",
"scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:178)",
"scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:45)",
"scala.collection.TraversableOnce$class.to(TraversableOnce.scala:259)",
"scala.collection.AbstractIterator.to(Iterator.scala:1156)",
"scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:243)",
"scala.collection.AbstractIterator.toList(Iterator.scala:1156)",
"org.neo4j.cypher.internal.pipes.EagerPipe.internalCreateResults(EagerPipe.scala:35)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:69)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.org$neo4j$cypher$internal$executionplan$ExecutionPlanImpl$$prepareStateAndResult(ExecutionPlanImpl.scala:164)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$6.apply(ExecutionPlanImpl.scala:146)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$6.apply(ExecutionPlanImpl.scala:145)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.execute(ExecutionPlanImpl.scala:38)",
"org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:72)",
"org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:76)",
"org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79)",
"org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:94)",
"java.lang.reflect.Method.invoke(Method.java:606)",
"org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)",
"org.neo4j.server.extension.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:57)"
]、
"原因" : {
"メッセージ": "マップに失敗しました",
"原因" : {
"メッセージ": "マップに失敗しました",
"例外": "OutOfMemoryError",
"スタックトレース" : [
"sun.nio.ch.FileChannelImpl.map0(ネイティブメソッド)",
"sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:846)",
"org.apache.lucene.store.MMapDirectory$MMapIndexInput.(MMapDirectory.java:270)",
"org.apache.lucene.store.MMapDirectory.openInput(MMapDirectory.java:220)",
"org.apache.lucene.store.FSDirectory.openInput(FSDirectory.java:345)",
"org.apache.lucene.index.CompoundFileWriter.copyFile(CompoundFileWriter.java:231)",
"org.apache.lucene.index.CompoundFileWriter.close(CompoundFileWriter.java:201)",
"org.apache.lucene.index.DocumentsWriter.flush(DocumentsWriter.java:604)",
"org.apache.lucene.index.IndexWriter.doFlush(IndexWriter.java:3587)",
"org.apache.lucene.index.IndexWriter.flush(IndexWriter.java:3552)",
"org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:450)",
"org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:399)",
"org.apache.lucene.index.DirectoryReader.doOpenFromWriter(DirectoryReader.java:413)",
"org.apache.lucene.index.DirectoryReader.doOpenIfChanged(DirectoryReader.java:432)",
"org.apache.lucene.index.DirectoryReader.doOpenIfChanged(DirectoryReader.java:375)",
"org.apache.lucene.index.DirectoryReader.doOpenIfChanged(DirectoryReader.java:392)",
"org.apache.lucene.index.IndexReader.openIfChanged(IndexReader.java:634)",
"org.neo4j.index.impl.lucene.LuceneDataSource.refreshSearcher(LuceneDataSource.java:503)",
"org.neo4j.index.impl.lucene.LuceneDataSource.refreshSearcherIfNeeded(LuceneDataSource.java:631)",
"org.neo4j.index.impl.lucene.LuceneDataSource.getIndexSearcher(LuceneDataSource.java:575)",
"org.neo4j.index.impl.lucene.LuceneIndex.query(LuceneIndex.java:268)",
"org.neo4j.index.impl.lucene.LuceneIndex.get(LuceneIndex.java:207)",
"org.neo4j.kernel.AbstractAutoIndexerImpl$ReadOnlyIndexToIndexAdapter.get(AbstractAutoIndexerImpl.java:236)",
"org.neo4j.cypher.internal.spi.gdsimpl.GDSBackedQueryContext$$anon$1.indexGet(GDSBackedQueryContext.scala:84)",
"org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder$$anonfun$getNodeGetter$1.apply(IndexQueryBuilder.scala:76)",
"org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder$$anonfun$getNodeGetter$1.apply(IndexQueryBuilder.scala:73)",
"org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:36)",
"org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:35)", "scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)",
"scala.collection.Iterator$class.foreach(Iterator.scala:727)",
"scala.collection.AbstractIterator.foreach(Iterator.scala:1156)",
"scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)",
"scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:178)",
"scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:45)",
"scala.collection.TraversableOnce$class.to(TraversableOnce.scala:259)",
"scala.collection.AbstractIterator.to(Iterator.scala:1156)",
"scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:243)",
"scala.collection.AbstractIterator.toList(Iterator.scala:1156)",
"org.neo4j.cypher.internal.pipes.EagerPipe.internalCreateResults(EagerPipe.scala:35)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:69)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.org$neo4j$cypher$internal$executionplan$ExecutionPlanImpl$$prepareStateAndResult(ExecutionPlanImpl.scala:164)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$6.apply(ExecutionPlanImpl.scala:146)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$6.apply(ExecutionPlanImpl.scala:145)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.execute(ExecutionPlanImpl.scala:38)", "org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:72)",
"org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:76)",
"org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79)",
"org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:94)",
"java.lang.reflect.Method.invoke(Method.java:606)",
"org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)",
"org.neo4j.server.extension.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:57)"
]、
"フルネーム": "java.lang.OutOfMemoryError"
}、
"例外": "IOException",
"スタックトレース" : [
"sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:849)",
"org.apache.lucene.store.MMapDirectory$MMapIndexInput.(MMapDirectory.java:270)",
"org.apache.lucene.store.MMapDirectory.openInput(MMapDirectory.java:220)",
"org.apache.lucene.store.FSDirectory.openInput(FSDirectory.java:345)",
"org.apache.lucene.index.CompoundFileWriter.copyFile(CompoundFileWriter.java:231)",
"org.apache.lucene.index.CompoundFileWriter.close(CompoundFileWriter.java:201)",
"org.apache.lucene.index.DocumentsWriter.flush(DocumentsWriter.java:604)",
"org.apache.lucene.index.IndexWriter.doFlush(IndexWriter.java:3587)",
"org.apache.lucene.index.IndexWriter.flush(IndexWriter.java:3552)",
"org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:450)",
"org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:399)",
"org.apache.lucene.index.DirectoryReader.doOpenFromWriter(DirectoryReader.java:413)",
"org.apache.lucene.index.DirectoryReader.doOpenIfChanged(DirectoryReader.java:432)",
"org.apache.lucene.index.DirectoryReader.doOpenIfChanged(DirectoryReader.java:375)",
"org.apache.lucene.index.DirectoryReader.doOpenIfChanged(DirectoryReader.java:392)",
"org.apache.lucene.index.IndexReader.openIfChanged(IndexReader.java:634)",
"org.neo4j.index.impl.lucene.LuceneDataSource.refreshSearcher(LuceneDataSource.java:503)",
"org.neo4j.index.impl.lucene.LuceneDataSource.refreshSearcherIfNeeded(LuceneDataSource.java:631)",
"org.neo4j.index.impl.lucene.LuceneDataSource.getIndexSearcher(LuceneDataSource.java:575)",
"org.neo4j.index.impl.lucene.LuceneIndex.query(LuceneIndex.java:268)",
"org.neo4j.index.impl.lucene.LuceneIndex.get(LuceneIndex.java:207)",
"org.neo4j.kernel.AbstractAutoIndexerImpl$ReadOnlyIndexToIndexAdapter.get(AbstractAutoIndexerImpl.java:236)",
"org.neo4j.cypher.internal.spi.gdsimpl.GDSBackedQueryContext$$anon$1.indexGet(GDSBackedQueryContext.scala:84)",
"org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder$$anonfun$getNodeGetter$1.apply(IndexQueryBuilder.scala:76)",
"org.neo4j.cypher.internal.executionplan.builders.IndexQueryBuilder$$anonfun$getNodeGetter$1.apply(IndexQueryBuilder.scala:73)",
"org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:36)",
"org.neo4j.cypher.internal.pipes.StartPipe$$anonfun$internalCreateResults$1.apply(StartPipe.scala:35)",
"scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)",
"scala.collection.Iterator$class.foreach(Iterator.scala:727)",
"scala.collection.AbstractIterator.foreach(Iterator.scala:1156)",
"scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)",
"scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:178)",
"scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:45)",
"scala.collection.TraversableOnce$class.to(TraversableOnce.scala:259)",
"scala.collection.AbstractIterator.to(Iterator.scala:1156)",
"scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:243)",
"scala.collection.AbstractIterator.toList(Iterator.scala:1156)",
"org.neo4j.cypher.internal.pipes.EagerPipe.internalCreateResults(EagerPipe.scala:35)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:69)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.org$neo4j$cypher$internal$executionplan$ExecutionPlanImpl$$prepareStateAndResult(ExecutionPlanImpl.scala:164)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$6.apply(ExecutionPlanImpl.scala:146)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$6.apply(ExecutionPlanImpl.scala:145)",
"org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.execute(ExecutionPlanImpl.scala:38)", "org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:72)",
"org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:76)",
"org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79)",
"org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:94)",
"java.lang.reflect.Method.invoke(Method.java:606)",
"org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)",
"org.neo4j.server.extension.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:57)"
]、
"フルネーム": "java.io.IOException"
}
}
リクエストのコンテンツとヘッダーの例も含めました。
JSON コンテンツ:
{"query":"START myNode=node:node_auto_index(myIndex = {myIndex}) SET myNode.propOne = {propOne}, myNode.propTwo = {propTwo}, myNode.propThree = {propThree}","params":{ "propOne":"valueOne","propTwo":"valueTwo","propThree":"valueThree","myIndex":"indexValue"}}
リクエスト ヘッダー:
POST /db/data/cypher HTTP/1.1
ホスト: ローカルホスト:7474
受け入れる: アプリケーション/json
コンテンツ タイプ: アプリケーション/json
コンテンツの長さ:
neo4j-wrapper.conf
wrapper.java.additional=-Dorg.neo4j.server.properties=conf/neo4j-server.properties
wrapper.java.additional=-Djava.util.logging.config.file=conf/logging.properties
wrapper.java.additional=-Dlog4j.configuration=file:conf/log4j.properties
##************************************************ ********************
# JVM パラメータ
##************************************************ ********************
wrapper.java.additional=-XX:+UseConcMarkSweepGC
wrapper.java.additional=-XX:+CMSClassUnloadingEnabled
# 次の行のコメントを外して、ガベージ コレクションのログを有効にします
#wrapper.java.additional=-Xloggc:data/log/neo4j-gc.log
#wrapper.java.additional=-XX:+PrintGCDetails
#wrapper.java.additional=-XX:+PrintGCDateStamps
#wrapper.java.additional=-XX:+PrintGCApplicationStoppedTime
# 初期 Java ヒープ サイズ (MB)
wrapper.java.initmemory=2048
# 最大 Java ヒープ サイズ (MB)
wrapper.java.maxmemory=8192
##************************************************ ********************
# ラッパーの設定
##************************************************ ********************
# デフォルトの pidfile と lockfile を上書き
#wrapper.pidfile=../data/neo4j-server.pid
#wrapper.lockfile=../data/neo4j-server.lck
##************************************************ ********************
# Wrapper Windows NT/2000/XP サービス プロパティ
##************************************************ ********************
# 警告 - アプリケーションが実行中の場合は、これらのプロパティを変更しないでください。
# この構成ファイルを使用して、サービスとしてインストールされました。
# このセクションを変更する前に、サービスをアンインストールしてください。の
# その後、サービスを再インストールできます。
# サービス名
wrapper.name=neo4j
# Linux のインストールに使用するユーザー アカウント。現在のデフォルトになります
# 設定されていない場合はユーザー。
wrapper.user=neo4j
wrapper.user.created=false
neo4j.properties
# 低レベル グラフ エンジンのデフォルト値
neostore.nodestore.db.mapped_memory=100M
neostore.relationshipstore.db.mapped_memory=2G
neostore.propertystore.db.mapped_memory=90M
neostore.propertystore.db.strings.mapped_memory=250M
neostore.propertystore.db.arrays.mapped_memory=130M
# ストアを 1.4 -> 1.5 または 1.4 -> 1.6 にアップグレードできるようにするには、これを有効にします。
#allow_store_upgrade=true
# デフォルト以外のパーサーを指定するには、これを有効にします。1.5、1.6、1.7が利用可能
#cypher_parser_version=1.6
#論理ログを保持し、デバッグに役立ちますが、より多くのディスク容量を使用します。
# 従来の理由 履歴ログの保存に必要なスペースを制限するには、次のような値を使用します
# as: "true" ではなく "7 日" または "100M サイズ"
keep_logical_logs=真
# 自動索引付け
# ノードの自動インデックス作成を有効にします。デフォルトは false
node_auto_indexing=true
# 有効な場合、自動インデックスされるノード プロパティ キー
node_keys_indexable=user_id,group_id,program_id
# リレーションシップの自動インデックス作成を有効にします。デフォルトは false
#relationship_auto_indexing=true
# 有効な場合、自動索引付けされる関係プロパティー・キー
#relationship_keys_indexable=名前,年齢
注意して読んでください:
Node プロパティを更新するための別の方法を探しているわけではありません。私は、このエラーを回避する方法を簡単に思いつくことができると確信しています。この質問を投稿する目的は、このエラーの性質をよりよく理解することです。そもそも何が原因なの?このエラーの原因を理解することが、本番環境での回避に役立つことを願っています。
前もって感謝します。