![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
性能测试
文章平均质量分 75
chuntian_tester
路漫漫其修远兮,吾将上下而求索。
展开
-
数据和自省__dict__属性和__slots__属性
类里定义的变量叫类属性,类里定义的方法叫类方法;类属性分:1.公有属性:普通属性2.私有属性:以“_”或"__"开头的属性称为私有属性,私有属性也可以被继承和访问。例如:class Info(object): _name = '春田' __age = 4if __name__ == '__main__': i = Info() print(i._name) # 输出:春田 print(Info._name)原创 2022-02-13 18:19:41 · 613 阅读 · 0 评论 -
python中yield,greenlet,gevent实现协程
一.什么是协程: 协程是python中另外一种实现多任务的方式,只不过比线程更小,占用的执行资源(理解为需要的资源)也更少。为啥说他说一个执行单元?因为他自带cpu上下文,这样,在合适的额gr时机,我们就可以把一个协程切换到另一个协程。只要这个过程中保存或恢复了cpu上下文,那么程序就还是可以运行的。二.协程与线程的差异: 在实现多任务时,线程的切换远不止系统层面上的保存和恢复cpu上下文那么简单。操作系统为了程序运行的高效性,每个线程都有自己的缓存cache等数据,......原创 2022-02-07 21:40:08 · 648 阅读 · 0 评论 -
多线程,多进程以及协程的对比
1.多线程:10000个任务,3个线程耗时:9.669秒"""多线程与多进程的速度对比: 比较10000个任务,分别使用3个线程与3个进程来完成,比较哪种方式更快。"""import requests"1.多线程"import threading, time, os, queue# 线程的队列(只能在一个进程中使用,解决多线程之间的通信问题)q1 = queue.Queue()for i in range(10000): q1.put("http://127.0.0原创 2022-02-07 18:31:43 · 2150 阅读 · 0 评论 -
多进程使用multiprocessing.Process及进程专用的Queue
multiprocessing模块:是一个跨平台跨版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。Process([group[,target[,name[,args[,kwargs]]]]])target: 如果传递了函数的引用,子进程就会执行这个函数的代码args: 给target指定的函数传递的参数,以元组的方式传递kwargs......原创 2022-02-02 16:39:13 · 2402 阅读 · 0 评论 -
项目架构优化
目录1.第一次架构优化:tomcat和mysql数据库分开部署.2.第二次架构优化:引入缓存 使用memcache作为本地缓存,使用redis作为分布式缓存.3.第三次架构优化:引入负载均衡策略4.第四次架构优化:数据库读写分离 主库:写 从库:读5.第五次架构优化:数据库按业务分库6.第六次架构优化:使用LVS或者F5来使用多个Nginx负载的均衡.7.第七次架构优化:通过DNS轮询实现机房的负载均衡.8.第八次架......原创 2021-12-05 00:15:00 · 900 阅读 · 0 评论 -
JVM调优
目录1.垃圾回收发生在哪里?2.对象在什么时候可以被回收?3.怎么判断对象是否可以被回收? 1.引用计数算法: 2.可达性分析算法:3.如何回收这些对象?4.GC算法: 1.标记-清楚算法: 2.复制算法: 3.标记-整理算法: 4.分代收集算法:5,按系统线程执行方式可分为2种回收方式: 1.串行收集:使用单线程处理垃圾回收 2.并行收集:......原创 2021-12-04 00:15:00 · 494 阅读 · 0 评论 -
JVM浅谈
JVM的作用: jvm承担了java字节码的分析和执行,同时也内置了内存的分配和管理机制,此机制降低了研发人员手动分配和回收内存时可能带来的内存泄漏和内存溢出风险,使我们能更专注与业务和逻辑的实现.JVM中的内存模型:1.堆内存(heap): 是jvm内存中最大一块内存空间,堆内存被所有线程共享,几乎所有的对象和数组都被分配到堆内存中;堆被划分为新生代和老年代,新生代又分为eden区和survivor区.java8为什......原创 2021-12-04 00:15:00 · 109 阅读 · 0 评论 -
Tomcat优化
Tomcat的2种工作模式: 1.共享模式:Tomcat作为应用服务器,请求来自于前端的web服务器,例如来自Nginx.Apache,Httpd等,他们通过AJP协议与tomcat通信,更高效. 2.独立服务器模式:请求直接来自于web浏览器,不是来自于nginx转发.Tomcat3种运行模式优化: connector在处理HTTP请求时,会用到不通的protocol,不同的tomcat版本支持的protocol不同,最常用的有: ......原创 2021-11-28 00:31:09 · 1773 阅读 · 0 评论 -
Nginx+Linux负载均衡优化
Nginx优点: 1.高并发时响应性能好,官方描述支持5W/s的静态文件并发. 2.反向代理性能非常强(可用于负载均衡). 3.内存和cpu占用率低(为Apache的10%~20%). 4.对后端服务器又健康检查功能. 5.配置简单.Nginx高并发处理能力原理: Nginx采用epoll模型:epoll模型是异步非阻塞方式.epoll对于句柄事件的选择不是遍历的,......原创 2021-12-03 00:15:00 · 1139 阅读 · 0 评论 -
MySQL数据分析系列---mysql优化
目录1.mysql的索引优化项:2.mysql的配置优化项:3.mysql的架构优化:1.mysql的索引优化项: 1.一定要为where字句中的搜索条件字段创建索引. create index index_name on table_name(field_name ) 2.表中已有大量数据时,创建索引会很慢,占用硬盘框架,但索引创建完毕后查询速度会加快. 3.索引失效情况: ......原创 2021-12-02 00:15:00 · 891 阅读 · 0 评论 -
mysql数据库分析系列---mysql执行架构
select语句执行顺序:fwghsdolfrom-->where-->group by-->having-->select-->distinct-->order by-->limit.select语句执行过程:客户端-->连接器-->查询缓存-->命中缓存-->返回数据客户端-->连接器-->查询缓存-->分析器-->优化器-->执行器-->......原创 2021-12-01 00:15:00 · 383 阅读 · 0 评论 -
性能分析工具
CPU分析:CPU性能分析工具 性能指标 工具 说明 平均负载 uptime top uptime最简单 top提供更全的指标 系统整体CPU使用率 top vmstat mpstat sar /proc/stat top,vmstat,mpstat只能动态查看 sar可以查看历史数据记录 /proc/stat是其他性能工具的数据来源 进程CPU使用率 top pidstat ps原创 2021-12-01 00:15:00 · 558 阅读 · 0 评论 -
网络分析系列---系统网络配置优化
目录1.查看发压机性能,无异常.2.top查看服务器系统负载 系统cpu,mem,I/O负载低3.ping服务器网络连通性 发现无异常.4.ss -s 发现socket统计信息中有大量的timewait连接.5.考虑优化连接数 jmeter并发数设置为50时,建立连接的只有5个.closed+timewait状态的连接有26个6.dmesg | tail 查看系统日志 发现有大量nf_conntrack:ta......原创 2021-11-24 21:43:18 · 3462 阅读 · 0 评论 -
网络分析系列---Nginx优化
目录1.tcpdump对压测时的指定网卡流量抓包.2.wireshark打开抓到的网络包文件 1.统计--->流量图 2.勾选"限制显示过滤器"---->流类型"TCP Flows"3.分析网络请求,发现发送分组数据时似乎有延迟.4.nagle(纳格)算法:5.修改Nginx配置,减少数据包发送量6.重启nginx /usr/local/nginx/sbin/nginx -s reload7.调优后压测发现性......原创 2021-11-29 00:15:00 · 860 阅读 · 0 评论 -
网络分析系列--性能测试中的基本网络知识
目录Linux 网络路栈网络数据包的发送流程: 1.应用程序调用socket接口发送网络包. 2.网络协议栈从socket发送缓冲区中,取出数据包,再按照TCP/IP栈,从上到下逐层处理,比如:传输层和网络层,分别为数据包增加TCP头和IP头,执行路由查找确认下一步的IP,并按照MTU大小(MTU:最大传输单元,linux默认1500)进行分片. 3.分片后的网络包,再送到网络接口层,进行物理地址寻......原创 2021-11-28 00:15:00 · 2236 阅读 · 0 评论 -
I/O分析系列--filetop(查看系统内核对文件读写情况)+opensnoop(查看系统调用打开的所有文件)对文件系统/磁盘IO导致系统反应慢的问题分析
目录1.查看请求接口时的时延:2.使用压力工具请求服务时查看系统负载:top 发现cpu,mem正常,iowait高.3.iostat查看系统io负载 发现此磁盘sda的I/O使用率已经达到100%饱和4.df查看sda是否是磁盘设备 df -h---->确认是系统磁盘5.pidstat排查是哪个进程引起I/O瓶颈6.strace -p pid跟踪该进程的系统调用7.filetop -C跟踪内核中文件的读写情......原创 2021-11-27 00:15:00 · 1807 阅读 · 0 评论 -
I/O分析系列--strace(查看某进程产生的系统调用)+lsof(查看某进程打开的所有文件)分析Redis对文件读写产生的iowait瓶颈
strace用来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等.安装strace:yum install -y strace在性能测试过程中,碰到的瓶颈并不一定都是cpu,mem造成,还有可能是系统架构设计不合理,代码算法性能差引起的.Redis性能瓶颈分析:性能测试时,发现tps低,响应时间很高,但是查看系统负载,cpu和mem都处于可控范围,排查压力机的负载和网络连通性,均正常,唯一异常的是wait态的cpu较高.1.排查wait态cpu使用率高的原因:..原创 2021-11-26 00:15:00 · 2001 阅读 · 0 评论 -
MEM分析系列--vmstat+jmap+mat对内存泄漏分析
目录jmap命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。1.修改tomcat堆栈内存后启动服务:vim catalina.sh2.通过jmeter对系统施加长时间压力,查看是否有内存泄漏发生.3.htop查看系统状态:yum install -y htop-->htop4.vmstat查看系统free内存变化:vmstat 1,内存持续减少5.压测过程中记录java堆内存信息:ps -ef | g......原创 2021-11-25 00:15:00 · 1179 阅读 · 0 评论 -
MEM分析系列--vmstat分析压测时mem和io情况
目录1.dd命令产生临时读写压力:2.查看系统memory+io状态:vmstat 13.清理数据:4.分析: 1.产生io压力前,memory中的cache(页缓存)平稳,io值较低. 2.产生io压力时,memory中的cache指标升高,io中的bo(数据从内存--->磁盘)值飙 升,说明内存正在写数据到磁盘. 3.从磁盘读取数据时会使用到buffer来缓存数据(数据在buffer中缓存一定量时,再......原创 2021-11-24 00:15:00 · 1124 阅读 · 0 评论 -
CPU分析系列--应用程序优化手段+系统优化手段
应用程序优化手段:性能测试时如果出现性能瓶颈,需要对代码或应用程序进行调优,可以考虑从以下5个方面入手,调优后对比效果.1.编译器优化:通过对编译器修改配置,达到优化的目的2.算法优化:代码中通过对算法的优化,降低时间复杂度和空间复杂度,达到优化目的.3.异步处理:使用异步处理策略,减少阻塞,优化并发.4.多线程代替多进程:进程是资源分配的基本单位,线程是cpu调度的基本单位,一个进程至少都有1个线程,同一个......原创 2021-11-23 00:15:00 · 834 阅读 · 0 评论 -
CPU分析系列--perf 通过对热点函数抓取分析具体代码对cpu的消耗
目录1.top查看系统各进程资源使用情况发现sysbench资源消耗大,定位具体代码瓶颈.2.下载perf:yum install -y perf3.perf record -g -p pid 抓取30s数据4.展示生成的perf.data文件:perf report 1.如果命令失败,需要将perf.data拷贝至docker容器内查看:docker cp perf.data containerId:/tmp 2.进入容......原创 2021-11-22 00:15:00 · 7404 阅读 · 0 评论 -
CPU分析系列--vmstat/pidstat -wt分析进程/线程上下文切换造成的性能瓶颈
目录1.从系统层面看:vmstat 1 32.从进程层面看:pidstat -w3.从线程层面看上下文切换:pidstat -wt4.案例: 1.使用sysbench模拟多线程切换. yum install -y sysbench sysbench --threads=10 --max-time=300 threads run模拟10个线程,运行300s. ......原创 2021-11-21 03:30:00 · 3393 阅读 · 0 评论 -
CPU分析系列--sysstat(mpstat+pidstat)分析系统CPU和I/O负载
sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如:CPU 使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行.stress是Linux下的一个压力测试工具,可以对cpu、memory、IO以及磁盘进行压力测试,可以指定负载的cpu个数.-c, --cpu N 产生 N 个进程,每个进程都反复不停的计算随机数的平方根-i, --io N 产生 N 个进程,每个进程反复调用 sync() 将内存上的内容写到硬盘上-m原创 2021-11-20 15:57:14 · 2775 阅读 · 0 评论 -
如何保证kafka正常
Kafka是高吞吐低延迟的高并发、高性能的消息中间件,在大数据领域有极为广泛的运用。配置良好的Kafka集群甚至可以做到每秒几十万、上百万的超高并发写入。1.kafka如何实现高并发,高性能写入数据的?Kafka在写数据的时候,一方面基于了os层面的page cache(页缓存)来写数据,所以性能很高,本质就是在写内存罢了.另外一个就是kafka写数据的时候,非常关键的一点,他是以磁盘顺序写的方式来写的。也就是说,仅仅将数据追加到文件的末尾,不是在文件的随机位置......原创 2021-11-19 14:05:14 · 1780 阅读 · 0 评论 -
CPU分析系列--性能测试---数据库性能分析
目录1.数据库设置2.nmon查看服务器状态3.分析是否是mysql慢查询问题性能测试中,数据库服务的性能低下拖累整个系统性能表现是很常见的,以下以数据库mysql中慢查询为例讲解常见的性能分析及调优手段.使用到的工具: jmeter(施压)---nmon(监控)---mysqldumpslow(日志分析)---workbench/navicat(sql语句分析)1.数据库设置 /etc/my.cnf文件中设置慢查询配置:......原创 2021-11-18 11:07:23 · 4467 阅读 · 0 评论 -
Jmeter分布式压测
我们本地资源作为压测机发起压测时,如果设置的并发数大了,就会爆出OOM的错误,此时我们可以采用分布式压测的方案来横向扩展我们的压测执行资源,提高并发数,解决资源不足的窘境.Jmeter分布式步骤: 需要配置slave节点和hub节点(首先slave节点和hub节点都要配置好jmeter环境) 1.slave(执行机)节点配置: 1.关闭SSL认证选项:jmeter.propertie......原创 2021-11-01 15:26:34 · 7299 阅读 · 0 评论 -
App卡顿分析
1.产生卡顿的原因: 1.内存影响:如内存抖动,full gc等 2.cpu影响:计算太耗时. 3.render影响:布局复杂,overdraw(布局视图堆叠).2.分析工具systrace推荐sdk自带的工具:systrace(需要python2.7)a.工具位置:b.工具启动命令:python systrace.py/python systrace......原创 2021-10-26 00:41:30 · 13088 阅读 · 0 评论 -
H5性能分析
目录1.W3C标准对应页面加载要求 1.页面加载流程: 2.页面中资源加载指标:2.W3C协议标准支持我们在页面中获取单个资源的性能: 1.console中输入:window.performance.timing. 2.获取dom内容加载时间: 3.自动化脚本中需要获取页面资源加载时间在App中Webview加载H5新页面时经历了什么?1.W3C标准对应页面加载要求Navigation Timi......原创 2021-10-25 10:06:10 · 15437 阅读 · 0 评论 -
Java线程安全
前段时间有测试一个后端对账单和话单采集服务,在测试过程中有涉及到数据库读写逻辑和并发的场景,所以结合经验针对系统技术架构设计了部分并发场景结合数据库读写时可能出现的一些问题的用例,也确实出现了一些测试环境容易忽视,线上环境确确实实可能出现的问题,当然最后还是得到了妥善的解决.下面说说后端测试应该考虑的一些线程安全和数据读写方面的问题.前提:测试环境的架构尽量向线上环境的架构靠拢,比如线上如果采用分布式集群,测试环境如果是单机,那么部分问题自然无法暴露,如果测试环境无足够资源模拟线上的几十台集群环境,那么原创 2021-10-10 17:24:43 · 22033 阅读 · 1 评论 -
docker 搭建基于prometheus的监控体系
Prometheus是一个时间序列数据库。但是,它不仅仅是一个时间序列数据库。它涵盖了可以绑定的整个生态系统工具集及其功能。Prometheus主要用于对基础设施的监控。包括服务器,数据库,VPS,几乎所有东西都可以通过Prometheus进行监控。Prometheus希望通过对Prometheus配置中定义的某些端点执行的HTTP调用来检索度量标准。普罗米修斯的主要特点是: 1. 一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据 2.Pro......原创 2021-09-13 00:52:21 · 17360 阅读 · 0 评论 -
性能测试中常用组件介绍
JMeter性能测试工具的使用实际压测活动中性能测试常用组件1.压测中不同接口间测试数据的传递 JSON提取器 XPATH提取器2.压测结果断言 Response Assertion JSON Assertion3.BeanShell生成测试数据(生成虚拟ip,解决同一个Ip大量访问被拦截的问题) BeanShell script逻辑生成数据 Java代码逻辑生成数据4.全局变量与......原创 2021-09-07 13:16:05 · 198 阅读 · 0 评论