我们最近从JDK6u20(Linux,32位和64位)升级到JDK6u23.从那时起,我们不能再使用jstack和jstat工具从运行过程中获取监控信息.如果我们切换回JDK6u20,一切正常.
我们正在运行Tomcat 6.根据此论坛帖子,其他人也有同样的问题:http: //forums.oracle.com/forums/thread.jspa?threadID = 2151967&tstart = 0
运行简单的普通Java进程并使用这些工具.
Jstack说:无法打开套接字文件:目标进程未响应或未加载HotSpot VM当目标进程没有响应时,可以使用-F选项.
Jstat说:找不到19799
使用Jps根本不显示正在运行的进程,所以我猜这个问题更多是JDK6u23和JDK6u24的一般性质.它有一个新的热点引擎.也许某些东西不能与Tomcat和Hotspot v19一起使用.
任何的想法?感谢帮助.
PS当然,我们将它作为同一个用户运行,我们没有更改任何其他内容.只有JDK.
我正在尝试分析我们的应用程序的GC行为(在Tomcat中运行,在Sun的Hotspots下,JVM 1.6).
到目前为止,我已经指示JVM使用...将GC日志发送到单独的文件
-Xloggc:gc.log
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGC
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
Run Code Online (Sandbox Code Playgroud)
...并使用jstat输出日志...
jstat -gc -t 29045 5s > jstat.gc
Run Code Online (Sandbox Code Playgroud)
我看到有趣的信息,但没有找到一个工具来帮助我分析/可视化这些日志.我通过这个问题指向了GCViewer ,但它只从gc.log中解析了一些日志行,然后崩溃并出现异常.对于我正在使用的特定JVM,是否有更好或更新的解析这些特定日志的工具?
我正在学习jstat以及它可以告诉我有关JVM不同代的内容.从jstat docs我了解到新的gen由eden,s0和s1组成.例如,如果您对以下内容进行数学运算,您会看到NGC = EC + S0C + S1C.好东西.
$ jstat -gccapacity -t 21830 5000
Timestamp NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
248767.4 2624.0 87360.0 6656.0 640.0 640.0 5376.0 5376.0 174784.0 12840.0 12840.0 21248.0 131072.0 34304.0 34304.0 457 73
248772.4 2624.0 87360.0 6656.0 640.0 640.0 5376.0 5376.0 174784.0 12840.0 12840.0 21248.0 131072.0 34304.0 34304.0 457 73
248777.3 2624.0 87360.0 6656.0 640.0 640.0 5376.0 5376.0 174784.0 12840.0 12840.0 21248.0 131072.0 …Run Code Online (Sandbox Code Playgroud) 所以每隔几天我在Ubuntu上的java进程就会被自动杀死,我无法弄明白为什么.
我的盒子有35.84 GB的RAM,当我启动我的Java进程时,我将-xmx28g参数传递给它,所以它的使用方式应该小于可用的最大RAM.
我按如下方式运行jstat:
# jstat -gccause -t `pgrep java` 60000
Run Code Online (Sandbox Code Playgroud)
在进程被杀之前jstat的最后几行输出是:
Time S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
14236.1 99.98 0.00 69.80 99.40 49.88 1011 232.305 11 171.041 403.347 unknown GCCause No GC
14296.2 93.02 0.00 65.79 99.43 49.88 1015 233.000 11 171.041 404.041 unknown GCCause No GC
14356.1 79.20 0.00 80.50 99.55 49.88 1019 233.945 11 171.041 404.986 unknown GCCause No GC
14416.2 0.00 99.98 24.32 99.64 49.88 1024 234.945 11 171.041 …Run Code Online (Sandbox Code Playgroud) 我有这个收入数据集:
Income Number of people 0 245981 8.8 150444 30 126063 49.9 123519 70 115029 90.7 277149 109.1 355768 130 324246 150.3 353239 170.2 396008 190 396725 210 398640 230.1 401932 250 416079 270 412727 289.8 385192 309.7 343178 329.7 293707 349.6 239982 369.7 201557 389.3 165132 442.3 442075 543.4 196526 679.9 146784 883.9 48600 1555 44644
(如您所见,收入水平之间的宽度在结束时变得更大.)
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
245760.0 245760.0 33804.8 0.0 1966080.0 364994.1 8028160.0 138003.6 25984.0 25429.9 2944.0 2877.2 8 0.451 2 0.153 0.603
Run Code Online (Sandbox Code Playgroud)
这是./jstat -gc pid的输出250ms 0我想知道单位YGCT或FGCT是什么?即我们还是ms?
我需要使用jstat来测量程序的一些GC参数.Jstat提供了一组参数(S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT)从那些我对YGCT,FGCT和GCT的描述感到困惑.
(YGCT Young Generation垃圾收集时间
.FGCT完全垃圾收集时间.GCT垃圾收集
总时间.)
我有两个问题.
1)这三个参数(YGCT,FGCT和GCT)实际测量的是什么?一个小比较会非常有帮助
2)我怎么知道他们提到的时间单位?(毫秒/秒/ ....)
我提到了许多文件,包括
解释jstat结果
http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/
http://docs.oracle.com/javase/6/docs/technotes/tools /share/jstat.html#output_options
但这些并没有回答我真正的问题.
任何人都有经验与jstat帮助我吗?
谢谢.
有两个项目称为 CGC 和 CGCT。我找不到描述它们含义的文档和手册页。
# jstat -gc 139934
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT
0.0 15360.0 0.0 15360.0 113664.0 9216.0 88064.0 23552.0 82304.0 80084.2 10112.0 9360.4 10 0.157 0 0.000 6 0.018 0.175
# java -version
openjdk version "11.0.2" 2019-01-15 LTS
OpenJDK Runtime Environment Corretto-11.0.2.9.3 (build 11.0.2+9-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.2.9.3 (build 11.0.2+9-LTS, mixed mode
Run Code Online (Sandbox Code Playgroud)
我使用了默认的 jvm 参数。
#jhsdb jmap --heap --pid 139934 | grep GC …Run Code Online (Sandbox Code Playgroud) 我在Windows Server 2008上安装了作为服务的JBoss服务器,以本地系统作为登录用户。
我希望能够在JBoss服务器上运行visualgc,在Server 2008之前,我可以直接连接到PID(即visualgc [PID])。根据我的阅读,在Server 2008中,我唯一的解决方案是使用相同的凭据将jstatd作为服务安装,以便远程运行visualgc(即visualgc [PID] @localhost:1099)。
因此,我让jstatd作为服务在本地系统帐户下运行(在策略文件中授予了AllPermissions权限,并设置了java.io.tmpdir,因为它也存在问题),并验证了两个java进程是否在同一用户下运行,并且任务管理器中的会话ID,但是jps rmi:// localhost:1099不返回任何内容,而visualgc pid @ localhost:1099说“找不到[PID]”。
有趣的是,如果我将JBoss和jstatd服务的登录用户都切换为Administrator,则visualgc可以正常工作。同样有趣的是,在Windows 7 Ultimate盒子上,我可以将这两种服务都安装为Local System,并且在那可以正常工作。
它可以作为本地系统在Windows 7中运行,这一事实使我希望在Server 2008上可以做一些工作以使其也能运行。如果没有,我可以尝试使用以管理员身份登录来安装服务,但是我不确定会对应用程序产生什么影响(如果有)。
我为JBoss和jstatd使用了相同的Java HotSpot™64位服务器VM版本1.6.0_10,并且从jvmstat 3.0运行visualgc。
其他人遇到这个问题或对我可以尝试的事情有任何建议吗?