性能测试案例

article/2025/10/5 14:14:54

做性能测试之前需要对Linux内核参数优化

Linux内核参数优化

Linux服务器默认支持1024个TCP链接,在性能测试时,无论压力机还是项目服务器,都需要对tcp参数进行一些优化
ulimit -n:查看当前Linux系统最大的连接数

修改Linux系统允许创建最大的连接数
vi /etc/security/limits.conf
在最后一行添加
* soft nofile 1000000
* hard nofile 1000000

   

修改TCP参数,减少处于TIME_WAIT状态的连接数,避免连接不释放,Jmeter无可用连接
vi /etc/sysctl.conf
在文件末尾,添加以下参数
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
保存文件,执行以下命令让修改生效
/sbin/sysctl -p 

TCP的三次握手和四次挥手
三次握手:客户端和服务端建立链接时,要进行三次握手
四次挥手:客户端和服务端断开链接时,要进行四次挥手
四次挥手结束之后,客户端和服务端不会理解释放tcp链接,tcp链接会处于中TIME_WAIT状态,默认会持续2分钟左右,如果再次期间,没有产生新的tcp请求,链接才会彻底断开。
每个tcp链接要占用服务器一个端口,服务端端口号固定是65535,如果老的tcp链接没有快速释放,会造成端口号不足,新的tcp链接没有办法申请端口。

多线程模式下的数据安全问题
1、多线程模式下 
2、多线程执行的是多行代码
3、多行代码操作的是同一个资源(数据)

一、线程阻塞案例

(加并发,压力上不去,但是TPS就是上不去,CPU服务器还很空闲,需要分析程序太慢,程序不能充分利用资源)  对程序或者数据库排查问题。JC也要排查

 

线程状态分析策略:
1、使用jstack进行线程dump(快照),并重定向到1个文件中,连续进行3次快照
2、在本地打开快照文件进行分析
3、搜索关键字“BLOCKED”,找到对应的线程信息
4、从上往下,找以"com,cn"开头的信息,这种一般都是业务代码,从这行代码再往上,都是业务代码调用的其他代码
5、根据阻塞发生的代码信息,找对应的代码进行分析(找开发协助)

Log4j的线程阻塞问题

级别越低,日志越多,日志量:ALL > DEBUG > INFO > WARN > ERROR > FATAL

线程阻塞问题排查流程
1、做线程dump
2、在dump文件中搜索关键字"BLOCKED"、"TIME_WAITTING",查看每种状态的count数量
3、按照上述关键字搜索,查看跟本系统有关的业务代码堆栈信息

解决方案
1、减少代码中没有必要的日志输出
2、如果可以,提升日志级别,以减少日志
3、如果可以,更换其他的日志组件,如Log4j2、Logback等

二、线程死锁问题

定义
线程死锁就是有两个线程,一个线程锁住了资源A,又想去锁定资源B,另外一个线程锁定了资源B,
又想去锁定资源A,两个线程都想去得到对方的资源,而又不愿释放自己的资源
从而造成一种互相等待,无法执行的情况

现象
出现死锁后,tps降为0,压力测试工具无法得到服务器的响应,服务器硬件资源空闲,通过
jvisualvm去查看线程情况,至少两个线程一直处于红色的阻塞状态。
死锁经常表现为程序的停顿,或者不再响应用户的请求。从操作系统上观察,对应进程的CPU占用率为零。

死锁问题分析
如果出现死锁,必定有线程的阻塞。死锁是最严重的阻塞

解决

定位方法
通过jvisualvm或者jstack,进行线程dump,对线程状态进行分析,获取到哪行代码导致的死锁,如:

Found one Java-level deadlock:
http-bio-8080"-exec-162":
waiting to lock monitor 0x0818abac (object 0x84b40ad0, a com.lee.domain.Order),
which is held by ""http-bio-8080"-exec-158"
""http-bio-8080"-exec-158":
waiting to lock monitor 0x08188cd0 (object 0x84b3bc48, a com.lee.domain.Order),
which is held by ""http-bio-8080"-exec-162"

解决思路

1.避免嵌套加锁
2.减小锁的粒度,如果必须要嵌套加锁,锁内部的代码,越少越好(死锁的概率越低)

三、CPU消耗过高的问题

现象
压测过程中,发现应用服务器的CPU使用率比较高(>80%)
两种情况
1、接口的性能非常好,比如响应时间<10ms,tps很高,此时CPU使用率高是正常的,不需要优化
2、接口性能不好,比如响应时间>200ms,tps很低,此时需要考虑优化

CPU消耗高可能的原因
1、使用了复杂的算法,比如加密、解密
2、压缩、解压、序列化等操作
3、代码bug,比如死循环


 

定位方法
1、在windows上(本机)和服务器上(Linux),分别安装对应版本的jprofiler

2、执行jmx 脚本分析,在HOTSpots 分析代码中哪些函数占用CPU 时间长 使用率高,一层一层分析入口


Windows:双击-下一步(略)
Linux:
1、上传安装包,执行命令rpm -ivh jprofiler_linux_11_0.rpm
2、tomcat/bin/catalina.sh文件配置jvm参数的地方添加
-agentpath:/opt/jprofiler11/bin/linux-x64/libjprofilerti.so=port=8849,nowait

解决方案:

比如
序列化:程序中对象和字符串之间的转换,对象->json字符串,json字符串->对象

to_json的方法占性能考虑别的方法 比如fast_json    

    

四、使用jprofiler定位响应时间长的问题



 


http://chatgpt.dhexx.cn/article/TkQ8SryJ.shtml

相关文章

性能测试(一)

一)谈谈你对于性能测试的理解: 1)性能测试的概念 测试目的与功能测试的区别性能测试的指标 2)性能测试需要借助工具来进行测试&#xff0c;可以说说自己是用了哪些工具以及如何使用工具来进行性能测试 3)为了避免面试官在性能测试方面进行深究&#xff0c;主动说性能测试难就难…

最全面性能测试方案模板

性能测试方案书 1 简介 1.1目的 编写本文档的目的在于描述测试项目的测试范围&#xff0c;定义测试条件和目标&#xff0c;测试策略和要求&#xff0c;分析可能的风险&#xff0c;提供相应的规避措施或应急对策&#xff0c;并确定测试整体进度的计划和人力资源安排等。 测试目…

性能测试介绍

转载来源 公众号《测试开发技术》 1.性能测试要开专栏了 提起性能测试&#xff0c;可能很多互联网从业人员会感觉比较混淆&#xff08;不仅仅只是测试人员会弄混淆&#xff0c;很多开发人员、管理人员对性能测试也都是一知半解&#xff09;。性能测试&#xff0c;它是属于测试…

性能测试流程-性能测试2

性能测试流程 1. 性能测试需求分析 2. 性能测试计划及方案 3. 性能测试用例 4. 搭建测试环境 5. 测试数据准备 6. 测试脚本编写 7. 执行测试脚本 8. 性能测试监控 9. 性能分析和调优 10. 性能测试回归 11. 性能测试报告总结 1、性能测试需求分析 熟悉被测系统 熟…

【测试方案】性能方案设计

什么是性能测试&#xff1f; 压力测试&#xff1a;强调极端暴力 稳定性测试&#xff1a;在一定压力下&#xff0c;长时间运行的情况 基准测试&#xff1a;在特定条件下的性能测试 负载测试&#xff1a;不同负载下的表现 容量测试&#xff1a;最优容量 性能测试方案设计流程 需…

性能测试—性能测试方案设计思路总结

一、需求分析 1.测试目的 为什么测&#xff1f;目的在于测试系统相关性能能否满足业务需求。通常分以下两种情况&#xff1a; 1&#xff09;新项目上线 2&#xff09;老项目优化 如果是老项目优化&#xff0c;可考虑是否存有历史测试方案&#xff0c;如果有可以参考&#…

性能测试计划及方案

说明&#xff1a;性能测试实施第一份文档&#xff0c;也是最重要的一份文档。 主要内容&#xff1a; 1、项目背景 项目是用来做什么的 2、测试目标 确定此次性能测试的目标&#xff0c;决定测试策略&#xff08;下文&#xff09; 3、人员安排 明确性能测试的时间&#xff0c…

性能测试详细测试方案

性能测试详细测试方案 前言 平台XX项目系统已经成功发布&#xff0c;依据项目的规划&#xff0c;未来势必会出现业务系统中信息大量增长的态势。 随着业务系统在生产状态下日趋稳定、成熟&#xff0c;系统的性能问题也逐步成为了我们关注的焦点&#xff1a;每天大数据量的“…

性能测试设计方案

前言 最近比较多的时间是在做压力测试&#xff0c;也就是常说的压测&#xff0c;而且压力测试也属于性能测试中的其中一个&#xff0c;所以今天总结下性能测试的测试方案。 性能测试分类 常见的性能测试分类一般分为&#xff1a;负载测试、压力测试、稳定性测试 ①负载测试&…

​性能测试基础——性能测试方案(示例)

前面所说的测试分析等准备工作实际上最终目的是制定测试方案&#xff0c;测试方案一般包括&#xff1a; 项目的简要说明、项目系统结构、项目的业务结构、以及项目的性能需求、测试环境数据以及测试策略方法、测试案例、测试人员进度安排以及测试风险预估等等。 下面是一个一般…

性能测试~性能测试方案

1. 背景 1.1. 项目背景 明确该性能测试的项目背景 1.2. 性能目标 性能目标都会影响项目的整个过程&#xff0c;对目标的把握将决定一个性能项目的走向 测试测目标必须明确 取生产峰值流量作为基线(目标一般是峰值的xxx倍)业务的流量预期 2. 测试范围 明确需要测试的特性…

干货|一次完整的性能测试,测试人员需要做什么?

作者:Kiki Deng 一、 规范性能测试实施流程的意义 规范的性能测试实施流程能够加强测试工作流程控制,明确性能测试各阶段应完成的工作,指导测试人员正确、有序的开展性能测试工作,提高各角色在性能能测试中的工作效率。本次分享的性能测试实施流程是性能测试开展的”指导方…

让外网访问内网

让外网访问内网 假如我的电脑的ip是192.168.0.100 我在这个ip下开放了一个3000端口 同一wifi下的设备可以访问192.168.0.100:3000 但是只要访问的设备和被访问的设备不在同一wifi下就不能访问了 现在来解决 需要用到一个叫花生壳的软件 打开花生壳 点击右下角的加号 根据需要…

内网接入外网的几种方式

背景&#xff1a;Pc1pingAR2是ping不通的&#xff0c;因为两者不在同一个网段&#xff0c;pc1虽然知道AR2的地址&#xff0c;但是AR2不知道pc1的地址&#xff0c;所以要将pc1转为公网的ip地址 一.静态地址转换 &#xff08;1&#xff09;全局模式下配置 将内网主机的私有地址…

如何同时使用内网和外网

场景&#xff1a; 最近在对接医保专线的时候&#xff0c;发现在连接互联网的同时&#xff0c;是无法同时使用专线的。要使用的时候只能一下连wifi一下连专线&#xff0c;相当的不方便。 方法&#xff1a; 第一步&#xff0c;以管理员权限打开cmd&#xff0c;不然可能会出现用…

【网络】内网访问外网和外网访问内网的原理

原文地址 公有 IP 和私有 IP 的区别 首先&#xff0c;我们需要了解一下什么是公有 IP 和私有 IP &#xff1f; 公有地址&#xff08;Public address&#xff09;&#xff1a;由 Inter NIC&#xff08;Internet Network Information Center 因特网信息中心&#xff09;负责。…

三阶魔方快速公式

三阶魔方快速公式&#xff1a; 白色做底面。 &#xff08;二&#xff09;做第二层棱块。 黄面为顶层&#xff0c;找顶层中不带黄面的棱块&#xff0c;将棱块面对你的颜色转到与中点色块相同处&#xff0c;这两块面对自己&#xff0c;做公式&#xff1a; 远&#xff0c;侧面上…

【玩】三阶魔方公式

每次忘记公式&#xff0c;找到当时记忆的公示都得查很费劲。索性记录一下。 一、基本 1、标注&#xff1a; 一般来说&#xff0c;你可能需要整体地转动魔方来找到合适的是用公式的位置&#xff0c;但是为了简单起见&#xff0c;在使用一条具体公式时&#xff0c;只需要转动魔…

三阶魔方公式速记

最近在玩魔方的过程中&#xff0c;发现魔方真正需要死记硬背的公式只有三个&#xff0c;分别是棱块互换、棱块上翻、角块互换。 本文不是魔方复原教程&#xff0c;只是总结常用的几个公式&#xff0c;不适合新手。 先贴上一个非常强大的网页版魔方 Cuber 1.一层 观察法 2.二层 …

三阶魔方入门级学习

文章目录 起因&#xff1a;认识魔方&#xff1a;复原步骤&#xff1a;任务一&#xff1a;拼好底层&#xff08;设底层为白&#xff09;目标1&#xff1a;在顶层&#xff08;黄&#xff09;中心块周围安排四个白色棱块目标2&#xff1a;将目前在顶层的四个白色棱块分别对准侧面中…