0

Orient テーブルに格納されたデータの計算を実行するための並列化されたアルゴリズムを作成しました。

メモリを制御するために、これらのデータをページ分割し、パフォーマンスの向上に関するアルゴリズムを並列化しようとします (Future タスクを使用)。

私のオリエント設定は次のとおりです。

set ORIENTDB_SETTINGS=-Dprofiler.enabled=true -Dstorage.diskCache.bufferSize=12906

set JAVA_OPTS_SCRIPT=-Xmx4096M -Djna.nosys=true -XX:+HeapDumpOnOutOfMemoryError -XX:PermSize=1024m 
-XX:MaxPermSize=1024m
-Djava.awt.headless=true -Dfile.encoding=UTF8 -Drhino.opt.level=9
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005

Xmx は 4 GB (上位構成として 4096MB) に固定されています。次のスクリーンショットのように、JVisualVM で Orient プロセスを監視しようとしました。

OServermanager のメモリ使用量

JVIsualVm プロセスでは、ヒープ メモリは常に制限以下で使用されますが、Windows プロセス リストでは、同じプロセス (PID を強調表示しました) が 7 GB を占有し、常に増加します。

ここに私のコード:

for (Callable worker : workers) {
    Future<Boolean> submit = executor.submit(worker);
    futures.add(submit);
}
workers.clear();
workers = null;
boolean success = true;

for (Future<Boolean> future : futures) {
    try {
        if (Boolean.TRUE.equals(future.get())) {
            [CODE BLOCK]
        } else {
            [CODE BLOCK FOR REPROCESS FUTURE]
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}
4

1 に答える 1

1

あなたの写真によると、プロセスは7GBのメモリを消費しましたが、設定によれば、-Dstorage.diskCache.bufferSize=1290613GB未満のメモリをストレージに消費できます。プロセスの消費メモリ量を減らしたい場合は、設定で消費メモリの最大制限を変更する必要があります。ディスク キャッシュがメモリを解放することはなく、最も広範囲のクエリに対してクエリの応答時間を最小限に抑えることができます。

于 2016-03-07T13:35:11.647 に答える