记忆 – 程序执行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