set JAVA_OPTS=-Xms256m -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=256m -server
这个参数适用于jboss的run.bat,但是我想增加堆栈大小 -Xss512m 但它不起作用。
set JAVA_OPTS=-Xms256m -Xss512m -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=256m -server
它有什么问题?
答案 0 :(得分:2)
-Xss512m
选项将每个线程堆栈的大小增加到512 MB。太疯狂了。我希望这是导致 JBoss耗尽内存。
为什么首先增加堆栈大小?对于大多数用途,默认堆栈大小应该没问题。如果它不够大,那么很有可能:
您的程序中有一个错误导致无限递归(并且增加堆栈大小无效)或...
您正在使用具有病态案例的算法(并且增加堆栈大小是一个绑定)。
根据您的评论,我猜您正在使用正则表达式来解析包含多个记录的整个输入文档。正则表达式引擎使用递归来处理重复的元素/组。
假设这是问题所在,那么修复就是重写解析代码。
答案 1 :(得分:0)
VM中的每个线程都是一个堆栈。堆栈大小将限制您可以拥有的线程数,太大的堆栈大小,并且您将耗尽内存,因为每个线程分配的内存超过了所需的内存。 source
显然-Xss512m
太大了。尝试更小的值,小得多:-Xss2048k