sunjava-1.6.0_21.-Xmx16384M和-Xms16384M.13969522688152710021123031718040Used=10426MB Max=10922MB
Used/Max=95%旧的用法 - 我已经确认这是由于实际数据而且预计不会免费.我的问题是,默认情况下JVM调整堆空间大小(它分配了10922MB旧版本),这在旧版本部分留下了很少的可用空间.
newratio并尝试增加旧版本的可用空间或任何其他方式我应该调整应用程序. 我目前正在评估G1垃圾收集器以及它如何为我们的应用程序执行.看一下gc-log,我注意到很多集合都有很长的"扫描RS"阶段:
7968.869: [GC pause (mixed), 10.27831700 secs]
[Parallel Time: 10080.8 ms]
(...)
[Scan RS (ms): 4030.4 4034.1 4032.0 4032.0
Avg: 4032.1, Min: 4030.4, Max: 4034.1, Diff: 3.7]
[Object Copy (ms): 6038.5 6033.3 6036.7 6037.1
Avg: 6036.4, Min: 6033.3, Max: 6038.5, Diff: 5.2]
(...)
[Eden: 19680M(19680M)->0B(20512M) Survivors: 2688M->2624M Heap:
75331M(111904M)->51633M(115744M)]
[Times: user=40.49 sys=0.02, real=10.28 secs]
Run Code Online (Sandbox Code Playgroud)
所有删除的日志行条目都以单位数ms显示运行时.
我想大部分时间都应该花在复制上,对吧?Scan RS需要这么长时间的原因是什么?关于如何调整G1设置的任何想法?JVM开始于
-Xms40960M -Xmx128G -XX:+UseG1GC -verbose:gc -XX:+PrintGCDetails -Xloggc:gc.log
Run Code Online (Sandbox Code Playgroud)
编辑:哦,我忘了......我正在使用Java 7u25
更新: 我注意到另外两个奇怪的事情:
16187.740: [GC concurrent-mark-start]
16203.934: [GC pause (young), 2.89871800 secs]
(...)
16218.455: [GC pause …Run Code Online (Sandbox Code Playgroud) 我正在 OOM 上转储堆(OpenJDK 7)
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/jvm.hprof
Run Code Online (Sandbox Code Playgroud)
启动选择我的虚拟机。我的磁盘空间不足,无法存储多个转储(堆大小为 6g)。有没有办法强制 JVM 覆盖转储文件?目前,它会抱怨“文件存在”并保持现有转储完好无损。我已阅读 Sun 的文档,但似乎没有任何强制覆盖的选项
Java 中的java.vendor和java.vm.vendor属性有区别吗?
似乎两者总是相同的。这是修正假设吗?
如果您知道这两个值不同的场景,请列出它们。
编辑:
我试图找出哪个属性会告诉我当前的 java 是 Oracle、Apple、OpenJDK 还是其他 JVM。到目前为止,我检查了这两个属性。但是假设我只需要检查java.vendor是否安全?
我们在 Amazon Linux 上使用 Wildfly 11 和 Java 8。我们最近安装了jstack这个程序来解决 CPU 利用率高的问题,因为我们试图找出导致 CPU 旋转的代码。首先我们得到了Wildfly进程的PID...
[myuser@prodmachine ~]$ ps -elf | grep java
0 S jboss 1992 1 0 80 0 - 28275 - Aug30 ? 00:00:00 /bin/sh /usr/java/wildfly/bin/standalone.sh -c standalone.xml
0 S jboss 2044 1992 45 80 0 - 7336044 - Aug30 ? 5-13:38:33 /usr/java/default/bin/java -D[Standalone] -server -Xms64m -Xmx25600m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=1024m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman,com.newrelic -java.awt.headless=true -javaagent:/usr/java/wildfly/newrelic/newrelic.jar -Dorg.jboss.boot.log.file=/usr/java/wildfly/standalone/log/server.log -Dlogging.configuration=file:/usr/java/wildfly/standalone/configuration/logging.properties -jar /usr/java/wildfly/jboss-modules.jar -mp /usr/java/wildfly/modules org.jboss.as.standalone -Djboss.home.dir=/usr/java/wildfly -Djboss.server.base.dir=/usr/java/wildfly/standalone -c standalone.xml
0 S 602 3630 …Run Code Online (Sandbox Code Playgroud) 我们使用 Java 11.0.11 和 -XX:ReservedCodeCacheSize=375m 运行一个复杂的集群应用程序,并 24/7 附加相同的负载配置文件,无需任何重新启动。
在我们将 AdoptOpenJDK jdk-11.0.11+9 更新为 Temurin jdk-11.0.13+8 后,两者都使用 -XX:ReservedCodeCacheSize=375m,在我们的应用程序中没有任何代码更改,只是更新 Java,我们注意到以下变化:
Java 11.0.13 + -XX:ReservedCodeCacheSize=375m,时区=UTC+1

与
Java 11.0.11 + -XX:ReservedCodeCacheSize=375m,时区=UTC+1

下一步是将 -XX:ReservedCodeCacheSize 增加到 512m,但大约 3 小时后,JVM CodeHeap“分析的 nmethods”(C1 优化代码)再次减少到大约 50 …
据我所知,Java那样全线优化和可取决于有多少案件有,开关是否疏或密优化开关,如果代码是即使够热的JIT优化所述代码.我只是想知道如果我需要进一步提供"帮助"像使用逐和变量进行测试或按位变量转变为一个"更好"数,假设该程序代码的确很火爆."更好"是0xXX而不是0xFFXX.是否有热点JIT文档明确说明了什么是必需的?而不是"只是遵循xxx的一般编程指南".
我需要HotSpot VM处于调试模式的原因是我想要一些JVM选项,比如
-XX:+PrintCFGFile,得到支持.
我目前的JVM版本就像
java version "1.6.0_24" OpenJDK Runtime Environment (IcedTea6 1.11.1) (suse-3.1-x86_64) OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
我是否必须安装一些工具/补丁来实现这一目标?
谢谢!
如果我从我的Windows框上的命令行运行java,如下所示:
"C:\Program Files (x86)\Java\jdk1.7.0_51\bin\java.exe" -XshowSettings:all -Xss=1m -Xmx256m
Run Code Online (Sandbox Code Playgroud)
我看到这个输出:
VM settings:
Stack Size: 1.00M
Max. Heap Size: 256.00M
Ergonomics Machine Class: client
Using VM: Java HotSpot(TM) Client VM
Run Code Online (Sandbox Code Playgroud)
对我来说重要的部分是"堆栈大小:1.00M",这是我通过命令行选项"-Xss1m"设置的.但是,如果我删除此选项并让VM以默认堆栈大小运行,我会得到以下输出:
VM settings:
Max. Heap Size: 256.00M
Ergonomics Machine Class: client
Using VM: Java HotSpot(TM) Client VM
Run Code Online (Sandbox Code Playgroud)
请注意,它不再显示"堆栈大小".如果我没有指定自定义的"-Xss"值,我希望能看到默认大小.有没有办法确定默认的线程堆栈大小?
jvm-hotspot ×10
java ×8
jvm ×6
cpu-usage ×1
debug-mode ×1
g1gc ×1
jstack ×1
openjdk ×1
optimization ×1