2

約 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(Ite​​rator.scala:727)",
    "scala.collection.AbstractIterator.foreach(Ite​​rator.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(Ite​​rator.scala:727)",
    "scala.collection.AbstractIterator.foreach(Ite​​rator.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(Ite​​rator.scala:727)",
    "scala.collection.AbstractIterator.foreach(Ite​​rator.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

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

前もって感謝します。

4

0 に答える 0