编程语言
首页 > 编程语言> > 记忆 – 程序执行2天

记忆 – 程序执行2天

作者:互联网

我有一个实现匈牙利算法的java程序.我以这样一种方式对现有代码进行了更改,即从文件中读取输入.我有大约32,000行的巨大输入,我正在计算最大边缘权重.

问题是,当我使用命令运行程序时,

java Hungarian_algorithm.java

为此,我收到一个错误,java.lang.outofMemoryError:java堆空间错误.因此,在对错误进行了一些研究之后,我使用以下命令运行程序.

java -d64 -Xms6g -Xmx8g Hungarian_algorithm

我在2天前开始执行,程序仍然没有产生任何输出.所以,我决定检查服务器中的内存消耗.

顶级命令的输出

PID    USER     PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
20760 ramesh    20   0 8482m 5.9g 3484 S  101 75.9   3099:13 java 

输出free -m命令

 total       used       free     shared    buffers     cached
Mem:          7991       7937         54          0         37       1432
-/+ buffers/cache:       6467       1524
Swap:        30514       4626      25888

我应该等待程序产生一些输出或至少一些错误或杀死程序的执行?

解决方法:

根据问题和注释,您可以通过jstack命令查找java运行调用堆栈:

jstack processid

如果某些线程在某些条件下等待很长时间,则很可能是死锁.生产级代码可能很少出现死锁,但在实验性多线程代码中很常见.在前一种情况下,重新运行可能会解决问题,但在后一种情况下,可能需要进行详细的调试.

希望这可以帮助.

标签:java,memory,profiling,virtual-memory,top
来源: https://codeday.me/bug/20190814/1657371.html