在运行时打开GC日志记录

我自己的汽车音响概念图 总是有下一个JVM表现不佳。 而且,您内心深知,如果您只有少数启动选项可以公开一些有关正在发生的事情的信息,那么您可能就有机会真正修复该死的东西。 但是不,您需要的标志( -XX:+ HeapDumpOnOutOfMemoryError或-XX:+ PrintGCDetails )始终丢失。

因此,您可以悲痛地耸耸肩,杀死受苦的JVM,更改启动参数,并祈祷问题的情况在重启后得以重现。 有时确实如此,现在您可能有足够的证据来进行下一步工作并开始解决根本原因。

所描述的方法的问题很明显–您需要进行一次额外的重新启动,而不是单次中断,才能选择那些令人讨厌的调试选项。 事实上,有一种解决方法,有时将其添加到您的武库可能会是有益的。

资讯

JDK捆绑包中隐藏了一个不错的小实用程序。 jinfo是一个命令行实用程序,用于从正在运行的Java进程中收集配置信息。 但是,有趣的部分是,使用-flag选项, jinfo实用程序可以为指定的Java进程动态调整某些Java VM标志的值。 这样的标志的列表是有限的,但是在某些情况下仍然有用。 可以通过以下命令检查JVM上此类标志的完整列表:

my-precious me$ java -XX:+PrintFlagsFinal -version|grep manageableintx CMSAbortablePrecleanWaitMillis            = 100                                 {manageable}intx CMSWaitDuration                           = 2000                                {manageable}bool HeapDumpAfterFullGC                       = false                               {manageable}bool HeapDumpBeforeFullGC                      = false                               {manageable}bool HeapDumpOnOutOfMemoryError                = false                               {manageable}... cut for brevity ...bool PrintGC                                   = false                               {manageable}bool PrintGCDateStamps                         = false                               {manageable}bool PrintGCDetails                            = false                               {manageable}bool PrintGCTimeStamps                         = false                               {manageable}

-XX:+ PrintFlagsFinal列出所有JVM选项,在外面的“ 管理 ”选项目前的兴趣。 这些可以通过JDK管理界面( com.sun.management.HotSpotDiagnosticMXBean API )动态写入。 同样的MBean也通过JConsole发布。 按照我的喜好,命令行版本要方便得多。

示例如何使用jinfo

作为如何使用jinfo的示例,让我们动态地在运行的JVM上打开GC日志记录:

my-precious me$ jps
12278 HighAllocationRate
12279 Jps
12269 JConsole
my-precious me$ jinfo -flag +PrintGCDetails 12278
my-precious me$ jinfo -flag +PrintGC 12278
my-precious me$

该实用程序通过打开-XX:+ PrintGC和-XX:+ PrintGCDetails选项来打开GC日志记录。 与命令行参数的行为的细微差别在于,您必须通过jinfo同时指定PrintGCDetailsPrintGC选项 如果您是通过启动脚本设置参数的,则只需-XX:+ PrintGCDetails即可 ,因为它会自动打开-XX:+ PrintGC

不过,检查标准输出后,12278 PID的GC日志开始顺利滚动:

...
[GC (Allocation Failure) [PSYoungGen: 876416K->102624K(909312K)] 1094420K->320820K(1161216K), 0.2173131 secs] [Times: user=0.74 sys=0.00, real=0.22 secs] 
...
[GC (Allocation Failure) [PSYoungGen: 890304K->102240K(917504K)] 1108924K->320956K(1169408K), 0.2446639 secs] [Times: user=0.82 sys=0.01, real=0.25 secs] 
...

关闭日志记录是类似的–您只需要调用jinfo -flag -PrintGCDetails 12278jinfo -flag -PrintGC 12278命令即可删除日志消息。

有了这些知识,我只能希望它将为您节省一两天的故障排除时间。 假设您不是性能监控工具(例如Plumbr)的满意用户,在这种情况下,您一开始就不会遇到此类需求。

翻译自: https://www.javacodegeeks.com/2015/03/turning-on-gc-logging-at-runtime.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jpannel设置位置xy_实用的摄影技巧!10种常见摄影场景的单反相机设置技巧!

相机是爱拍一族必不可少的东西,对于摄影爱好者对于一些相机设置技巧可能也不是太了解,在摄影过程中,有很多的场景需要不同的设置,根据光线变化和周围环境,一般来说都会特定的摄影技巧,今天红视觉和大家一起…

Only digits (0-9) can be put inside [] in the path string: formData.XXX

使用uniapp开发时微信小程序中爆出的问题,问题在于form表单组件中绑定表单值,去除报错值则正常。 解决办法如下: 修改注释行内容, 转载连接

外包以小时计算金额的费用_2020年初级会计各大税种的计算公式,请收藏!

一、各种税的计算方式增值税1、一般纳税人应纳税额销项税额—进项税销项税额销售额税率组成计税价格成本(1成本利润率)组成计税价格成本(1成本利润率)(1-消费税税率)2、进口货物应纳税额组成计税价格税率组成计税价格关税完税价格关税(消费税)3、小规模纳税人应纳税额销售额征收…

VSCode设置ESLint语法检查

转载 "eslint.validate": ["javascript","javascriptreact","vue-html",{"language": "vue","autoFix": true}],"eslint.run": "onSave","eslint.autoFixOnSave": true…

次要GC,主要GC与完整GC

在使用Plumbr中的GC暂停检测功能时,我被迫通过大量有关该主题的文章,书籍和演示工作。 在整个旅程中,我多次对次要,主要和完全GC事件的使用(误用)感到困惑。 这导致了这篇博客文章,我希望我设法…

怎么改字段名称_精装房这么改!换门框,封阳台,效果出来比毛坯房还好

最近有朋友后台留言,称自己原本想一步到位购买精装房,但收房验收时才发现根本不合心意,空间利用率太低配色也老气,已经打算重新改装了。所谓精装房就是开发商将地板、门、厨房、卫生间、少量天花和部分柜子进行安装,业主只要添加些…

ZF2系列 – Zend Framework 2 MVC實作 (Part 3)

我之所以這麼喜歡Zend Framework的關係,其中一項就是它可以幫你很簡單的實現MVC的架構,所以今天的任務就是要建立一個以MVC為架構的基本網頁。 首先當然要先建立一個測試用的資料庫,因此我簡單的建立了一個名為Employee的資料表來進行展示&am…

方向盘左右能摇动_学车这么久了,你还不会打方向盘呢?

刚刚学车的朋友肯定有过这样的问题:教练说:往左打两圈,往右打一圈,往左打半圈……你乖乖听话照做,然后教练说:回正吧。是不是一下就蒙住了??我刚才打几圈来着?&#xff1…

Asp.Net基础 - 9.Web开发原则

目录: 9.1.Web开发的一些基本原则 9.2 原则一 9.2.1 C#代码是运行在服务器端的,JS代码是运行在浏览器客户端的 9.2.2 在服务器端“弹出消息窗口” 9.2.3 案例说明(客户端与服务端互不影响) 9.3 原则二 9.4 原则三 9.4.1 客户端…

重置手机_【轻松办税】ITS客户端申报密码重置不会操作?看过来,3分钟包你会!...

ITS扣缴客户端实名办税功能已经上线了,并且在2020年1月1日后将不再支持以CA方式进行登录,可是公司申报密码是很久前去大厅办理的,早就忘记了,这可咋好?别急,快来关注“上海税务”,包你3分钟学会…

Drools 6.2.0.Final发布

我们很高兴宣布最新,最出色的Drools 6.2.0.Final版本。 特别是此发行版更加注重改进的可用性和功能,这些功能使项目更易于使用(和采用)。 新功能包括对工作台UI的大量改进,对社交活动和插件管理的支持以及规则的全新E…

对OIM Web(UI)层进行压力测试

Oracle IDM中的默认配置保留20个专用于服务前端(UI)请求的线程 。 从根本上讲,这意味着应用程序服务器具有20个线程池,可用于为通过Web控制台(/ identity或/ sysadmin)访问OIM的用户提供服务。 对于Weblog…

java 拼接html_程序员用1.5小时写出的Java代码,让同事瞠目结舌!直呼优秀

1.曾经不止一次在生产中见过类似这样的代码:这有很多变种,例如用 Integer.valueOf(1)、 (Integer)1 之类的,那些细节都不重要。重要的是:凭空用一个 Integer 对象作为锁对象。2.AbstractComponentBuilderTemplateFactory3.HelloWo…

本地项目antd 修改.less文件导致内存溢出

项目场景: antd 项目,修改less文件会导致内存溢出 问题描述 本地环境antd 项目,修改less文件会导致内存溢出;如下 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory原因分析: 这…

序列化代理模式

在上一篇文章中 ,我谈到了一般的序列化。 这是更加集中的内容,并提供了一个细节: 序列化代理模式 。 这是处理序列化许多问题的一种好方法,通常是最好的方法。 如果开发人员只想了解有关该主题的一件事,我会告诉他。 …

函数分组学通MongoDB——第三天 细说高级操作

改章节个人在广东喝咖啡的时候突然想到的...明天就有想写几篇关于函数分组的文章,所以回家到后之就奋笔疾书的写出来发布了 明天跟大家分享一下mongodb中比拟好玩的识知,要主括包:聚合,标游。 一: 聚合 见常的聚合作操…

eps如何建立立体白模_服装立体裁剪教程 结构都是“立裁”出来的 才智服装

核心提示:基础立裁服装立体裁剪是指用白坯布为常用替代物,在人台上直接塑造服装样式,并进行样板制作的技术。由于立体裁剪是设计师主要依靠视觉进行的直观操作的过程,所以它具有激发和展开新的设计思维的功能。一、基础立裁服装立…

平衡抽象原理

使代码复杂易读和理解的一件事是&#xff0c;方法内部的指令处于不同的抽象级别。 假设我们的应用程序仅允许登录用户查看其朋友的旅行。 如果用户不是朋友&#xff0c;则不会显示任何行程。 一个例子&#xff1a; public List<Trip> tripsByFriend(User user, User l…

IntelliJ IDEA内部设计

IntelliJ IDEA的第一版于2001年1月发布&#xff0c;当时它是第一个集成了高级代码导航和代码重构功能的Java IDE之一。 2009年&#xff0c;JetBrains开源了其社区版本 。 从那时起&#xff0c;创建了许多基于它的IDE&#xff0c;例如Google的Android Studio。 让我们使用JArc…

TDD:MS自带的单元测试 之 线程模型和执行顺序

背景 我一直在呼喊“不要靠假设编程”&#xff0c;可是我却常常这么做。我用单元测试就是一种基于假设进行编程的反面教材&#xff0c;今天就下决心弄明白它。 主要想弄明白两个问题&#xff1a; 执行的所有单元测试方法的线程模型&#xff0c;是单线程&#xff1f;是多线程&am…