2016-03-07 19 views
0

我写了一个paralellized alghoritm来完成对存储在Orient表中的数据的计算。OrientDB - Java进程:内存失控

为了控制内存,我尝试对这些数据进行分页,然后尝试并行化我的alghoritm以提高性能(使用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像下面的截图:

OServermanager memory usage

关于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(); 
    } 
} 
+0

嗨,你用什么版本? –

回答

1

根据您的图片,过程中都根据您的设置-Dstorage.diskCache.bufferSize=12906您允许消耗储存的内存超过13GB有点少消耗的内存7GB。如果您希望处理消耗更少的内存,则应更改设置中消耗的内存的最大限制。磁盘缓存永远不会释放内存以实现最广泛范围查询的最小查询响应时间。

+0

谢谢。所以在Windows进程列表中,我可以看到所有内存占用(RAM +磁盘缓存) –

+0

嗨,你是对的。 –