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