Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >主宰CPU的过度激进的垃圾收集

主宰CPU的过度激进的垃圾收集
EN

Stack Overflow用户
提问于 2018-05-22 14:26:48
回答 1查看 413关注 0票数 5

我已经回顾了与我的标题类似的其他问题,但似乎没有一个问题涵盖了我正在经历的情况。我的应用程序正常启动,以例程和预期的方式进行垃圾收集。

代码语言:javascript
代码运行次数:0
复制
2018-05-21T20:08:41.136-0400: 19979.368: [GC (Allocation Failure) [PSYoungGen: 71364K->10997K(73728K)] 303964K->243661K(466944K), 0.0165899 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
2018-05-21T20:09:01.212-0400: 19999.444: [GC (Allocation Failure) [PSYoungGen: 71413K->11065K(73728K)] 304077K->243865K(466944K), 0.0121248 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 
2018-05-21T20:09:30.450-0400: 20028.682: [GC (Allocation Failure) [PSYoungGen: 71481K->12550K(73728K)] 304281K->245422K(466944K), 0.0133476 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 
2018-05-21T20:09:50.492-0400: 20048.723: [GC (Allocation Failure) [PSYoungGen: 72966K->10454K(73728K)] 305838K->243374K(466944K), 0.0141533 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 

经过一段看似任意的时间后,垃圾收集变得异常激进,每秒运行几次,并消耗整个CPU运行时。它将一直保持此状态,直到应用程序重新启动。

代码语言:javascript
代码运行次数:0
复制
2018-05-21T20:10:12.104-0400: 20070.335: [GC (Allocation Failure) [PSYoungGen: 70870K->10356K(73728K)] 303790K->243340K(466944K), 0.0193899 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 
2018-05-21T20:10:12.222-0400: 20070.453: [GC (Allocation Failure) [PSYoungGen: 70772K->2080K(72704K)] 303756K->235288K(465920K), 0.0090667 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
2018-05-21T20:10:12.413-0400: 20070.645: [GC (Allocation Failure) [PSYoungGen: 61472K->1936K(73728K)] 294680K->235256K(466944K), 0.0081242 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
2018-05-21T20:10:12.519-0400: 20070.751: [GC (Allocation Failure) [PSYoungGen: 61328K->1585K(81408K)] 294648K->235248K(474624K), 0.0053709 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
2018-05-21T20:10:12.582-0400: 20070.813: [GC (Allocation Failure) [PSYoungGen: 67633K->1313K(82432K)] 301296K->235240K(475648K), 0.0080559 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
2018-05-21T20:10:12.647-0400: 20070.878: [GC (Allocation Failure) [PSYoungGen: 67361K->1121K(92160K)] 301288K->235264K(485376K), 0.0052482 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
2018-05-21T20:10:12.718-0400: 20070.950: [GC (Allocation Failure) [PSYoungGen: 76897K->801K(92672K)] 311040K->235256K(485888K), 0.0071820 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
2018-05-21T20:10:12.792-0400: 20071.024: [GC (Allocation Failure) [PSYoungGen: 76577K->641K(105472K)] 311032K->235232K(498688K), 0.0070387 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2018-05-21T20:10:12.878-0400: 20071.109: [GC (Allocation Failure) [PSYoungGen: 89217K->32K(105472K)] 323808K->235249K(498688K), 0.0084592 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
2018-05-21T20:10:12.962-0400: 20071.194: [GC (Allocation Failure) [PSYoungGen: 88608K->64K(119296K)] 323825K->235289K(512512K), 0.0066050 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

当CPU被占用时,我的应用程序不能正常工作。服务器有两个CPU,但JVM似乎只使用其中一个,pidstat报告的平均使用率略高于100%。

这种行为最让我困惑的是,年轻一代被驱使到分配给它的空间的一小部分,并保持在那里,在垃圾收集后永远不会达到1 Mb以上。

我如何防止这种情况发生,或者我可以做些什么来诊断为什么会发生这种情况?我不是调优垃圾收集的专家,所以我需要一些经验丰富的指导。

我当前对JVM的配置是:

代码语言:javascript
代码运行次数:0
复制
-XX:InitialHeapSize=268435456 
-XX:MaxHeapSize=2147483648 
-XX:+PrintGC 
-XX:+PrintGCDateStamps 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+UseCompressedClassPointers 
-XX:+UseCompressedOops 
-XX:+UseParallelGC 
EN

回答 1

Stack Overflow用户

发布于 2018-05-22 14:57:06

您正在描述垃圾收集“死亡螺旋”的症状。

基本上,如果您有一个堆,其中可访问对象占用的空间不断上升,并且运行垃圾收集器的时间百分比越来越大。最终,要么堆将完全填满,要么GC开销限制将被突破。无论哪种情况,都将抛出OOME。

基本上有三种方法:

  1. 会定期重新启动application.
  2. Increase堆大小。
  3. 会找出应用程序使用越来越多的堆空间的原因。通常存在某种类型的存储泄漏。

只有第三种方法真正解决了问题,其他的都是“创可贴”解决方案。

当CPU被占用时,我的应用程序不能正常工作。服务器有两个CPU,但JVM似乎只使用其中一个,pidstat报告的平均使用率略高于100%。

如果GC承受着太大的压力(例如,由于“几乎已满”的堆),那么您可能会发现它必须退回到非人体工程学的操作模式。例如,它可能决定在JVM启动时只创建一个后台GC线程,这在正常情况下是很好的,但在极端的GC负载下,该线程将达到100%,然后您的应用程序线程将被阻塞。

基本上,当堆太小而无法满足应用程序的需要时,GC并不能很好地工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50470193

复制
相关文章
网页title图标_php 数据库显示在页面并能修改
重新定义TCPDF中的K_PATH_IMAGES常量(define(‘K_PATH_IMAGES’, xxxx) , 需要定义在加载tcpdf.php 之前)
全栈程序员站长
2022/10/03
4.2K0
网页实时显示时间_html页面布局代码
桌面新建记事本,将下列代码复制粘贴,重命名后缀为.html,保存,用浏览器打开即可
全栈程序员站长
2022/10/03
4K0
网页实时显示时间_html页面布局代码
在开启了CloudFlare的页面中显示当前节点信息
正如本站底部右下角所显示的那样当前CDN节点: San Jose, CA, United States - (SJC),是不是感觉有丶炫酷?请继续往下看
yumusb
2020/08/28
5.1K0
为什么html在浏览器中不能显示图片_做html网页图片显示不出来
我遇到的问题是写了一个HTML程序,结果在网页上面不能显示,原因是图片路径放置错了。
全栈程序员站长
2022/09/20
5.8K0
为什么html在浏览器中不能显示图片_做html网页图片显示不出来
weex eros APP 如何在vue页面显示图片,循环添加多张图片显示在vue页面上
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/acoolgiser/article/details/89016852
acoolgiser
2019/04/17
2K0
Python 实战(1):在网页上显示信息
上次简单介绍了 web.py。今天先来粗略解释下那个 hello world 页面的代码: import web 导入 web.py 模块。 urls = ( '/', 'index' ) 这是指定网站 url 的匹配规则,左边是正则表达式,右边是对应处理函数的名称。 class index: def GET(self): return "Hello, world!" 这便是处理请求的函数 index。GET 和 POST 是 HTTP 的两种请求方式,一般来说,GET 用于请求网
Crossin先生
2018/04/16
1.7K0
自定义wordpress每个分类显示多少页面数
一般的分页只需要在后台设置->阅读->博客中显示的页数,即可设置网站的分页,但是这么设置的分页是全站通用的,无论是首页、分类、搜索都显示一个分页数,但是若我们想单独控制某一个页面显示多少呢?下面我们就说说这种怎么实现。
PHP学习网
2022/08/03
7250
为抛弃刘海屏,苹果预备在显示屏上打孔,但这似乎已经落伍了
随着人脸识别解锁、支付等应用的兴起,相关技术及元器件也成为了移动智能手机的标配。从iPhone X发布至今,其后几乎每一款品牌都有支持人脸识别的新机发布,但也始终没能从根本上解决iPhone“刘海屏”的问题。当然,苹果也一直在尝试研究出更好的替代方案。
镁客网
2018/11/23
5630
在3D游戏中显示网页
在游戏中显示网页? 为什么要这么做呢? 其实可以做不少的应用: 嵌入帮助文档, 比如技能介绍, 可以做得很漂亮, 各种排版方式用传统UI做起来很费劲 活动公告页面直接在游戏中查看 游戏内的BBS/社区
逍遥剑客
2018/05/21
6440
直接iframe方式在网页上显示天气插件
天气预报调用网址(可定制):http://www.tianqi.com/plugin/
科控物联
2023/09/22
1.4K0
直接iframe方式在网页上显示天气插件
将jpeg图片显示在framebuffer上
点击(此处)折叠或打开 /************************************************** * example5.c * Author: T-bagwell * * Compile:gcc -Wall example5.c -o example5 *************************************************/ #include <stdio.h> #inclu
用户3765803
2019/03/05
1.2K0
浏览器中输入 URL 到网页显示的过程
图片来源:《图解HTTP》 总体来说分为以下几个过程: DNS 解析 TCP 连接 发送 HTTP 请求 服务器处理请求并返回 HTTP 报文 浏览器解析渲染页面 连接结束 具体可以参考下面这篇文章: 从输入 URL 到页面加载发生了什么? 常见 HTTP 状态码 状态码 各协议与 HTTP 协议之间的关系 图片来源:《图解HTTP》
happyJared
2019/06/24
1.4K0
在web浏览器上显示室内温度(nodeJs+arduino+socket.io)
上次的nodejs操作arduino入门篇中实现了如何连接arduino。这次我们来实现通过arduino测量室内温度并在浏览器上显示出来。 【所需材料】 硬件:LM35温度传感器,arduino u
用户1749219
2018/05/16
2.2K0
浏览器将URL变成一个屏幕上显示的网页的过程?
前言   一个浏览器是怎么工作的? 正文 URL变网页过程:   1.浏览器通过http或https协议,向服务端请求页面   2.将请求过来的HEML代码通过解析,构建DOM树   3.计算DOM
Dawnzhang
2019/03/08
7910
浏览器将URL变成一个屏幕上显示的网页的过程?
PC页面全屏显示以及退出全屏显示
//点击,进入全屏 $('#btn4').click(()=>{ let el = document.documentElement; let rfs = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullScreen; if(typeof rfs != 'undefined' && rfs){ rfs.call
用户1174387
2021/10/26
5.3K0
如何下载网页上的视频?
You-get是GitHub上的一个项目,也可以说是一个命令行程序,帮助大家下载大多主流网站上的视频、图片及音频。支持的网站非常多,我们可以先来看一部分。
狼啸风云
2020/07/27
4.1K0
如何下载网页上的视频?
javascript 获取多种主流浏览器显示页面高度(转)
IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.documentElement.clientWidth ==> 可见区域宽度 document.documentElement.clientHeight ==> 可见区域高度 FireFox中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.documentElement.clientWidth ==> 可见区域宽度 document.documentElement.clientHeight ==> 可见区域高度 Opera中:  document.body.clientWidth ==> 可见区域宽度 document.body.clientHeight ==> 可见区域高度 document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽) document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高) 没有定义W3C的标准,则 IE为: document.documentElement.clientWidth ==> 0 document.documentElement.clientHeight ==> 0 FireFox为: document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高) Opera为: document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)
lin_zone
2018/08/15
9830
Confluence 如何在页面中显示目录
在默认情况下,Confluence 是不能在页面中显示目录和当前页面中的内容导航的。
HoneyMoose
2021/12/14
1.9K0
【JavaScript小项目】在网页上显示选择的图片
思路分析 选用<input type="file">原生组件,实现该组件美化。 选用<img src="file">实现图片预览。 代码实现 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片预览</title> <script src="js/test.js"> function upload(file) { cons
efonfighting
2020/02/13
1.2K0
如何在html页面显示html标签源码
这是一篇不正经实现方案报道。 1 引言 先来看个问答: stackoverflow: Why was the xmp HTML tag deprecated? [duplicate] 这个问题感觉
celineWong7
2020/11/05
11.5K0

相似问题

无法访问Azure容器服务

11

WebDriver容器无法访问DockerComposeContainer服务

15

服务结构容器-无法访问群集内的服务

13

使用Kubernetes的Azure容器服务-无法访问Internet的容器

216

Azure容器服务容器无法访问除80以外的其他端口

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档