无法启动 jstat:无法为对象堆预留足够 space

Can't launch jstat : Could not reserve enough space for object heap

我有一个旧的 Jboss 服务器,有 5go 的 RAM。 我的 java 应用程序配置如下:

...-server -Xms3200m -Xmx3500m -XX:MaxPermSize=512M...

当我尝试关闭时,它使用与启动相同的 JAVA_OPTS,所以它失败了。 所以我修改了 shutdown.sh 脚本,并添加:

...
JAVA_OPTS='-Xms128m -Xmx128m -XX:MaxPermSize=128m'
export JAVA_OPTS
...

一切正常。 但是现在,我的 JMX 统计数据不再起作用了,我假设他们使用 jstat 来测量空闲堆。

当我做一个 :

./jstat -gccapacity PID

我收到消息了:

Could not reserve enough space for object heap

但此时我的服务器上有 1go 的可用 RAM! JAVA_OPTS jstat 的用途是什么?

我使用的大多数 Java 实现使用默认的最大堆大小为系统内存的 25%,并且您的系统可能不允许过度使用内存,因此这可能会导致此问题。 (来源:https://docs.oracle.com/javase/7/docs/technotes/guides/vm/gc-ergonomics.html

我希望这有助于解决问题:

对于 jstat,您可以设置 -Xmx,但您需要在其前面加上 -J,例如:

jstat -gccapacity $YOUR_JBOSS_PID -J-Xmx10m -J-Xms10m -J-XX:+PrintFlagsFinal

PrintFlagsFinal 将向您显示 JVM 启动时的有效设置,查找:MaxHeapSize 以获取由 -Xmx 设置的有效值或等效值:-XX:MaxHeapSize=128m

来源:https://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html

让我知道它是否有帮助(如果没有,请提供一些详细信息,例如:java -versionuname -a

查看更多信息 and/or 选项还有:https://chriswhocodes.com/vm-options-explorer.html