首页 > 其他分享 >JVM系统优化实践(14):GC可视化工具

JVM系统优化实践(14):GC可视化工具

时间:2023-04-06 23:33:41浏览次数:33  
标签:系统优化 14 PID Young GC 内存 jstat jmap

您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~



工欲善其事,必先利其器。知道了GC工作原理,学会了看GC日志之后,再来了解一下分析GC的工具。它们分别是jstat、jmap、jhat。

jstat顾名思义,主要是用于查看JVM的内存和GC情况。先用jps找出Java进程的PID,再用jstat -gc [PID]查看JVM的内存和GC情况。例如:

JVM系统优化实践(14):GC可视化工具_JVM

结果说明:

1、S0C/S1C:From/To Servivor区的大小

2、S0U/S1U:From/To Servivor区当前使用的内存大小

3、EC/EU:Eden区大小及其当前使用的内存大小

4、OC/OU:老年代及其当前使用的内存大小

5、MC/MU:元空间及其当前使用的内存大小

6、CCSC/CCSU:类空间及其当前使用的内存大小

7、YGC:运行到目前为止Young GC的次数

8、YGCT:Young GC的耗时

9、FGC:运行到目前为止Full GC的次数

10、FGCT:Full GC的耗时

11、GCT:所有GC的总耗时


其他jstat命令:

1、jstat -gccapacity [PID]:堆内存分析

2、jstat -gcnew [PID]:年轻代GC,TT和MTT分别表示对象在年轻代存活的年龄和存活的最大年龄

3、jstat -gcnewcapacity [PID]:年轻代内存分析

4、jstat -gcold [PID]:老年代GC

5、jstat -gcoldcapacity [PID]:老年代内存分析

6、jstat -gcmetacapacity [PID]:元空间内存分析


拿jstat -gc [PID] [更新频率(毫秒)] [总更新次数]这个命令来说,它的命令实例是:jstat -gc 20553 1000 10,每秒更新,共10次

它常常用于:

1、查看年轻代对象增长速率

2、推算Young GC的触发频率和耗时

3、推算Young GC后多少对象存活

4、推算Young GC后有多少对象进入老年代

5、查看老年代对象的增长速率

6、推算Full GC的触发频率和耗时


有时可能需要知道到底是哪些对象占据了那么多内存,那么此时就可以使用jmap命令。jmap -heap [PID],打印结果可能像这样:

JVM系统优化实践(14):GC可视化工具_JVM_02


还可以使用jmap了解系统运行时的对象分布。例如:jmap -histo [PID],打印结果按照各种对象占用内存空间的大小降序排列,占用内存最多的在最上,可能会像这样:

JVM系统优化实践(14):GC可视化工具_JVM_03


比如,如果想生成一个堆内存快照并存放到指定文件中,那么可以这么用jmap:

jmap -dump:live,format=b,file=/home/work/dump.hprof [PID]


jhat用于分析生成的堆内存快照,它的输入其实就是jmap的输出:

jhat /home/work/dump.hprof


要想使用jhat,就要开启http服务和7000端口。在浏览器上输入这台机器的ip地址和端口号,就能看到对内存中的对象分布了。


分析JVM运行状况及优化包括两种:

1、预估性的优化,包括:

自行估算系统的运行压力,即:每秒多少请求、每个请求会创建多少对象、每个对象占用多少内存、机器该如何配置;尽量使得每次Young GC后的存活对象 < Survivor × 50%;尽量不进入老年代,减少Full GC频率;

2、压测系统时的JVM优化,包括新系统开发完成后,经过一系列的单元测试、集成测试、功能测试、压力测试,全部测试完成且通过后才能部署到正式环境;

一般需要模拟DAU为百万级的系统压力;使用Jmeter或者Apache A/B做压测;真正的优化,一定是结合实际业务之后的合理内存分布,没有什么固定的“模板”。



感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

标签:系统优化,14,PID,Young,GC,内存,jstat,jmap
From: https://blog.51cto.com/u_15817148/6174252

相关文章

  • 剑指 Offer 14- I. 剪绳子
    题目链接:剑指Offer14-I.剪绳子方法:数论解题思路将\(n\)分为\(m\)个数的和,使得这\(m\)个数的乘积最大,那么应该将\(m\)个数分为\(2\)和\(3\)的组合,尽可能为\(3\)。代码classSolution{public:intcuttingRope(intn){if(n==2)return......
  • 剑指 Offer 14- II. 剪绳子 II
    题目链接:剑指Offer14-II.剪绳子II方法:数论解题思路将\(n\)分为\(m\)个数的和,使得这\(m\)个数的乘积最大,那么应该将\(m\)个数分为\(2\)和\(3\)的组合,尽可能为\(3\)。注意大数越界问题。代码classSolution{public:intcuttingRope(intn){......
  • 1145. 二叉树着色游戏
    题目链接:1145.二叉树着色游戏方法:分类解题思路(1)\(x\)节点将二叉树分成了\(3\)部分,分别是父节点子树、左子树、右子树(节点数分别为n1n2n3);(2)为了使得二号玩家染色尽可能的多,应该让\(y\)选择在\(x\)相邻的节点。若存在以下一种情况,则二号玩家稳赢,n1>n2+n3+1||......
  • 【web 开发基础】PHP 的流程控制之多向条件分支结构 -PHP 快速入门 (14)
    多向条件分支结构(elseif)条件分支结构其实是我们生活中常用的一种一种逻辑结构,类似于我们常用的(如果...那么...否则...就.....).本文中的elseif子句,和此名称暗示的一样,就是if和else的组合,相当于(...else{if(表达式){{语句块;}}})。和else一样,它延伸了if语句,条件分支结构中els......
  • 华硕 ASUS-PRIME-B560M-A Intel Core i5-11400黑苹果efi引导文件
    原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔)硬件型号驱动情况主板ASUS-PRIME-B560M-A处理器IntelCorei5-11400已驱动内存16GBDDR43200Mhz已驱动硬盘WesternDigitalBlackSN750500GB已驱动显卡SAPPHIREPULSERX5600XT6GB已驱动声卡ALC897已驱动网卡I......
  • day04-SpringCloud Eureka-服务注册与发现01
    SpringCloudEureka-服务注册与发现011.Eureka介绍1.1学习Eureka前的说明目前主流的服务注册&发现的组件是Nacos,但是Eureka作为老牌经典的服务注册&发现技术还是有必要学习一下,原因:(1)一些早期的分布式微服务项目使用的是Eureka,在工作中完全有可能遇到这种情况。(2)后期的服......
  • Matlab综合能源系统优化代码 考虑光热电站(CSP电站)和ORC的综合能源系统优化的建模求解
    Matlab综合能源系统优化代码考虑光热电站(CSP电站)和ORC的综合能源系统优化的建模求解程序中包含了新能源发电、ORC循环等,以运行成本、碳排放成本、弃风弃光惩罚成本等为目标函数,基于9节点电网、6节点气网、8节点热网、4节点冷网进行仿真分析。程序中注释详细,数据完整,计算结果可......
  • 2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化)
    2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化)本题的编码是用Python实现的,C++的思路也是相同的。希望本文能够帮助到你!题目:暴力法:直接根据题目的要求写:frommathimportgcddeflcm(a,b):returna*b//gcd(a,b)n=int(input())for_inrange(n):cnt=......
  • 10-springcloud-eureka-6-Eureka 与 Zookeeper 的比较
    Eureka与Zookeeper的比较著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性);由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡,在此Zookeeper保证的是CP,而Eureka则是AP。Zookeeper保证CP在Z......
  • 11-springcloud-eureka-7-Eureka 注册中心高可用集群
    在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性问题,不能有单点故障,由于注册中心eureka本身也是一个服务,如果它只有一个节点,那么它有可能发生故障,这样我们就不能注册与查询服务了,所以我们需要一个高可用的服务注册中心,这就需要通过注册中心集群来解决。......