我的目标:
我想为1000个用户运行我的应用程序。
立即
我正在尝试为100个用户运行。在应用程序运行期间,我想为每个用户执行一些过程,每个用户至少需要一个小时,所以我每个用户使用一个线程。
错误
Caused by: java.lang.OutOfMemoryError: Java heap space
我试图找出这意味着什么,但我不确定如何解决它。
有人能帮助我吗?
答案 0 :(得分:7)
此错误意味着您的程序需要的内存比JVM允许的内存多!
因此,你几乎有两个选择:
-Xmx
选项增加允许程序使用的默认内存(例如1024 MB:-Xmx1024m
)正如Peter Lawrey指出的那样,使用剖析器来查看你的程序在这种情况下所做的事情通常是一个好主意。
答案 1 :(得分:4)
使用具有有限数量工作线程的producer/consumer pattern。
100多个线程是荒谬的 - 难怪你的应用程序正在爆炸。
答案 2 :(得分:1)
您没有提供任何信息表明问题与StackOverflow中有关此错误的所有答案都有很大差异;
-mx
或-Xmx
我怀疑,因为您希望1000个用户运行每个需要一个小时的流程,您可能需要比您拥有的资源更多的资源。例如或许1000个核心?我建议您根据在可接受级别运行用户所需的CPU,内存,磁盘IO和网络IO来查看所需的硬件数量,例如: 20个用户和50个用户。
答案 3 :(得分:0)
启动应用程序时,可以尝试增加JVM堆空间。您可以尝试使用-Xmx2g
将其设置为2GB。如果你正在运行32位Java,我认为2GB是你可以去的最高,但是如果你有一个64位的JVM,你应该能够更高。
修改强> 的
示例:java -Xmx2g MyApp
答案 4 :(得分:0)
当出现内存不足错误时,我会检查2个区域