RMI强制Full GC每小时运行一次

在我职业生涯中进行的所有故障排除练习中,我感到随着时间的推移,我所追寻的错误在不断发展,变得越来越卑鄙和丑陋。 也许仅仅是我的年龄开始了。这个特别的Heisenbug –看起来像这篇帖子一样,再次让我清醒了很多,而不是我想要的。

与其他特别令人讨厌的错误一样,我现在遇到的那个错误的症状是“有时系统运行缓慢”。 太好了,我已经感觉到脊椎发麻。 当我发现系统在生产中设置了简单的监视解决方案来监视系统时,情况就好了一些。 从本质上讲,它只是Pingdom的功能 ,每秒测量一次响应时间,但是延迟图立即引起了我的注意。

JVM峰值负载

在图中绘制的响应时间似乎是随机的尖峰–每次在蓝月亮中,响应开始花费的时间将近10倍。 不久之后,一切又恢复了正常。

最初的犯罪嫌疑人–看不见定期的cron工作或昂贵的报告流程。 存储监视也没有暴露任何特别丑陋的查询击中数据库。 但是在打电话之前,我在应用程序配置中添加了更多日志记录选项,重新启动了整个程序,并迷惑了自己的行为。

第二天早上,我还有其他事情要看,GC日志等。 十分钟之内,我发现自己盯着下面的东西:

11.408: [Full GC [PSYoungGen: 192K->0K(48640K)] [ParOldGen: 16324K->14750K(114688K)] 16516K->14750K(163328K) [PSPermGen: 31995K->31637K(64000K)], 0.1543430 secs] [Times: user=0.58 sys=0.00, real=0.16 secs]
...
3613.362: [Full GC [PSYoungGen: 256K->0K(47104K)] [ParOldGen: 15142K->13497K(114688K)] 15398K->13497K(161792K) [PSPermGen: 32429K->32369K(72192K)], 0.1129070 secs] [Times: user=0.51 sys=0.00, real=0.11 secs]
...
7215.278: [Full GC [PSYoungGen: 224K->0K(44544K)] [ParOldGen: 13665K->13439K(114688K)] 13889K->13439K(159232K) [PSPermGen: 32426K->32423K(70144K)], 0.0881450 secs] [Times: user=0.44 sys=0.00, real=0.09 secs]
...

现在,我可以将看似随机的性能下降与每次经过大约3600秒时运行的Full GC关联起来。 将VisualVM附加到JVM令我感到困惑–没有证据表明高内存使用率会导致整个垃圾收集器运行。 与开发人员核对后,我确定他们没有通过cron作业运行显式GC。 所以我站在那儿,对GC的常规性感到困惑。

工程师对问题感到困惑时会怎么做? 他谷歌 。 就在那里,凝视着我的脸。 与担心每小时进行一次完整GC的人员进行的逐页讨论,没有任何明显的原因。

罪魁祸首-RMI。 显然,当您的应用程序通过RMI公开其服务或通过RMI使用任何服务时,您必然会有一个额外的垃圾回收周期。 正如RMI文档所述 :

“当需要确保不导出不可达的远程对象并及时收集垃圾时,此属性的值表示Java RMI运行时将允许在本地堆的垃圾回收之间的最大间隔(以毫秒为单位)。 默认值为3600000毫秒(一小时)。”

暂时的解决方案是将sun.rmi.dgc.server.gcInterval长度从默认的3,600秒增加。 我想知道,当RMI过去每分钟强制一次完整的GC时,在JDK 6中引入更改之前,情况如何。 考虑到当时所有的EJB狂潮,我猜没有一个应用程序在性能方面有机会。 如果您有远古时代的回忆,也许您可​​以向我们说明这些应用程序如何能够度过这种疯狂。

参考: RMI强制Full GC每小时从我们的JCG合作伙伴 Nikita Salnikov Tarnovski (在Plumbr Blog博客上)运行。

翻译自: https://www.javacodegeeks.com/2013/12/rmi-enforcing-full-gc-to-run-hourly.html

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

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

相关文章

apache配置-html碎片shtml格式

修改SSI 文件 conf–httpd.conf <Directory "D:/Android/Apache2.2/htdocs"> //修改文件目录 # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymL…

php+条件限定符,const 限定符

const 限定符const 对象一旦创建后不可改变,所以const必须初始化.const int iget_size(); //运行时初始化const int j43;const int k; //错误,必须初始化默认状态下,const对象仅在文件中有效,解决办法是对于const变量不管是声明还说定义都添加extern关键字extern const int buf…

git删除远程分支文件,不改变本地文件

git提交项目时候踩的Git的坑 特别 由于准备春招&#xff0c;所以希望各位看客方便的话&#xff0c;能去github上面帮我Star一下项目https://github.com/Draymonders/Campus-Shop 经历 由于刚开始没有设置.gitignore文件&#xff0c;导致项目中所有的文件都被提交到了github上面…

python列表字符串转数字_python 将列表中的字符串转为数字

本文实例讲述了Python中列表元素转为数字的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 有一个数字字符的列表&#xff1a; numbers [‘1‘, ‘5‘, ‘10‘, ‘8‘] 想要把每个元素转换为数字&#xff1a; numbers [1, 5, 10, 8] 用一个循环来解决&#xff…

Spring的@Primary注释在起作用

Spring是一个永不止息的框架。 这是因为它提供了许多不同的解决方案&#xff0c;使我们&#xff08;开发人员&#xff09;无需编写数百万行代码即可完成我们的任务。 取而代之的是&#xff0c;我们能够以更具可读性&#xff0c;更标准化的方式进行操作。 在这篇文章中&#xff…

JS对全角与半角的验证,相互转化以及介绍

1.什么是全角和半角? 全角&#xff1a;是一种电脑字符&#xff0c;是指一个全角字符占用两个标准字符(或两个半角字符)的位置。全角占两个字节。 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。在全角中&#xff0c;字母和数字等与汉字…

oracle 安装ora 27102,ORA-27102 解决办法

因为在32位操作系统上执行了如下的操作alter system set sga_max_size2G scopespfile;之后再重启数据库就会失败报出错误:ORA-27102Out of Memory解决的方法也很简单:新建一个文本文件 如initaaa.ora内容&#xff1a;SPFILE../product/10.2.0&#xff0f;db_1/dbs/spfileorcl.o…

Codechef August Challenge 2018 : Modular GCD

传送门 一开始还手动拓欧找规律&#xff0c;发现好像玩不了。 然后想了想&#xff0c;A-B这个数比较小&#xff0c;枚举它的因子判断合不合法就行了。 需要特判AB的情况。 #include<cstdio> #include<algorithm> #define ll long long #define ld long double usin…

bootstrap源码之滚动监听组件scrollspy.js详解

其实滚动监听使用的情况还是很多的&#xff0c;比如导航居于右侧&#xff0c;当主题内容滚动某一块的时候&#xff0c;右侧导航对应的要高亮。 实现功能 1、当滚动区域内设置的hashkey距离顶点到有效位置时&#xff0c;就关联设置其导航上的指定项 2、导航必须是 .nav > l…

c语言 指针_C语言——指针

学习阶段&#xff1a;高中信竞、大学编程。前置知识&#xff1a;二进制与十六进制&#xff0c;C语言基础&#xff0c;数组。指针初学可能比较难理解&#xff0c;我这篇文章尽量用通俗易懂的方式来讲解。1. 指针概述为什么有指针这个东西&#xff1f;因为指针很贴近计算机内部的…

将jOOQ与Spring结合使用:配置

我遇到了由ORM引起的性能问题。 尽管我不得不承认大多数这些问题确实是由您造成的&#xff0c;但是我开始认为在只读操作中使用ORM是不值得的。 我开始寻找实现这些操作的替代方法。 这就是我遇到jOOQ的方式 &#xff0c;它指出&#xff1a; jOOQ从您的数据库生成Java代码&a…

FFT实现高精度乘法

你应该知道$FFT$是用来处理多项式乘法的吧。 那么高精度乘法和多项式乘法有什么关系呢&#xff1f; 观察这样一个$20$位高精度整数$11111111111111111111$ 我们可以把它处理成这样的形式&#xff1a;$\sum_{i0}^{19}1\times10^i$ 这样就变成了一个多项式了&#xff01; 直接上代…

oracle精确匹配时间,Oracle时间精确到时、分、秒处理方法

Oracle时间精确到时、分、秒处理方法一般数据库中时间的格式为DATE类型&#xff0c;而我们从页面中获取的时间往往为String类型&#xff0c;这个就需要类型的转换。一般我们会通过调用 Java.text.SimpleDateFormat JAVA类来对其进行转换。这个JAVA类中我们经常用到的方法有两个…

BZOJ 2141 排队(分块+树状数组)

题意 第一行为一个正整数n&#xff0c;表示小朋友的数量&#xff1b;第二行包含n个由空格分隔的正整数h1,h2,…,hn&#xff0c;依次表示初始队列中小朋友的身高&#xff1b;第三行为一个正整数m&#xff0c;表示交换操作的次数&#xff1b;以下m行每行包含两个正整数ai和bi&…

骆驼路线的主/从故障转移

一种实现主/从故障转移模式的方法是拥有一个应用程序实例的集群&#xff0c;其中一个实例&#xff08;主实例&#xff09;当前处于活动状态&#xff0c;而其他实例&#xff08;从属实例&#xff09;处于待机状态&#xff0c;随时可以在主实例发生故障时接管。 一些项目提供了开…

vant input框禁止调用手机键盘_【案例分享】适应网银等密码键盘的解决方案

在各种技术不断进步的大趋势下&#xff0c;对业务造成了极大影响&#xff0c;从大数据到云计算&#xff0c;再到人工智能&#xff0c;众多企业都开始步入技术改革&#xff0c;从而实现企业的创新。但与此同时&#xff0c;更多技术的引用&#xff0c;意味着更多的业务系统上线&a…

JS无法获取display为none的隐藏元素的宽度和高度的解决方案

在实际开发中会遇到确实需要获取隐藏元素的宽高&#xff0c;这儿所说的隐藏元素是display为none的元素。 可使用jQuery Actual Plugin插件来完成&#xff0c;其源码如下&#xff1a; ;( function ( $ ){$.fn.addBack $.fn.addBack || $.fn.andSelf;$.fn.extend({actual : fun…

删除kafka topic

1、因为项目原因&#xff0c;kakfa通道中经常造成数据阻塞&#xff0c;导致kafka通道中数据量过大&#xff0c;因此我需要将kakfa通道中数据清除&#xff08;个人项目原因&#xff0c;一直使用一个消费者&#xff0c;只要保证当前消费者不在消费之前很久的数据就可以。因数量过…

启动oracle数据库工具,Oracle数据库常用工具

SQL*Plus:SQL*Plus 是Oracle 数据库的一个基本工具&#xff0c;它允许用户使用SQL 命令交互式的访问数据库&#xff0c;也允许用户使用SQL*Plus 命令格式化输出参数。 通过SQL*Plus &#xff0c;可以完成数据库的启动和停止、创建和运行查询、更新数据、格式化输出数据报表、运…

可持久化并查集小结

https://www.zybuluo.com/ysner/note/1253722 定义 允许恢复历史状态的并查集。 建立 建\(Q\)棵主席树&#xff0c;每个主席树上维护当前状态并查集各个节点的父亲。 &#xff08;实际上就是并查集和主席树强行捆绑在一起&#xff09; 操作 每次操作前自动继承上次操作后的状态…