当前位置: 首页 > news >正文

记一次压力测试

性能测试文档

  • 背景

为对产品性能有一定了解,现将产品展开一次性能测试;

  • 环境与工具

本章为基本工具准备及linux命令说明,无先后顺序。

  • Xshell工具
  1. 本文使用Xshell在Windows界面下远程登录linux主机
  2. 安装Xshell直接全部选择默认选项即可(安装包见:发货包\辅助工具\)
  3. 新建会话,以主机为例
    1. 点击新建按钮

    1. 填写会话名称,linux主机ip地址

    1. 点击确定

    1. 双击新建立的会话

   

    1. 输入用户名

    1. 输入密码

  

    1. 成功登录

  • winSCP工具
  1. 本文使用winSCP将Windows下的文件上传到Linux系统中
  2. 安装winSCP直接全部选择默认选项即可(安装包见:发货包\辅助工具\)
  3. 以普通用户登录只能向个人目录上传文件,以root用户登录可以向任意路径上传文件,建议管理员以root用户登陆。
  4. 新建会话,以主机为例
  1. 点击新建会话

  1. 选择新建站点,写入linux主机ip、用户名、密码,点击登录即可

  1. 如下所示,登陆成功

  1. 其中左侧为windows本地文件,右侧为linux系统文件

  1. 上传文件,拖动即可,下图为将windows E:\soft\test文件夹上传到linux系统/home/rs10user路径下
  • Jemte工具

  • 用例与脚本

系统登录

  • 实验
  • 脚本录制与制作

(156条消息) JMeter脚本录制-快速上手篇_jmeter录制_软件测试大叔的博客-CSDN博客

或使用手工添加

  • Jmeter使用

正在上传…重新上传取消

点击1清理后,点击2执行;

  • 测试与性能指标
  1. Tps
  2. 响应时间
  3. 错误率

  • 相关策略与问题解决
  1. 改过 author 的feign 超时时间
  2. 删掉所有日志
  3. author与sys pod 比为2:5 4:12
  4. ClientAbortException: java.io.IOException: Broken pipe 解决

https://blog.csdn.net/Beyondpyj/article/details/115730750

  1. 查看物理机 连接数 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

  1. 增大druid连接数据,最小连接数3和最大连接数400,初始连接数50
  2. 增大数据库最大连接数为 500
  3. Nginx配置,超时

 # backend server proxy

                  location /gateway/ {

                      proxy_pass http://192.168.168.205:30130/;

                      #proxy_set_header Host            $http_host;            ##转发后端口别忘了

                      proxy_set_header X-Real-IP        $remote_addr;

                      proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

                      proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;               ##关键句

                      proxy_set_header X-Forwarded-Proto $scheme;

                      proxy_redirect   default;

                           

                            ---

                      proxy_connect_timeout 60000s; ##

                      proxy_send_timeout 180s;

                      proxy_read_timeout 180s;

                      proxy_buffer_size 1M;

                      proxy_buffers 8 1M;

                      proxy_busy_buffers_size 1M;

                      proxy_temp_file_write_size 1M;

                  }

                    

                    

  1. 代理商环境的一些配置

   ip          作用         cpu         memory

192.168.7.100 master         2                       8

192.168.7.101 master

192.168.7.102 worker          4            16

192.168.7.103 worker

192.168.7.104 manager              4                    24

  1. linux 查cpu 核数: cat /proc/ cpu info | grep "processor" | wc -l
  2. linux 查内存 free -m
  3. linux 查cpu内存 使用率 top

  1. 500账户查询

消除 oderby 后面的 dep_name

sys_acct_type 添加索引 act_type

sys2300,2400加入白名单

修改2300 2400 程序

  1. 因为数据库是Windows的机器,这次我们报告内就不体现资源占用情况了,这个问题您后期可以再去优化一下,我们这次测试主抓耗时和报错率。

  1. cat logs-from-business-sys-in-business-sys-7577b48fcb-b6gn6.txt |grep 'gridpanel total时间'|awk -F: '{print $4}'

  1. jemete 聚合报告参数含义

https://blog.csdn.net/m0_72875584/article/details/128883344

  1. plsql执行计划

https://www.cnblogs.com/kiamer2425/p/14968523.html

  1. 使用topic 命令查看容器中性能

  1. nginx中添加了 时间日志:

/etc # cat /etc/nginx/nginx.conf

user  nginx;

worker_processes  auto;

error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;

events {

    worker_connections  1024;

}

http {

    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

}

  1. Windows机器tcp连接数增大

(152条消息) jmeter压力测试(踩坑)报错:java.net.BindException: Address already in use: connect_能白话的程序员♫的博客-CSDN博客

  1. Nginx里时长配置

实验是将mrp 默认使用nodePort 端口

正在上传…重新上传取消

正在上传…重新上传取消

  1. 服务器超时配置

import org.apache.catalina.connector.Connector;
import
org.apache.coyote.http11.Http11NioProtocol;
import
org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import
org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import
org.springframework.boot.web.server.ConfigurableWebServerFactory;
import
org.springframework.boot.web.server.WebServerFactoryCustomizer;
import
org.springframework.stereotype.Component;

//设置超时时间
//Spring容器中没有TomcatEmbeddedServletContainerFactory这个bean时,会把此bean加载进容器
@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
   
@Override
   
public void customize(ConfigurableWebServerFactory factory) {
       
//使用工厂类定制tomcat connector
       
((TomcatServletWebServerFactory) factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
           
@Override
           
public void customize(Connector connector) {
                Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler()
;
               
//设置15秒无响应则断开keepalive
               
protocol.setKeepAliveTimeout(1500000000);
               
//设置最大n次请求后则断开keepalive, -1表示无穷
               
protocol.setMaxKeepAliveRequests(-1);
           
}
        })
;
   
}
}

正在上传…重新上传取消

正在上传…重新上传取消

  1. Oracle 连接最大5000
  2. Nginx最大请求书12000

server:

  tomcat:

    max-threads: 1000

    accpt-count: 500

    connection-timeout: 2000000000

  servlet:

    session:

      timeout: 2000000000

  1. 最后实践中没有加 connecton-timeoute 和 session.timeout 也可以。需要再尝试 todo

  1. 1683784604409,101,查账户,Non HTTP response code: java.net.NoRouteToHostException,Non HTTP response message: Cannot assign requested address (Address not available),Thread Group 1-9377,text,false,,1995,0,9968,9968,http://192.168.168.205:30132/sys/sys0000/rsacct/get_c?companyCode=01&acctCode=ceshi59,0,0,0

(153条消息) jmeter java.net.NoRouteToHostException: Cannot assign requested address (Address not available)_jmeter noroutetohostexception_zhangzhen02的博客-CSDN博客

  1. 进一步增大sys的核数 到达8c2g
  2. 8c 2g 8pod

达到 正在上传…重新上传取消

正在上传…重新上传取消

  1. 报错 没有java_home . 使用命令 source /etc/profile ;

  1. Gateway*1 0.5c1.6G    author*1 4c4g 100人并发,tps  113,时间0.895s,错误率0;
  2. Gateway*1 0.5c1.6G    author*1 4c4g 200人并发,tps  108,时间1.824s,错误率0
  3. Gateway*1 0.5c1.6G    author*2 4c4g 200人并发,tps 221,时间0.894s,错误率0
  4. Gateway*1 2 c2G    author*3 28c8g 1000人并发,tps 291,时间2.834s,错误率0
  5. 记录author 服务消耗 CPU

正在上传…重新上传取消

  • 附录
  • jMeter 安装插件

(157条消息) 【JMeter】插件安装_jmeter插件安装_段小王爷的博客-CSDN博客

  • jMeter常见错误

(154条消息) 记录jmeter使用时遇到的错误:Non HTTP response code: org.apache.http.NoHttpResponseException_uling94的博客-CSDN博客

  • Jmeter 各个参数意义

Jmeter的Linux单机压测_AMEI_2015的博客-CSDN博客

(152条消息) JMeter聚合报告的参数含义__jone的博客-CSDN博客

jmeter -n -t xhsxportal.jmx -l result.jtl

Creating summariser <summary>

Created the tree successfully using xhsxportal.jmx

Starting the test @ Tue Dec 27 18:44:02 CST 2016 (1482835442042)

Waiting for possible shutdown message on port 4445

summary +      1 in   0.3s =    3.2/s Avg:    68 Min:    68 Max:    68 Err:     0 (0.00%) Active: 3 Started: 3 Finished: 0

summary + 479387 in    28s = 17377.9/s Avg:     0 Min:     0 Max:    68 Err:     0 (0.00%) Active: 10 Started: 10 Finished: 0

summary = 479388 in    28s = 17185.4/s Avg:     0 Min:     0 Max:    68 Err:     0 (0.00%)

summary +  39106 in   2.1s = 18273.8/s Avg:     0 Min:     0 Max:    39 Err:     0 (0.00%) Active: 0 Started: 10 Finished: 10

summary = 518494 in    30s = 17263.0/s Avg:     0 Min:     0 Max:    68 Err:     0 (0.00%)

Tidying up ...    @ Tue Dec 27 18:44:32 CST 2016 (1482835472140)

... end of run

这里只设置了10个并发测试。28s是最近28秒内的平均TPS; Avg是平均响应时间;Max是最大响应时间;Err是错误率;Active是目前活跃的并发数。

Label----每个请求的名称,比如HTTP请求等

#Samples----发给服务器的请求数量

Average----单个请求的平均响应时间 毫秒ms

Median----50%请求的响应时间  毫秒ms

90%Line----90%请求响应时间 毫秒ms

95%Line----95%请求响应时间 毫秒ms

99%Line----99%请求的响应时间 毫秒ms

Min----最小的响应时间 毫秒ms

Max----最大的响应时间 毫秒ms

Error%----错误率=错误的请求的数量/请求的总数

Throughput----吞吐量即表示每秒完成的请求数

Received KB/sec----每秒从服务器端接收到的数据量

Sent KB/sec----每秒从客户端发送的请求的数量

  • Jmeter之性能测试TPS解析

(152条消息) Jmeter之性能测试TPS解析_jmeter tps_林渊羡鱼的博客-CSDN博客

(154条消息) 【jmeter】监听器吞吐量与平均响应时间详解_jmeter查看平均响应时间_山河不见老的博客-CSDN博客

  • Linxu环境测试报告

(152条消息) Linux环境运行jmeter+测试报告查看_linux 查看jmeter 聚合报告_Bruce小鬼的博客-CSDN博客.

  1. 查看结果书

(153条消息) Jmeter察看结果树将测试结果保存本地_jmeter查看文件保存位置_weeds606的博客-CSDN博客

  • 理解tips

【jmeter】监听器吞吐量与平均响应时间详解_jmeter查看平均响应时间_山河不见老的博客-CSDN博客

  • cpu占用过高

Docker 容器内分析 java程序占用 cpu 高问题排查分析-腾讯云开发者社区-腾讯云 (tencent.com)

  • 服务器与并发量

服务器一般几核够用-羊毛之家 (yangmao.info)

正在上传…重新上传取消

  • 使用这个docker 镜像含有jdk

openjdk-8u111-jdk

Docker

  • 一些用到的linux命令

top

jstack 6 > a.txt  信息到a.txt

ps aux

  • Docker 命令

   # 加载本地镜像到docker里

docker load < alpine-oraclejre8-8.202.08-full.tar

#监控docker容器中使用率

docker stats <容器id>

# 拷贝容器中文件到本目录

docker cp 13ab29a61863:/a3.txt .

  • VisualVm远程监控

利用VisualVm和JMX远程监控K8S里的Java进程 - UCloud云社区

利用VisualVm和JMX远程监控K8S里的Java进程 - 颇忒脱 - SegmentFault 思否

  • JStack

docker查看那个java程序cpu使用率100% - 大海全是¥ - 博客园 (cnblogs.com)

(154条消息) docker 分析cpu占用过高_docker容器cpu过高_打包爱的博客-CSDN博客

Java程序占用 CPU 过高排查方法 - 简书 (jianshu.com)

  • Tomcat 线程数

(153条消息) Tomcat线程数、连接数相关配置_tomcat连接数_爱琴孩的博客-CSDN博客

  • Ngixn 日志配置

nginx 日志log_format - sucre_tan - 博客园 (cnblogs.com)

nginx日志配置(log_format) (hebinghua.com)

(152条消息) Nginx配置中的log_format_nginx log_format_兴乐安宁的博客-CSDN博客

  • Springboot nginx响应超时

(152条消息) Springboot调整接口响应返回时长(解决响应超时问题)_springboot设置接口超时时间_JermeryBesian的博客-CSDN博客

  • Jemter录制脚本

(156条消息) JMeter脚本录制-快速上手篇_jmeter录制_软件测试大叔的博客-CSDN博客

  • 使用jprofiler查看检查代码

https://blog.csdn.net/vicky_pyh/article/details/88797514

  • 统计linxu 网路流量

在Linux下怎么看网络流量_系统运维_内存溢出 (outofmemory.cn)

sar -n DEV 1 4

  • K8s中内存资源限制介绍

(152条消息) kubernetes(k8s):容器资源限制(内存限制、cpu限制、namespace限制)_k8s 内存限制_鲸鱼妹子‍的博客-CSDN博客

http://www.lryc.cn/news/67984.html

相关文章:

  • 一个文明是否有竞争力,在很大程度上取决于信息传递的效率。
  • 测试4年,跳槽一次涨8k,我跳了3次···
  • Redis 入门教程(简单全面版)
  • java并发-AQS
  • openAI图像生成开发文档
  • Python综合案例—利用tkinter实现计算器的程序
  • canvas学习笔记
  • Navicat Premium 15安装注教程
  • yolo v8
  • 2022IDEA的下载、安装、配置与使用
  • 实验十 超市订单管理系统综合实验
  • 微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建
  • springboot+freemarker+restful
  • 基于Kubernetes集群构建大中型企业CICD应用平台(1)-- devOps
  • 什么是模型鲁棒性和泛化能力
  • AI翻译工具分享
  • 选男友最好的方式就是爬山
  • C++面经:初始化全局变量和未初始化全局变量有什么区别
  • vue-2 指令:
  • 非常提效的7款原型工具推荐
  • 最新Kafka和RabbitMQ消息队列经典面试题汇总(含答案)
  • 软件测试行业对新人友好吗?
  • Python requests 模块
  • IOC理论推导
  • 我的一些感悟
  • NC 人力薪酬管理怎么结账?
  • JavaWeb编程面试题——Spring Boot
  • Educational Codeforces Round 148 (Rated for Div. 2) A,B,C
  • C#串口通信从入门到精通(15)——流量控制(XON/XOFF协议实现)
  • 基于Kubernetes集群构建大中型企业CICD应用平台(2)--code阶段工具gitlab安装