调整 G1GC 参数以进行积极的垃圾收集?

2024-01-08

我的 JVM 基本上是一个 Spark 执行器,它一个接一个地运行任务。任务需要大量内存,并且在其生命周期内需要大量内存。

JConsole 和 JVisualVM 并排报告 https://i.stack.imgur.com/seZNO.png

上面的 JVM 使用默认参数在 G1GC 上运行。正如您在右侧的 VisualVM 报告中下午 4:25 到 4:32 之间看到的那样,峰值是由于执行程序运行的每个任务造成的(本质上,每个峰值是由于执行程序在上一篇已完结)。当我在 4:35 触发手动 GC 时,我看到堆使用率急剧下降。此外,正如您在 JConsole 报告的左侧看到的那样,旧代空间从未被 G1GC 收集(旧代空间在 16:35 之前急剧下降是由于手动 GC)。

由于我的应用程序是 Spark 批处理作业应用程序,因此如果 JVM 花费大量时间进行 GC,我就可以接受。但是,我的内存有点不足。因此,我想知道如何调整 JVM G1GC 参数,以便有更频繁的 GC(旧的 gen 空间也被收集),并且我可以用相当少的堆空间 (XMX) 来完成工作。


对于 G1,及时将未使用的内存返回给操作系统是 OpenJDK 12 的一项功能:

  • JEP 346:立即从 G1 返回未使用的提交内存 https://openjdk.java.net/jeps/346 (追踪问题) https://bugs.openjdk.java.net/browse/JDK-8204089

如果内存不足,您可能需要控制 RSS(从操作系统分配的总内存),而不仅仅是 Java 堆中已使用的内存。对于当前 OpenJDK 中的 G1,(半)手动触发的完整 GC 似乎是触发 RSS 减少的唯一方法。 (如果改变频繁发生完整GC的人体工程学,G1的性能会很差。)

如果您的 OpenJDK 版本包含雪兰多收藏家 https://wiki.openjdk.java.net/display/shenandoah/Main,如果您需要节省内存,特别是进行一些调整,例如使用-XX:ShenandoahGCHeuristics=compact.

ZGC https://wiki.openjdk.java.net/display/zgc/Main最终也应该支持返回内存,但是目前还没有 http://mail.openjdk.java.net/pipermail/zgc-dev/2018-October/000489.html; the 补丁添加一个-XX:+ZReleaseUnusedHeap option http://cr.openjdk.java.net/~pliden/zgc/zrelease_unused_heap/webrev.0/尚未合并。

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

调整 G1GC 参数以进行积极的垃圾收集? 的相关文章

随机推荐

  • 在 PHP 中,检查 30 分钟是否已过的示例?

    我有一个验证功能 用户将在 30 分钟后自动注销 我想在身份验证功能中存储登录时间 时间戳 然后 每次调用需要身份验证的函数时 我都会更新该时间 如果距上次通话已过去 30 分钟 则会自动重新进行身份验证 我将把上次访问时间戳或日期存储在全
  • 如何将 CMake 文件 (GLOB SRCS *.) 与构建目录一起使用

    这是我当前的 CMakeLists txt 文件 cmake minimum required VERSION 3 3 set CMAKE C FLAGS Wall g project bmi file GLOB SRCS cpp h ad
  • 选择 xQuery 中的第 n 个子元素/选择下一个元素

    我无法找到好的 xQuery 教程 基本上我想做的是检索文本etc 从这个 html 节点 div class venue div class vitem p style padding 6px 0pt 0pt class label AD
  • 配置 Microsoft.AspNet.Identity 以允许电子邮件地址作为用户名

    我正在创建一个新应用程序 并开始使用 EF6 rc1 Microsoft AspNet Identity Core 1 0 0 rc1 Microsoft AspNet Identity EntityFramework 1 0 0 rc1
  • PowerShell 是强类型语言吗?

    PowerShell 肯定属于动态语言的范畴 但它会被视为强类型吗 这些术语存在一定程度的混乱 本文 http eli thegreenplace net 2006 11 25 a taxonomy of typing systems 解释
  • 在Android应用程序上获取id令牌并在后端服务器上验证它(如何使用id令牌?)

    我正在开发一个 Android 应用程序 它使用来自我自己的 REST API 服务器的数据 我想使用 Firebase 身份验证 因为它允许用户以非常简单的方式使用 Google Facebook Twitter 登录 但我不知道如何使用
  • Intl.Collat​​or 和带有数字选项的自然排序对十进制数字的排序不正确

    使用对十进制数进行排序Intl Collator以及启用的选项numeric比较小数不正确 在某些浏览器上 比较 0 005 和 0 05 会返回 0 因为数字相同 不同浏览器中的结果 铬 54 0 火狐 49 0 边缘 1 IE 11 1
  • 如何跳过 PHPUnit 中的前 N ​​个测试?

    场景 使用 PHPUnit 运行大量测试 一些测试 例如 1544 中的 537 个 在几分钟后失败 更改很小 不太可能影响之前的测试 我希望能够跳过前 536 个测试 执行类似这样的操作以 从我上次停下来的地方继续 phpunit ski
  • 在 ASP.NET 中自动进行 HtmlEncode

    被 Ruby on Rails 3 宠坏了 我希望所有 HTML 输出都能自动编码 我问这个关于脚本漏洞的问题 https stackoverflow com questions 7136864 script exploits in asp
  • 将本机页脚视图添加到 webview

    我有一个WebView和我想在下面添加的本机自定义视图WebView 我试过包裹WebView里面一个ScrollView 虽然这正是我想要的 但滚动性能确实很滞后 如果用户点击屏幕滚动滚动条并不会像应有的那样停止滚动 我想到的另一种方法是
  • ASP.NET MVC + 模型状态和部分视图

    我有一个名为 LogOn 的部分视图 其中我基本上将登录输入复制到控件中 我使用 Html RenderPartial 将控件放置在 Ajax BeginForm 内的 Index Html 中 div div 我正在尝试传回验证消息并显示
  • 单击按钮后按键监听器不工作

    我在java中的框架上附加了一个按键侦听器 当我按下任何键时 我可以检测到按键 但是奇怪的事情正在发生 我的游戏是扫雷游戏 我有一个重新启动按钮 基本上可以清除棋盘并重新挖掘它 奇怪的是 当我用鼠标单击按钮时 一切都正常 并且面板被提醒 但
  • pandas 数据框的高效扁平化

    我有一个熊猫数据框 它看起来像这样 pd DataFrame data np arange 1 10 reshape 3 3 index A B C columns A B C 但有 100 行和 100 列 我想把它压平 使它看起来像这样
  • 将文本从电脑复制并粘贴到 Android Studio 模拟器时出错

    大约 2 个月前 我能够从电脑剪贴板复制文本并将其粘贴到在 Android Studio 模拟器上运行的应用程序中 只需在电脑上执行 ctrl c 并将其粘贴到 TextView 中即可 现在我使用的是新版本的Android Studio
  • 钥匙锁实际上锁定了什么资源?

    我知道钥匙锁将钥匙锁定在索引中 然而 钥匙 到底意味着什么呢 例如 如果我在姓氏列上有一个非聚集索引并尝试更新姓氏 Jones 的位置 那么我是否会有效锁定表中姓氏为 Jones 的每一行 或者索引会被锁定在更高的级别 从而阻止访问姓氏不是
  • 在 ListView 中触摸项目时更改行背景颜色

    我尝试使用 BaseAdapter 在 ListView 中显示项目 我在 BaseAdapter 中尝试以下代码 Override public View getView final int position View convertVi
  • CSS:为什么“vertical-align:middle”不起作用?

    考虑以下示例 现场演示在这里 http jsfiddle net cXUnT HTML a img src http img brothersoft com icon softimage s smiley s challenge 13193
  • 根据浏览器宽度显示图像

    我有一堆图像想要使用 jquery 显示 我有 div 我使用 jquery 根据某些 node id 标准填充 div 例如 如果 node id 是 teamA 我会显示图像名称中包含 teamA 文本的图像 它可以工作 问题是当将图像
  • 地平线检测算法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您能帮我找到有关如何检测图像上的地平线的信息吗 它不应该基于遗传算法或神经网络 只是发现这个问题很有趣 所以我在互联网上为您搜索并提出
  • 调整 G1GC 参数以进行积极的垃圾收集?

    我的 JVM 基本上是一个 Spark 执行器 它一个接一个地运行任务 任务需要大量内存 并且在其生命周期内需要大量内存 JConsole 和 JVisualVM 并排报告 https i stack imgur com seZNO png