2

我有一个旧的 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 使用什么工作?

4

1 回答 1

0

我使用的大多数 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

另请参阅更多信息和/或选项:https ://chriswhocodes.com/vm-options-explorer.html

于 2021-02-18T18:38:41.053 回答