JVM之调优(一)

背景:生产环境由于堆内存较大,fullgc 垃圾回收导致程序卡顿问题(假死)

目录

一、程序卡顿导致的影响

  • 前端页面空白
  • 后端数据重复

二、解决方法

  • 降低堆内存大小
  • 使用合适的垃圾回收器(可以尝试,还未进行测试)
  • 对Survivor区的解读

三、使用到的工具等

  • jvisualvm
    注:找到大对象,效率上网排查大对象产生原因 >> |
    注:下面截图是使用jprofile对生产环境程序生成的hprof进行的大对象分析(biggest Objects)
    在这里插入图片描述注:用jprofile排查到的问题,在代码中进行排查解决问题(修改,删除问题代码)
    在这里插入图片描述

  • jstat

总结

  • 花时间测试,寻找答案
  • 调整Xmx降低回收时延时
  • jvm调优是下下策
  • 推荐频繁fullgc博文,后期会归纳进来 >> |

一、程序卡顿导致的影响:

  1. 前端页面空白。如前端页面刷新时无数据(显示空白页,影响他人使用)
  2. 后端数据重复。卡顿导致数据重复插入(卡顿导致线程等待,在垃圾回收完成后执行,重启线程,重复插入数据)
    注:2中提到的重复插入数据目前还没有想到有效的方法进行测试

二、解决方法

  • 降低堆内存大小
    注:降至fullgc回收内存空间产生的卡顿不影响程序正常运行(也就是能够从jvisual监视页面上看不出堆监控曲线会出现卡顿的现象)
  • 使用合适的垃圾回收器(可以尝试,还未进行测试)
    注:jdk8 默认使用并行回收器 -XX:+UseParallelGC 并行回收会导致线程卡顿,目前发现,卡顿效果明显的场景发生在堆内存大小超5G的情况下发生,当调整 -Xmx4g -XX:NewRatio=3 的配置后,并没有再发现卡顿的情况
    注:也可以使用并发垃圾回收器G1(Garbage-First)。这个回收器是充分利用cpu时间片的方式将回收时卡顿的情况尽可能的减少。但目前还没有对他进行使用。如果PG仍然会出现问题,将对此款回收器进行测试。
    图注:CPU监视图中CUP利用率高的部分是由于每次Fullgc时引起的,因为全局垃圾回回收(fullgc)会产生并行线程计算清除无用的内存垃圾。会发生资源竞争的情况
    在这里插入图片描述注:年轻代与老年代同时进行垃圾回收.
    注:图片中S0U, EU, OU, YGC, FGC 分别是fullgc垃圾回收是监测到的结果。列名意思分别是Survivor0区已使用内存大小、Egen区已使用内存大小,老年代已使用内存大小,年轻代垃圾回收次数,老年代垃圾回收次数。
    注:结果中S0U, EU, OU 的内存使用大小被减少,如S0U的 60017.2 减小至0等
    注:结果中YGC, FGC 的GC次数加一
jstat -gc <pid> <时间/毫秒>

在这里插入图片描述

  • 对Survivor区的解读
    注:survior是存活之意,相比与Egen区就是出生后经过Egen区的垃圾回收后留存下来的对象会被保存到Survivor区。在监视上看到的情况会是垃圾回收后的峰谷要比上一个峰谷海拔要高,是因为有对象存活了下来
    在这里插入图片描述

三、使用到的工具等

  • jvisualvm
    使用的jdk8中bin目录下的exe程序
  • jstat
jstat -gc <pid> <时间/毫秒>

总结

1. 花时间测试,寻找答案。
jvm的调优需要花时间进行测试,这其中要找对监测工具,正确使用监测命令和读懂监测命令打印出的指标内容是个关键。
2. 调整Xmx降低回收时延时。
1). jstat打印的指标内容中,S与E区处于年轻代, O区是老年代,通过监控发现,垃圾回收当EU大小1G左右并伴随老年代OU进行垃圾回收时就会出现时长20秒左右的假死(应用程序卡顿)。
2). 通过调整Xmx的大小,由5g 降至 4g情况明显好转,现在便没有再反馈由于卡顿导致的问题
3. jvm调优是下下策。
如果能减少对程序产生的短生命周期,jvm如果运行正常,参数也可以不进行设置,除非像我这种情况有特定的应用场景。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【python】爬取杭州市二手房销售数据做数据分析【附源码】

一、背景 在数据分析和市场调研中&#xff0c;获取房地产数据是至关重要的一环。本文介绍了如何利用 Python 中的 requests、lxml 库以及 pandas 库&#xff0c;结合 XPath 解析网页信息&#xff0c;实现对链家网二手房销售数据的爬取&#xff0c;并将数据导出为 Excel 文件的过…

捋顺【反函数求导】

设 d y d x f ( x ) 则 d x d y 1 f ( x ) 以 y t a n x 为 例 &#xff0c; d y / d x s e c 2 x , d x / d y 1 s e c 2 x c o s 2 x 到 此 为 止 &#xff0c; 似 乎 难 以 推 导 &#xff0c; 但 是 假 如 用 t a n x ( 也 就 是 y ) 将 c o s 2 x 表 示 出 来 &…

jenkins容器中安装python遇到问题

在Jenkins容器中安装配置Python时遇到问题 执行./configure --prefix/opt/python3/时遇到configure: error: no acceptable C compiler found in $PATH 这个问题就是缺少gcc编译环境。将gcc安装上即可&#xff1a; yum install -y gcc##前提是容器里的系统是cenos才可以&#…

实在智能Agent——RPA终极进化方向

RPA技术备受瞩目&#xff0c;它通过“机器人”自动化了人力执行的重复性、低复杂度任务&#xff0c;解放了员工并降低了企业成本。RPA机器人全天候运行&#xff0c;避免人为错误&#xff0c;高效处理任务&#xff0c;成为处理事务、操作数据、回应查询的理想选择。在管理后台&a…

易方达产品亏损仍存,“老鼠仓”阴影犹在,如何突出重围?

近日&#xff0c;易方达基金宣布易方达沪深300 ETF跻身“千亿规模ETF”行列&#xff0c;成为国内“ETF千亿俱乐部”的第三位成员。截至3月8日&#xff0c;该基金的规模增长112.21亿元&#xff0c;涨幅9.45%&#xff0c;规模增量在10亿以上的股票型ETF产品中排名第一。 回望202…

(网络安全)一款强大的逆向分析工具,开源!

工具介绍 Ghidra 是由美国国家安全局&#xff08;NSA&#xff09;研究部门开发的软件逆向工程&#xff08;SRE&#xff09;套件&#xff0c;用于支持网络安全任务。包括一套功能齐全的高端软件分析工具&#xff0c;使用户能够在各种平台(Windows、Mac OS和Linux)分析编译后的代…

TCP相关特性

协议段格式 • 源/⽬的端⼝号:表⽰数据是从哪个进程来,到哪个进程去; • 32位序号/32位确认号:后⾯详细讲; • 4位TCP报头⻓度:表⽰该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最⼤⻓度是15*460 • 6位标志位: ◦ URG:紧急指针是否有效 ◦ ACK:确认号是否有效…

排序(10)——非比较排序计数排序

目录 思想 局限性 基本思路 代码实现 特性总结 思想 思想&#xff1a;计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。 操作步骤&#xff1a; 统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 首先有一个a数组&#xff0c;里面都有元素&a…

部署prometheus+Grafana可视化仪表盘监控服务

一、部署prometheus及监控仪表盘 简介 Prometheus是开源监控报警系统和时序列数据库(TSDB)。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控&#xff0c;输出被监控组件信息的HTTP接口被叫做expo…

C 练习实例77-指向指针的指针-二维数组

关于数组的一些操作 #include<stdio.h> #include<stdio.h> void fun(int b[],int length) {for(int i0;i<length;i){printf("%d ",b[i]);}printf("\n");for(int i0;i<length;i){ //数组作为形参传递&#xff0c;传递的是指针&#xff0…

生成单一c段或者连续c段范围内的所有ip地址+生成范围内C段脚本

1. 背景 马上有电子政务外网攻防演练要处理ip 2. 脚本1 生成c段和连续c段所有ip地址.py 用处&#xff1a;生成单一c段或者连续c段范围内的所有ip地址。 用法&#xff1a;ipc.txt 放入 ip段或者两个ip段范围&#xff1a;如&#xff1a; 192.168.3.0/24 172.16.1.0/24-1…

Java基础-集合_上

文章目录 1.基本介绍2.集合的框架体系&#xff08;单列、双列&#xff09;单列集合双列集合比较 3.Collection接口和常用方法1.Collection接口实现类的特点2.常用方法&#xff08;使用ArrayList演示&#xff09;代码结果 3.迭代器遍历基本介绍代码结果 4.增强for循环遍历代码结…

【JAVA基础】算法与集合

1 查找 1.1 二分查找 public class Main {public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException { //数组必须有序int[] arr{1,2,4,5,6,24,123};System.out.println(binarySearch(arr,123));//6}public static int bina…

Docker Compose基本配置及使用笔记

Docker Compose基本配置及使用笔记 简介 Docker Compose 是一个用于定义和运行多个 Docker 容器应用程序的工具。它使用 YAML 文件来配置应用程序的服务&#xff0c;并通过简单的命令集管理这些服务的生命周期。 1.步骤1 代码如下&#xff1a;docker-compose.yml放在虚拟机roo…

vite打包时发布时,放在服务器的二级目录中

方式一 hash模式 如果我们的站点根目录为 public , 我们访问的时候使用的是 http://www.abc.com/ 访问到了站点的根目当&#xff0c;现在我们要访问 http://www.abc.com/mysite/#/ 配置如下 修改 vite.config.js base:“/mysite/” 修改 router中的配置 上面的步骤完成&…

【网站项目】320社区物业管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

C#创建第一个PIESDK模版的项目

目录 环境配置创建项目方式 环境配置 1软件安装 通过安装光盘或者U盘等介质读取PIE软件的安装程序和使用文档。程序安装过程比较简单&#xff0c;软件本身不借助与任何第三方程序&#xff0c;直接双击安装程序【PIESDK.Net_V6.3_Windows_X64.exe】安装文件&#xff0c;即可安装…

总要做一回书里的国风少女吧,女儿的新中式套装美出新高度了~

超有质感的新中式国风短袖 采用经典立领设计 活里内衬柔软舒适 搭配浅色系马面裙 如书中温婉气质的千金小姐~

HTML万字学习总结

html文本标签特殊符号图片音频与视频超链接表单列表表格语义标签(布局) html文本标签 标签简介<html></html>根目录<head></head>规定文档相关的配置信息&#xff08;元数据<body></body>元素表示文档的内容<meta></meta>表示…