性能压测-性能监控-堆内存与垃圾回收


前言

影响性能考虑点包括:数据库、应用程序、中间件(tomcat\Ngninx)、网络(带宽)、操作系统
首先考虑自己的应用属于CPU密集型(计算、排序、整合)还是IO密集型(网络传输数据、磁盘读写、数据库读数据、redis缓存读数据)

一、性能优化方法

CPU密集型:增加cpu
IO密集型:增加固态、加内存条、使用各种缓存技术提高网卡的传输效率

二、性能监控

1)jvm内存模型
在这里插入图片描述
在这里插入图片描述
2)堆
所有的对象实例以及数组都要在堆上分配,堆是垃圾收集器管理的主要区域,也被称为“GC堆”;也是我们优化最多考虑的地方
堆可以细分为:

新生代

  • Eden空间(伊甸园区)
  • From Survivor空间(幸存者区)
  • To Survivor空间
    老年区
    永久代/元空间

JAVA堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。
可通过参数 -Xmx -Xms 来指定运行时堆内存的大小,堆内存空间不足也会抛OutOfMemoryError异常

下图为堆垃圾回收机制
在这里插入图片描述
新创建来的对象,如果在Edan可以放的下就放,如果放不下,则GC一次,看能不能放的下,如果放的下就放,如果是一个大对象,在伊甸园区(新生代)放不下,则会放入到老年代(在新生代没法处理的情况下才进入到老年代),如果老年代能够放的下则会分配内存,如果老年代还放不下(不管进入到哪个内存区域里,都要判断是否放的下),则会进行一次 FULL GC(全面GC),即大屠杀,会将新生代和老年代存放的数据进行判断,如果没用则会踢出去,再来看是否还放的下,如果老年代还是放不下,则会报内存溢出异常(out of memory)。所以,FULL GC 也能清理一些空间。
在这里插入图片描述
FULL GC 非常慢,如果 MinorGC 100次才花费1秒时间,FULL GC 不到10次就得要花费1秒钟,所以,这是一个性能慢10倍的GC,后来优化监控的时候,一定要避免我们的应用经常性发生FULL GC的问题。
每次GC表示增长一岁,如果有些对象存活超过阀值,则会搬到老年代,老年代存放的是生命力持久的和大对象。
一次小的 MinorGC 会将我们的伊甸园区清理干净,如果能放到幸存者区则放到幸存者区,如果不能则放到放到老年代,老年代放不下,则会FULL GC。
YGC(Young GC) FGC(Full GC )
FGC 要比YGC慢的多。

工具jconsole与jvisualvm

Jdk的两个小工具 jconsole、jvisualvm(升级版的 jconsole);通过命令行启动,可监控本地和远程应用。远程应用需要配置。
安装jdk1.8后,在终端输入 jconsole

192:~ yingyan$ jconsole

在这里插入图片描述
连接后显示,注意以下指标
在这里插入图片描述
jvisualvm
jvisualvm 能干什么?
监控内存泄漏,跟踪垃圾回收,执行时内存、CPU分析、线程分析…

192:~ yingyan$ jvisualvm
2023-03-02 10:31:21.937 java[53165:5187371] *** WARNING: Textured window <AWTWindow_Normal: 0x7ffe5a3a1c70> is getting an implicitly transparent titlebar. This will break when linking against newer SDKs. Use NSWindow's -titlebarAppearsTransparent=YES instead.

在这里插入图片描述
线程监视名词解释:
运行:正在运行的
休眠:sleep
等待:wait
驻留:线程池里面的空闲线程
监视:阻塞的线程,正在等待锁
在这里插入图片描述
无法查看监控数据,需要安装插件

https://visualvm.github.io/pluginscenters.html

![在这里插入图片描述](https://img-blog.csdnimg.cn/94859859a30d480ea309374748958a95.png

https://visualvm.github.io/uc/8u131/updates.xml.gz

在这里插入图片描述
安装GC插件
在这里插入图片描述
退出,重启jvisualvm

192:~ yingyan$ jvisualvm
2023-03-02 10:31:21.937 java[53165:5187371] *** WARNING: Textured window <AWTWindow_Normal: 0x7ffe5a3a1c70> is getting an implicitly transparent titlebar. This will break when linking against newer SDKs. Use NSWindow's -titlebarAppearsTransparent=YES instead.
2023-03-02 10:49:27.752 java[53165:5187371] TSM AdjustCapsLockLEDForKeyTransitionHandling - _ISSetPhysicalKeyboardCapsLockLED Inhibit
192:~ yingyan$ jvisualvm
2023-03-02 10:58:59.337 java[55834:5219453] *** WARNING: Textured window <AWTWindow_Normal: 0x7f9f90813340> is getting an implicitly transparent titlebar. This will break when linking against newer SDKs. Use NSWindow's -titlebarAppearsTransparent=YES instead.

在这里插入图片描述
压力测试需要关注
监视中的cpu、堆、线程、gc
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值