我的目标:
我想为 1000 个用户运行我的应用程序。
现在
我正在尝试为 100 个用户运行。在应用程序运行期间,我想为每个用户执行一些过程,每个用户至少需要一小时,所以我为每个用户使用一个线程。
错误
Caused by: java.lang.OutOfMemoryError: Java heap space
我试图弄清楚这意味着什么,但我不确定如何解决它。
有谁能够帮助我?
我的目标:
我想为 1000 个用户运行我的应用程序。
现在
我正在尝试为 100 个用户运行。在应用程序运行期间,我想为每个用户执行一些过程,每个用户至少需要一小时,所以我为每个用户使用一个线程。
错误
Caused by: java.lang.OutOfMemoryError: Java heap space
我试图弄清楚这意味着什么,但我不确定如何解决它。
有谁能够帮助我?
这个错误意味着你的程序需要比你的 JVM 允许它使用的更多的内存!
因此,您几乎有两种选择:
-Xmx
(例如 1024 MB: -Xmx1024m
)正如 Peter Lawrey 所指出的,使用分析器来查看您的程序在这种情况下正在做什么通常是一个好主意。
使用具有有限数量的工作线程的生产者/消费者模式。
100 多个线程太荒谬了——难怪您的应用程序正在爆炸式增长。
您也没有提供任何信息表明该问题与 StackOverflow 中给出的有关此错误的所有答案都非常不同;
-mx
或增加最大内存-Xmx
我怀疑由于您希望 1000 个用户运行每个需要一个小时的进程,因此您可能需要比您拥有的更多的资源。例如 1000 个核心?我建议您根据以可接受的水平运行用户所需的 CPU、内存、磁盘 IO 和网络 IO 来查看需要多少硬件,例如 20 个用户和 50 个用户的倍数。
您可以在启动应用程序时尝试增加 JVM 堆空间。您可以尝试将其设置为 2GB -Xmx2g
。如果您运行的是 32 位 Java,我认为 2GB 已经足够高了,但如果您使用 64 位 JVM,您应该可以更高。
编辑:
例子:java -Xmx2g MyApp
当出现内存不足错误时,我将检查 2 个区域