約 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 プロパティを更新するための別の方法を探しているわけではありません。私は、このエラーを回避する方法を簡単に思いつくことができると確信しています。この質問を投稿する目的は、このエラーの性質をよりよく理解することです。そもそも何が原因なの?このエラーの原因を理解することが、本番環境での回避に役立つことを願っています。
前もって感謝します。