Das*_*tor 1 java garbage-collection jvm
从我在网上读到的内容来看,听起来很多人建议设置-XX:+PerfDisableSharedMemJVM 标志来修复由于垃圾收集器尝试写入/tmp(hsperfdata) 时 IO 阻塞而导致的高 GC 暂停延迟。
我正在尝试优化系统垃圾收集的性能,并且我尝试在设置标志之前和之后运行负载测试,并且实际上在没有标志的情况-XX:+PerfDisableSharedMem下性能稍好一些!我什至第二次重新运行负载测试并得到相同的结果。
所以我的问题是:这只是一个侥幸,还是-XX:+PerfDisableSharedMem实际上有任何潜在的负面性能影响?
(我知道使用-XX:+PerfDisableSharedMem意味着jstat依赖于该文件的某些诊断工具将无法工作,但我们不使用任何这些工具 - 我只是询问潜在的性能缺点,而不是工具缺点。)
HotSpot JVM 维护某些可由各种可服务性工具读取的性能计数器。
默认情况下,这些性能计数器导出到/tmp/hsperfdata_<user>目录下的文件系统中,以便外部工具jstat可以读取它们,而无需直接与 JVM 通信。jps该工具还会查找这些计数器以查找活动的 JVM。
JVM不直接更新文件;相反,它将文件映射到内存并更新内存中的计数器。任何此类内存更新都可能导致文件 I/O。例如,当 GC 计数器在 GC 暂停期间更新时,操作系统可能决定将数据刷新到磁盘,这反过来可能会延长暂停时间。这篇博文描述了上述效果。
-XX:+PerfDisableSharedMem选项强制 JVM 使用匿名内存作为性能计数器而不是映射文件。这有助于避免自发磁盘 I/O 导致的随机 VM 暂停。
使用此选项,jps、jstat、JConsole和其他工具将无法找到 JVM。但是,仍会收集性能计数器。jcmd <pid> PerfCounter.print无论如何都可以打印计数器。
该选项没有其他负面性能影响-XX:+PerfDisableSharedMem。在这两种情况下,JVM 更新计数器的方式完全相同;唯一的区别是计数器内存是否映射到文件。
| 归档时间: |
|
| 查看次数: |
989 次 |
| 最近记录: |