是什么导致 Java 中的旋转和同步时间过长?

2024-03-08

在 Java 8 Update 45 中,将这些选项添加到java call:

-XX:+PrintGCApplicationStoppedTime
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1

显示如下统计数据:

vmop [threads: total initially_running wait_to_block] [time: spin block sync cleanup vmop] page_trap_count
3679.229: no vm operation [ 72 1 2 ] [ 6016 0 6016 0 0 ]  1
2015-05-22T11:25:27.519+0200: Total time for which application threads were stopped: 6.0168551 seconds, Stopping threads took: 6.0164099 seconds

这里的问题是时间很长Stopping threads。在这个例子中,它是 6 秒,这对于我们的应用程序来说已经是一个问题,但我见过更长的时间,在一个实例中(尽管没有完整的日志记录)几乎达到一分钟。

虚拟机操作(此处:no vm operation) 是变化的。我也见过,例如RevokeBias, G1IncCollectionPause, or GCG_Operation。另外,page_trap_count似乎无关紧要。我见过它为 0 的例子,也见过它为 2 的例子。不过,一致的是,时间总是反映在spin and sync.

我正在寻找这些计时值的深入解释spin and sync,但我最感兴趣的是为什么会发生这种情况以及我可以采取什么措施来应对它。我不知道我们的配置中有任何“邪恶”的东西。机器上有大量无聊的核心和未使用的内存,我们正在运行纯 Java(无 JNI),并且我们没有意识到代码中存在任何过度同步。


这里的问题是您的应用程序需要很长时间才能达到安全点。这Stopping threads输出表示 JVM 发出安全点请求到所有线程到达安全点之间所花费的时间。

The syncvalue 显示了同样的事情 - 这是所有线程到达 safeponit 所需的时间。

The spin and block值表示所需的时间blocked and spinning(执行代码)线程到达安全点。

了解这一点后,我们可以得出结论,您面临的问题是一个线程正忙于旋转,并且无法在几秒钟内到达其安全点。

究竟为什么会发生这种情况很难说。一个例子,如图所示this https://stackoverflow.com/questions/20134769/how-to-get-java-stacks-when-jvm-cant-reach-a-safepoint问题的答案是 JIT 编译器可以编译繁重的循环而无需安全点检查。

您可以尝试使用以下选项运行 JVM-XX:+SafepointTimeout -XX:SafepointTimeoutDelay=500。这将使安全点同步在 500 毫秒后超时,并打印有关未能到达安全点的线程的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是什么导致 Java 中的旋转和同步时间过长? 的相关文章

  • Eclipse 中的 Java 简单电子邮件程序

    我想制作一个简单的程序 您可以从其中发送电子邮件命令行 我找到了这个教程 http www tutorialspoint com java java sending email htm http www tutorialspoint com
  • 如何向 OkHttp 请求拦截器添加标头?

    我将这个拦截器添加到我的 OkHttp 客户端 public class RequestTokenInterceptor implements Interceptor Override public Response intercept C
  • Java:BufferedInputStream 的 available() 方法存在问题

    我正在处理以下代码 用于将大文件拆分为一组较小的文件 FileInputStream input new FileInputStream this fileToSplit BufferedInputStream iBuff new Buff
  • BigDecimal 中 Divide 方法的 Scale()

    new BigDecimal 37146555 53880000 divide new BigDecimal 1000000 scale 这返回10 但根据API divide method 返回一个 BigDecimal 其值为 这个 除
  • java模拟自定义对象

    public class MainClass public void makeCall CustomObject obj new CustomObject obj testMethod 我想进行单元测试makeCall 所以我必须嘲笑Cus
  • JSF 错误 - IllegalStateException:PWC3999:提交响应后无法创建会话[重复]

    这个问题在这里已经有答案了 我是 JSF 新手 正在构建一个使用 Facelet 创建的应用程序 这是我的模板master xhtml
  • 在Tomcat中设置环境变量TESSDATA_PREFIX

    我们正在使用名为 Tess4J 的 Tesseract OCR Java 库 如果作为独立应用程序运行 它可以正常工作 它需要一个名为 TESSDATA PREFIX 的变量 其中包含 tessdata 配置和其他字符集相关文件 它也可以与
  • Android 防火墙与 VpnService

    我正在尝试使用 BS 项目的 VpnService 为 Android 实现一个简单的防火墙 我选择 VpnService 因为它将在非 root 设备上运行 它将记录连接并让您过滤连接 基于IP 有一个应用程序可以做到这一点 因此这是可能
  • Android Studio 找不到 com.android.support:support-v4:19.1.0

    我已将一个项目导入Android Studio但我收到错误 找不到 com android support support v4 19 1 0 我在哪里可以找到这个文件 我已经使用导入了项目Gradle 我有Android Studio v
  • EasyMock : java.lang.IllegalStateException: 1 个匹配器预期,2 个记录

    我在使用 EasyMock 2 5 2 和 JUnit 4 8 2 通过 Eclipse 运行 时遇到问题 我已阅读此处所有类似的帖子 但尚未找到答案 我有一个包含两个测试的类 它们测试相同的方法 我正在使用匹配器 每个测试单独运行时都会通
  • 未从线程接收位置数据

    我尝试使用计时器经常发送包含用户位置的短信 最初 我遇到了空指针异常 这是由于我犯了一个简单的错误 一旦解决了这个问题 一切似乎都运行良好 但是 它永远不会获取我的位置 因此 不断发送的文本显示 无法接收位置 我想问的是为什么它无法获取我的
  • 使用泛型进行选择排序

    我对整数进行了选择排序并且它正在工作 当我尝试修改程序以使用泛型时 编译器会抱怨 我不知道如何修复它 如果有人能提出一些建议和建设性意见 我将不胜感激 这是代码 public class SelelctionSort public stat
  • org.apache.catalina.core.JreMemoryLeakPreventionListener 中急切调用 URLConnection 的 setDefaultUseCaches(false) 是什么原因

    这个问题可能有点难以找到答案 这是一个系列中的问题考虑使用 Policy getPolicy 的原因是什么 因为它将保留对上下文的静态引用并可能导致内存泄漏 https stackoverflow com questions 7057421
  • JSF“总”变量类似于 JSTL 中的 c:set

    我不喜欢 JSF 但我需要用它来解决这个问题 我正在 纯 JSF 中工作 所以这就是我基本上需要的 但我不知道如何用 JSF 来实现它
  • System.out.println("嗨"+6+10);打印Hi610?

    为什么要这样做 太令人困惑了 运算符优先级和结合性 两点 操作员 如果一个或两个参数都是字符串 则进行字符串连接 操作员 从左到右工作 所以在你的例子中 Hi 6 is Hi6 and Hi6 10 is Hi610 编辑 正如您在对另一个
  • 为什么我的 Java 路径中添加了“L”?

    我在我的类路径中加载了一个 jar 在 iReport 中 如果重要的话 我确信它具有所需的方法 但是当我尝试测试连接 从而调用该 jar 时 我得到一个 java lang NoSuchMethodError 说它正在引用班上 Lorg
  • 使用 OpenNLP 获取句子的解析树。陷入困境。

    OpenNLP 是一个关于自然语言处理的 Apache 项目 NLP 程序的目标之一是解析一个句子 并给出其语法结构的树 例如 天空是蓝色的 这句话 可能会被解析为 S NP VP The sky is blue where S是句子 NP
  • JSF - 实施受限页面过滤器

    我正在关注 BalusC 的回答JSF 2 0 如何获取在浏览器地址栏中输入的 URL https stackoverflow com questions 4105263 jsf 2 0 how to get the url that is
  • 从 IntelliJ 运行 JavaFX 应用程序

    Versions openjdk版本 11 0 11 2021 04 20 OpenJDK 运行时环境 build 11 0 11 9 Ubuntu 0ubuntu2 20 10 OpenJDK 64 位服务器虚拟机 内部版本 11 0 1
  • Java分数计算器

    我对 Java 编程还很陌生 我的 AP 计算机编程课程有作业要完成 所以请耐心等待 我必须弄清楚如何将两个分数相乘 我想知道是否有任何方法可以在方法内部声明变量并在该方法外部使用它 我在介绍方法中的 while 循环 谢谢您 希望这不会令

随机推荐

  • 如何将 UISearchController 搜索栏设置为不是 tableHeaderView 或 navigationItem.titleview 的视图?

    我试图在表格滚动时保持搜索栏可见 目前 我将其作为表视图中的标题 并且它按应有的方式工作 但是当然 当您沿着表格向下滚动时 搜索栏会滚动到屏幕之外 我想我可以简单地修改这个代码示例来做到这一点 如何在 iOS 8 中使用 UISearchC
  • Keycloak - 如何检查用户名和电子邮件是否存在

    我们希望以编程方式创建 Keycloak 用户 并检查用户名和 或电子邮件地址是否已存在于 Keycloak 中 我们正在使用的版本4 4 0 FINAL 当我们使用 Keycloak 管理客户端以编程方式创建用户时 如果用户名或电子邮件地
  • Laravel 路线带我去别的地方

    我正在尝试通过 Laravel 和 vue js 创建 CRUD 应用程序 但这里总是存在问题 当我运行该应用程序时 它会转到仪表板并且不会出现 CRUD 操作 以下是 Routes web app 代码
  • 基于 int 创建多个编号变量

    我将如何创建多个NSDictionary使用数组计数的变量 这基本上是我想到的 但我不确定如何使用 Objective C 语法来实现它 doesntContainAnother is an NSArray 我希望字典的名称使用当前值loo
  • CMD脚本:如何关闭CMD

    我创建了一个小命令 可以让我启动 Internet Explorer 但是 我希望关闭启动 IE 时显示的小命令提示符 我怎样才能做到这一点 这是我当前的代码 ProgramFiles Internet Explorer iexplore
  • 未知协议:c(JDOM 和 SAXBuilder)

    我正在使用 JDOM 和 SAXBuilder 来解析 XML 文件 但我遇到了一个抛出此错误的文件问题 java net MalformedURLException unknown protocol c at java net URL
  • Shell 命令适用于命令行,但不适用于 PHP exec

    我有一个命令 当直接在命令行上运行时 它可以按预期工作 它运行超过 30 秒并且没有抛出任何错误 当通过 PHP 函数 exec 包含在由 cron 调用的脚本中 通过 PHP 脚本调用相同的命令时 它会抛出以下错误 最长执行时间为 30
  • Windows 下以 cygwin 和 Github 结尾的行

    我希望能够使用 Windows 应用程序的 Github 以及使用 Cygwin 在 Windows 上 的命令行中的 git 来处理我的 git 项目 但当我从一种切换到另一种时 我不断遇到行尾问题 如果使用命令行工具存储库没有更改 它将
  • 如何模拟从不同模块导入的方法中导入的函数[重复]

    这个问题在这里已经有答案了 我有以下功能要测试 my package db engine db functions py from utils import execute cmd from my package db engine db
  • 使用jquery获取facebox div内元素的值

    我的页面上有两个 div 标签 如下所示 当我引用 itemName 元素的值时 使用 itemName val 我在两个 div 中都有 我总是得到第一个 div 中元素的值 即 空白 有没有办法使用 jquery 获取第二个 div 中
  • 在所有地址上运行我自己的用户脚本有风险吗?

    Tampermonkey 对于大多数浏览器 和 Greasemonkey 对于 Firefox 都支持 match and include指令 当我开始阅读它们之间的区别时 结果发现 match有点严格 用户脚本不会在某些地址上启动 这可能
  • 如何获得具有固定总和和大小的随机数列表

    如何根据给定大小和期望总和获取随机数列表 完全支持 i hava a code sum int ts https github com bluelovers random blob master src distributions sum
  • IronPython 3 兼容性

    我喜欢Python语言 主要使用标准CPython 3 版本来进行简单的脚本编写和作为算法沙箱 有时我需要 NET集成 所以我使用IronPython 它现在是2 7版本 我更喜欢 3 因此不愿意使用旧的 2 7 有没有关于何时发布以及迁移
  • kusto now() 函数在单个查询中返回相同的值

    我正在尝试检测 kusto 函数的一部分来检查不同场景下的执行时间 但是我找不到打印前后时间的方法 print now
  • Heroku 上的 Django 与 PostgreSQL 应用程序不同步

    我正在尝试按照以下教程在 Heroku 上运行 Django Heroku 上的 Django 入门 https devcenter heroku com articles django 一切都运行良好 直到我到达syncbd部分 同步数据
  • java中的递归方法记忆化

    我正在做家庭作业 我已经筋疲力尽了 我是编程新手 这是我的第一堂编程课 这就是问题 考虑 Collat z java 中的以下递归函数 它与数论中一个著名的未解决问题 称为 Collat z 问题或 3n 1 问题 相关 public st
  • 动态组件的 Angular i18n 翻译

    我已经阅读了大量有关 Angular 2 i18n 的文章 并且一直在寻找尝试构建动态组件的最佳方法 问题 i18n 无法将变量文本转换为动态 xlf 文件 i18n 使得使用 i18n 属性创建带有文本的动态组件变得困难 可能的解决方案
  • 尝试在已经呈现的视图控制器上呈现 UIAlertController (null) [Swift]

    我有一个警报视图 试图在照片视图上呈现 照片显示在列表中 并且可以推送到全屏视图 照片视图正在以编程方式显示 我认为这就是导致问题的原因 因为警报视图试图在已经呈现的 照片 视图之上呈现另一个视图 警报视图正在尝试显示 但出现此错误 War
  • 如何接收USB连接状态广播?

    我正在尝试在我的应用程序中检测 USB 连接 即 USB 是否连接到设备 它正在 Marshmallow 6 0 1 sdk23 上进行测试 但我无法接收广播操作 ACTION USB DEVICE ATTACHED 或 ACTION US
  • 是什么导致 Java 中的旋转和同步时间过长?

    在 Java 8 Update 45 中 将这些选项添加到java call XX PrintGCApplicationStoppedTime XX PrintSafepointStatistics XX PrintSafepointSta