Java服务性能测试与性能调优
前言
JVM 和 Tomcat参数对系统的承载能力有一定的影响, 但是主要影响性能的还是我们写的代码与数据库的SQL, 所以代码优化和SQL优化才是我们优化的重点
性能测试
工具使用 Apache-JMeter-5.0
-
新建线程组
-
新建Http请求
-
添加请求头/cookie配置
- 编辑HTTP请求
-
添加查看结果
-
配置线程组 下图配置相对与 100 * 100 = 10000
-
配置完成
-
运行与结果清除
-
查看结果
记录测试结果
压测内容 | 压测线程数 | 吞吐量/s | 90%响应时间 | 99%响应时间 |
---|---|---|---|---|
堆内存 年轻代大小 线程内存大小 tomcat线程数 |
如果压测结果不理想 ,请查看接口的业务逻辑是否可以优化(sql / 代码逻辑等)
JMeter Windows 端口占用问题修改
尝试用大于5000的TCP端口连接时发生错误
JMeter Address Already in use错误解决 地址被占用
原因
windows本身提供的端口访问机制的问题。
Windows提供给TCP/IP链接的端口为1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。
解决
1.cmd中,用regedit命令打开注册表
2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下,
1.右击parameters,添加一个新的 DWORD,名字为 MaxUserPort
2 .然后双击MaxUserPort,输入数值数据为65534,基数选择十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作哦)
也可以设置这个:
右击parameters,添加一个新的 DWORD,名字为 TCPTimedWaitDelay
双击TCPTimedWaitDelay 输入数值数据为 30 (原来的回收时间是4分钟,此处的含义为回收时间改为30秒)
3.修改配置完毕之后记得重启机器才会生效
压测时性能监控jvisualvm
在安装了Java环境的电脑 在终端输入 jvisualvm命令 打卡性能监控
界面介绍
jvisualvm服务器不可用问题解决
点击 工具 -> 插件 -> 可用插件 -> 检查最新插件
如果出现以上报错 参考以下方案解决 如果没有出现则忽略
解决:
1、cmd查看自己的 jdk 的版本 java -version 举例:此次电脑上的jdk版本为 java version “1.8.0_231”
2、打开 https://visualvm.github.io/pluginscenters.html 找到自己的 jdk对应的版本 点击链接进去
3、复制 此处URL
4、复制到此处 注意URL的后缀一定是 updates.xml.gz
jvisualvm安装GC插件
jvisualvm监控远程服务器(JDK8 & centos系统)
远程服务器准备
- 在JDK的bin目录下新增文件
cd /jdk目录/bin/
vim jstatd.all.policy
-
给该文件添加内容
# 有 tools.jar(JDK8) grant codebase "file:${java.home}/lib/tools.jar" { permission java.security.AllPermission; };
-
在JDK的bin目录下执行以下命令
cd /jdk目录/bin/ nohup jstatd -J-Djava.rmi.server.hostname=本机IP -J-Djava.security.policy=./jstatd.all.policy -p 自己的端口 & jps -l