标签: jvm-hotspot

适用于JVM的堆和旧代的大小调整以用于数据繁重的应用程序

  • 我正在使用JVM运行服务器应用程序sunjava-1.6.0_21.
  • 我的应用程序数据量很大,充当缓存服务器.因此它存储了许多我们不期望在整个应用程序中运行GC的长期生存数据.
  • 我正在设置以下JVM参数-Xmx16384M-Xms16384M.
  • 加载所需数据后,以下是应用程序的内存使用情况
  • 总堆空间是:13969522688
  • 最大堆空间是:15271002112
  • 可用堆空间是:3031718040
  • 长期(旧版)堆存储: Used=10426MB Max=10922MB Used/Max=95%

旧的用法 - 我已经确认这是由于实际数据而且预计不会免费.我的问题是,默认情况下JVM调整堆空间大小(它分配了10922MB旧版本),这在旧版本部分留下了很少的可用空间.

  • 旧版的可用空间会减少对应用程序的影响吗?
  • 如果是,我应该如何处理?我应该尝试使用JVM调整参数,newratio并尝试增加旧版本的可用空间或任何其他方式我应该调整应用程序.

java garbage-collection jvm jvm-hotspot

6
推荐指数
1
解决办法
4178
查看次数

为什么Java G1 gc花费这么多时间扫描RS?

我目前正在评估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)

garbage-collection jvm-hotspot g1gc

6
推荐指数
1
解决办法
3980
查看次数

如何强制 HotSpot JVM 覆盖堆转储文件?

我正在 OOM 上转储堆(OpenJDK 7)

 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/jvm.hprof
Run Code Online (Sandbox Code Playgroud)

启动选择我的虚拟机。我的磁盘空间不足,无法存储多个转储(堆大小为 6g)。有没有办法强制 JVM 覆盖转储文件?目前,它会抱怨“文件存在”并保持现有转储完好无损。我已阅读 Sun 的文档,但似乎没有任何强制覆盖的选项

jvm jvm-hotspot

6
推荐指数
1
解决办法
2510
查看次数

“java.vendor”与“java.vm.vendor”有什么区别?

Java 中的java.vendorjava.vm.vendor属性有区别吗?

似乎两者总是相同的。这是修正假设吗?

如果您知道这两个值不同的场景,请列出它们。

编辑:

我试图找出哪个属性会告诉我当前的 java 是 Oracle、Apple、OpenJDK 还是其他 JVM。到目前为止,我检查了这两个属性。但是假设我只需要检查java.vendor是否安全

java openjdk jvm jvm-hotspot

6
推荐指数
1
解决办法
977
查看次数

jstack:似乎不是 HotSpot VM(在远程进程中找不到符号“gHotSpotVMTypes”)

我们在 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 multithreading cpu-usage jvm-hotspot jstack

6
推荐指数
1
解决办法
1万
查看次数

Java 从 11.0.11 更新到 11.0.13 更改了 JVM 代码缓存行为,导致更多进程 CPU 使用率和奇怪的分析 nmethods 内存使用率

我们使用 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.13 + -XX:ReservedCodeCacheSize=375m

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

下一步是将 -XX:ReservedCodeCacheSize 增加到 512m,但大约 3 小时后,JVM CodeHeap“分析的 nmethods”(C1 优化代码)再次减少到大约 50 …

java jvm jvm-hotspot jvm-codecache

6
推荐指数
1
解决办法
2418
查看次数

如何在 JVM 中设置 Dlog4j2.formatMsgNoLookups=true ?

在我的一台计算机上,有JRE 1.8.0_45 ,在另一台计算机上有OpenJDK

我想设置 JVM 标志Dlog4j2.formatMsgNoLookups=true,但是我可以在哪里编写这段配置?

java jvm-hotspot jvm-arguments

6
推荐指数
1
解决办法
2万
查看次数

Java通常需要多少程序员"协助"才能切换到JIT到调度表?

据我所知,Java那样全线优化和可取决于有多少案件有,开关是否疏或密优化开关,如果代码是即使够热的JIT优化所述代码.我只是想知道如果我需要进一步提供"帮助"像使用逐和变量进行测试或按位变量转变为一个"更好"数,假设该程序代码的确很火爆."更好"是0xXX而不是0xFFXX.是否有热点JIT文档明确说明了什么是必需的?而不是"只是遵循xxx的一般编程指南".

java optimization jvm-hotspot switch-statement

5
推荐指数
1
解决办法
223
查看次数

如何让HotSpot VM处于调试模式?

我需要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)

我是否必须安装一些工具/补丁来实现这一目标?

谢谢!

java jvm jvm-hotspot compiler-flags debug-mode

5
推荐指数
1
解决办法
1899
查看次数

如何确定Hotspot VM默认的线程堆栈大小

如果我从我的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"值,我希望能看到默认大小.有没有办法确定默认的线程堆栈大小?

java jvm jvm-hotspot

5
推荐指数
1
解决办法
2366
查看次数