2016-10-13 11 views
0

私は私が得たOrientdb Javaヒープエラー

for(i = 1 to 1000) 
{ 
    DB_Name = getRandomString() 

    createGraphDb(DB_Name) using OServerAdmin : if db do not exist 
    gFactory = OrientGraphFactory(DB_Name) : if db exist 


    graph = OrientGraphFactory.getTx() 
    previousEvent = null 

    for(j=1 to 1000) 
     { 
     currentEvent = getrandomString() 
     if(previousEvent and currentEvent != null) 
       { 
        - create Vertex named currentVertex and edges between them 
        - (from previous to current event) 
       } 
     else 
       { 
        create vertex named current event 
       } 
     previousEvent = currentEvent 
     } 
    graph.shutdown() 

} 

シングルスレッドのシステム上で次の須藤コードトランスナショナルグラフ

を使用してOrientdb 2.2.10上でテストを実行しました私の外側ループの数回繰り返した後の次の例外。

Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space 
at java.util.Arrays.copyOfRange(Unknown Source) 
at java.lang.String.<init>(Unknown Source) 
at java.lang.String.substring(Unknown Source) 
at java.lang.String.split(Unknown Source) 
at java.lang.String.split(Unknown Source) 
at com.orientechnologies.orient.core.config.OStorageConfiguration.fromStream(OStorageConfiguration.java:268) 
at com.orientechnologies.orient.core.config.OStorageConfiguration.fromStream(OStorageConfiguration.java:497) 
at com.orientechnologies.orient.core.config.OStorageConfiguration.load(OStorageConfiguration.java:207) 
at com.orientechnologies.orient.client.remote.OStorageRemote.open(OStorageRemote.java:330) 
at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.open(ODatabaseDocumentTx.java:257) 
at com.orientechnologies.orient.core.db.OPartitionedDatabasePool$DatabaseDocumentTxPooled.internalOpen(OPartitionedDatabasePool.java:445) 
at com.orientechnologies.orient.core.db.OPartitionedDatabasePool.openDatabase(OPartitionedDatabasePool.java:308) 
at com.orientechnologies.orient.core.db.OPartitionedDatabasePool.acquire(OPartitionedDatabasePool.java:263) 
at com.tinkerpop.blueprints.impls.orient.OrientBaseGraph.<init>(OrientBaseGraph.java:144) 
at com.tinkerpop.blueprints.impls.orient.OrientTransactionalGraph.<init>(OrientTransactionalGraph.java:78) 
at com.tinkerpop.blueprints.impls.orient.OrientGraph.<init>(OrientGraph.java:135) 
at com.tinkerpop.blueprints.impls.orient.OrientGraphFactory.getTx(OrientGraphFactory.java:119) 

私のsudoコードまたはOrientDbに問題はありませんか?

もっと良い方法がある場合は、お手数ですがお勧めします。

ありがとうございます!

+0

ヒープサイズは-xmx512mです。 この種のアプリケーションに適したヒープサイズは何ですか? –

答えて

3

利用可能なラムのギグはいくつですか?たとえば、Javaプロセスに最大8GBを割り当てることができれば、小さなヒープと大きなディスクキャッシュバッファ(オフヒープメモリ)を割り当てるほうがよいでしょう。そうではなく:

java -Xmx8g ...

あなたが代わりにこれを試すことができます:詳細は

java -Xmx800m -Dstorage.diskCache.bufferSize=7200 ...

あなたはperformance tuning on official documentationに関するページを読むことができます。

希望します。

+0

orientdbサーバもJVM上で動作しますか?私のdbはリモートマシン上で実行されていることを意味します。では、私のシステム(私のJavaプログラムが動作している)のJVM、またはorientdbが動作しているリモートシステムのJVMを設定することについて話しています。 –

+0

orientdb "server.sh"が実行されているリモートマシンでもJavaヒープメモリの問題が発生する可能性があります。これを示しているオリエンテーションが実行されている端末があるため質問しています - >>>>>> "エラー実行要求 java.lang.OutOfMemoryError:Javaのヒープスペース " –

0

OrientDBでは、トランザクションがRAM内で変更されているため、数十万の要素があるトランザクションでこの問題が発生する可能性があります。すべてのX要素をコミットすることをお勧めします。私は1000から始め、結果に基づいてそれを調整することをお勧めします。

+0

すべての内部反復の後(forループ)、私はdbをコミットしています。 graph.shutdownは、グラフインスタンスをシャットダウンする前にコミットします。 –

+0

こんにちは 私はクライアントのJava(8u102)を10個のループでテストしましたが、72分実行してもOOMエラーは見られませんでした。 サーバーはDB番号7、700頂点(フルの場合は0.2秒、アプリケーションの場合は0.5秒)でフルGCのみを開始しましたが、db 10までは他の30分間ゆっくりと存続しました。プロセスサイズが7.8gb(および485.2%cpu)増加しました クライアントプロセスのCPU使用率が低く、FullGC(0.6s)を各データベースに対して1回または2回だけ実行していました サーバー上の最大ヒープ数(1ギガバイト)、多くのラム(OSX上で16GB RAMとi7でテスト済み) クラウディオ –

+0

そのサーバーがデフォルトの512m最大ヒープとクライアント4GB最大ヒープを使用していたが、 gb –

1

あなたは-XXとヒープの使用状況を確認することができます:+ PrintGC -XX:+ PrintGCDateStamps -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps -XX:+ PrintTenuringDistribution -Xloggc:$ ORIENTDB_HOME /ログ/ GC_%P_%t.log (新しいものから古いものへの昇進に関する調査のためにのみ、最新のXXフラグを追加することができます)。

クライアントでも同様の設定を追加できます(gc.logオプションのみ変更できます)。私はあなたの疑似コードに基づいてJavaクラス(Macでは8u102、16GBとi7)を実行しましたが、1000個の頂点+エッジで1ループ(1 db)を実行し、OutOfMemoryなしでジョブを正常に完了しました

Bye クラウディオ

+0

9回目のループの後にヒープエラーがあります。 –

+0

提供されるヒープサイズは512mです –