性能工具之 JProfiler 简单登录案例分析实战

news/2024/9/16 19:59:18 标签: Java

文章目录

  • 一、前言
  • 二、准备工作
  • 三、使用JProfile定位问题
  • 四、登陆案例分析
  • 四、总结

一、前言

JProfiler是一款 Java的性能监控工具。可以查看当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况(阻塞、等待等),同时可以查找应用内存使用的热点,即:哪个对象占用的内存比较多;或者CPU热点。

  • 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP

二、准备工作

在学习实例之前先了解什么是内存泄漏与内存溢出,先明白概念,就能理解案例中的内存泄漏是什么;

  • 内存溢出:(out of memory)指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出,简单来说就是自己所需要使用的空间比我们拥有的内存大内存不够使用所造成的内存溢出。
  • 内存泄漏:(Memory Leak)是指程序在申请内存后,无法释放已申请的内存空间就造成了内存泄漏,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。

我们来演示内存泄露点击主菜单->session->Srart Center-> Open Session 窗口中, 选第一个示例项目 Animated Beaier Curve Demo, 点击按钮,在下一个窗口中都使用默认值,按按钮。这时示例程序就开始运行了,你就可以监视 JVM 的状态了。并且可以手动控制是否开始 模拟内存泄露, 和模拟线程阻塞的情况。

在这里插入图片描述
选择 startup -> configure

在这里插入图片描述
选择下面:

在这里插入图片描述
再次点击下面信息:

在这里插入图片描述

等待案例出现:
在这里插入图片描述
查看dos窗口如:

在这里插入图片描述
点击OverView试图:
在这里插入图片描述
字段说明:
在这里插入图片描述
等待运行一段时间,查看内存增长情况:

在这里插入图片描述

上图前半部分是模拟内存泄露,后半部分是关闭了模拟内存泄露。可发现内存泄露时 Heap内存呈增长趋势。可在大方向上发现存在内存泄露,但不知是具体原因什么引起的。

点击如下图的菜单,可以开始查看内存中对象的实例数量;
在这里插入图片描述

查看内存中对象的实例数量,找出不能被回收的对象。经过长时间的观察,下图中的 HashMap$Entry 实例数量一直在增长,最早时 HashMap$Entry 数量是 1 万左右,现在是 16 万多。可以断定就是它没有被释放。不一定数量最多的实例就是泄露,要根据业务情况分析。如果 1 个用户登录操作数据库,创建了一个连接,用户退出后,这个连接实现数量没有-1 (你开发时设计的会-1),就说明发生了泄露。
在这里插入图片描述
可以通过包名过滤,只显示你开发的类, 这个功能是非常有用的
在这里插入图片描述
点击mark current values就能到那些对象没有回收。
在这里插入图片描述
点击 heap walker

在这里插入图片描述
在这里插入图片描述
当前对象实例被谁引,引用了谁,请看下图:
在这里插入图片描述

线程阻塞:
在这里插入图片描述

点击右键:
在这里插入图片描述

很清晰看到里面情况

在这里插入图片描述
上面是简单入门,其他功能等到使用在介绍怎么使用;

三、使用JProfile定位问题

1、启动项目,并且选择启动的程序。
在这里插入图片描述
2、点击相关内容,如下:
在这里插入图片描述
3、页面显示如下:

在这里插入图片描述
注意下面400MB就是咱们启动配置的参数;

4、点击 CPU Tree

发现是这个里面是空白,这是因为这个功能会消耗资源,所以默认是不开启的,如果想分析点击该功能即可;
在这里插入图片描述

四、登陆案例分析

1、启动压力

注意:启动压力需要把时间设置长些,因为好分析性能问题;

在这里插入图片描述
2、点击cpu views

下面是目前请求的接口,
在这里插入图片描述
3、点击展开

通过观察目前代码基本都是 com.baomidou.mybatisplus 消耗资源。
在这里插入图片描述
再分析一个消耗cpu方法如下:

在这里插入图片描述
4、点击 Databases

点击打开,在点击jdbc链接,发现目前的链接数为10个链接。
在这里插入图片描述
10个链接是因为目前jmeter开启的是10个并发请求,数据是一一对应;

在这里插入图片描述
5、点击 Call Tree

在这里插入图片描述

发现如下语句调用很频繁,根据业务应该每登一次就插入一次日志,保存用户登陆日志信息。

INSERT INTO jsh_log (user_id, operation, client_ip, create_time, status, content) VALUES (?, ?, ?, ?, ?, ?)

执行EXPLAIN分析该插入语句如下:


mysql> EXPLAIN INSERT INTO jsh_log (user_id, operation, client_ip, create_time, status, content) VALUES ("212", "2323", "2323", "2323", "2020-10-0", "212");
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1  | INSERT      | jsh_log | NULL       | ALL  | NULL          | NULL | NULL    | NULL | NULL | NULL     | NULL  |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------+
1 行于数据集 (0.02)

MySQL 信息如下:
在这里插入图片描述

查看查询信息发现如下语句出现:
在这里插入图片描述
第一条记录:

SELECT id, username, login_name, password, position, department, email, phonenum, ismanager, isystem, Status, description, remark, tenant_id FROM jsh_user WHERE (login_name = ? AND password = ? AND Status = ?)

打开数据库客户端执行该语句的执行计划如下:

mysql> EXPLAIN SELECT id,username,login_name, PASSWORD,position, department, email, phonenum, ismanager, isystem, STATUS, description, remark, tenant_id
FROM
  jsh_user
WHERE
  (
    login_name = "admin"
    AND PASSWORD = "e10adc3949ba59abbe56e057f20f883e"
    AND STATUS = 0
  );
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table    | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1  | SIMPLE      | jsh_user | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 3    | 33.33    | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 行于数据集 (0.02)

MySQL 信息如下:

图片结果如下:
在这里插入图片描述

目前系统用户数为:

mysql> select count(*) from jsh_user;
+----------+
| count(*) |
+----------+
| 3        |
+----------+
1 行于数据集 (0.02)

mysql>

第二条记录:

SELECT id, username, login_name, password, position, department, email, phonenum, ismanager, isystem, Status, description, remark, tenant_id FROM jsh_user WHERE (login_name = ? AND Status = ?)

查看表结构如下:
在这里插入图片描述

确实发现没有索引,导致通过用户名与密码查询没有走索引导致是全表扫描。

点击Hot spots

可以观察insert into jsh_log消耗大量时间:
在这里插入图片描述

四、总结

通过简单案例带领大家学习 JProfile 使用,也通过 JProfile 定位erp系统登陆接口是否有性能问题;大家会问咱们做性能是这样做的吗?其实在实际工作中还是有套路怎么做性能测试,目前这个案例是介绍怎么通过JProfile定位目前系统有什么问题,所以直接上手定位系统是否有问题;

通过 JProfile 定该系统存在 sql 有问题,sql调优先学习性能测试实战30讲中的《MySQL:数据库级监控及常用计数器解析》;

在这里插入图片描述(MySQL5 版本的架构示意图)

相关系列:

  • 性能工具之 JMeter ajax 简单登录案例实战-

http://www.niftyadmin.cn/n/5643885.html

相关文章

Git撤销add

git要提交版本第一步是add,就算是文件本身已经存在只是修改,也需要添加,即添加到暂存区。其中最偷懒和也保险的命令是: git add . 即添加了本地(多称工作目录)所有文件。 撤销add有以下文章: …

数理金融工程毕业之后求职应用方向,量化交易方面如何

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…

1-8 图像腐蚀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernelnp.ones((2,2),np.uint8) _, binary_image cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) eroded_imagecv2.erode(binary_image,kernel,iterations1) eroded_image2cv2.erode(image2,kernel,iterations1) 三、运行现象 四…

一分钟了解渗透测试

渗透测试,作为一种高级网络安全评估手段,旨在通过模拟黑客攻击的方式,发现并评估计算机系统、网络基础设施及应用程序中的安全漏洞。本文将为您提供一个一分钟概览,深入浅出地介绍渗透测试的核心概念、流程、重要性及应用场景&…

200 Gb/s和400 Gb/s网络

116.200 Gb/s和400 Gb/s网络简介 117.200 Gb/s和400 Gb/s的调节子层(RS)和媒体独立接口操作(200GMII和400GMII)118.200GMII扩展器,400GMII扩展器,200GMII扩展器子层(200GXS)&#xf…

Android Studio 加载多个FLutter项目

按顺序操作即可 选择工程 选择Modules, 导入 module 选中创建module 选择要导入的目录,只选择主目录,下面的文件不要选 添加完成,点击ok后,会进行导入 最终导入成功

什么是iframe?他的优缺点以及应用场景有哪些

iframe简介 iframe,全称为“Inline Frame”,是HTML中的一个元素,用于在当前页面中嵌入另一个页面或文档的视图。简单来说,它像是一个窗口或框架,可以在一个网页中嵌入另一个网页。 iframe的优点 1. 内容重用&#x…

828华为云征文|华为云服务器Flexus X搭建悟空crm管理系统——助力企业云上管理(解决APP Referer校验失败问题)

1、为什么我们企业会选择Flexus云服务器X实例来部署自己的CRM管理系统? 因为基于华为云Flexus X实例搭建CRM管理平台,可以从容面对企业内部瞬息万变的业务压力变化 2、华为云服务器Flexus X方案及优势: 灵活伸缩 搭配弹性伸缩服务AS及负载均…