本文已参与「新人创作礼」活动,一起开启掘金创作之路。
性能测试常用方法(负载测试、压力测试、并发测试、稳定性测试、可恢复性测试、全链路测试) 性能测试与调优的主要对象、容器与性能、常用容器性能调优工具与使用
常用方法
- 负载测试:让系统在一定的负载情况下进行正常的工作,观察系统的性能指标(响应时间、资源消耗等)能否满足用户需求。
- 压力测试:又叫强度测试,通过对系统极端加压和长时间连续运行,观察系统所表现出来性能问题及造成的影响。
- 并发测试:验证系统并发能力,通过一定的并发量观察系统表现出来的行为特征
- 稳定性测试:长时间的负载测试,确定系统的稳定性
- 可恢复性测试:测试系统能否快速的从错误状态恢复到正常状态
- 全链路测试:在大型互联网公司中提出的包含系统上下游的全链路压力测试与稳定性测试方式,通过模拟近似真实的用户流量和用户行为来仿真线上流量,是目前大型活动前或大版本演进上线前的一种非常有效的保障措施。
性能测试与调优的主要对象
随着云计算的逐渐普及,底层硬件大部分都被云平台通过虚拟化的能力进行替代,可以根据自身的需要动态的调整和伸缩,可以让我们将更多的精力放在系统层以上的部分。
- 程序瓶颈
- 使用的I/O模型
- 是否能够使用多核处理器
- 部署的方式与资源分配
- 网络瓶颈
- 网络模型与协议
- 网络防火墙设置
- 内核态与用户态切换
- 内核瓶颈
- 内核参数调优
- 内核模型开启与加载
- 内核版本与性能
- 系统瓶颈
- 不同操作系统对特定场景存在先天缺欠
- 硬件瓶颈
- 磁盘类型(SSD vs 机械硬盘)
- 网络设备(吞吐与协议支持)
- CPU型号(DRAM、NUMA)
- 等。。。
容器与性能
容器是一种轻量级的虚拟化方式,相比KVM等需要虚拟化GuestOS的虚拟化方式而言,CPU内存的虚拟化损耗较小,之所以很多时候无法实现同等性能,更多的是要检查容器引入带来的副作用(网络架构、存储介质、内核参数、编排系统、系统缺陷)
- 误解
所有的问题都是容器的问题,之前在VM中跑的没有任何问题,出现问题先怀疑容器的成熟度
- 理解
容器的引入可能会导致对比的环境不对等,出现性能问题首先要看是否存在系统差异
- 接纳
在了解了容器架构的原理后,只要在合理的场景下使用合理的方式,基本可以做到性能拉齐
- 认同
容器技术是一种博弈,可接受的性能损耗或者有约束的性能场景换来了更鲁棒的应用交付方式和几大的效率提升
容器性能分析 - 轻量级的虚拟化
容器的虚拟化主要是基于Linux命名空间和Cgroup,容器虚拟化的损耗可以在5%以内
命名空间负责环境隔离
Cgroup负责资源分配
网络损耗
Service Mesh相当于在Kubernetes现有的网络模型上增加了一层接入层网关,通过这层网关实现了复杂的流量控制、权限校验、熔断器、分布式tracing等,显而易见,这种场景会带来更多的性能损失,但是也同时会带来更多的网络能力
框架语言性能降低
容器性能测试与调优的步骤
选择测试方法与工具集合
常用容器性能调优工具与使用
压测工具
-
WRK 适用常规的压力测试和稳定性测试场景,支持连接数、线程、时间等基础参数,支持脚本、Header头等场景,但是需要特别注意的是,压测工具的压测指标一定要选择一个适当的时间长度,最好在5分钟以上,因为对于压测量级比较大的场景,WRK存在预热的问题,果断的压测时间,可能会造成压测结果不准确的问题
-
PTS:阿里云全链路压测工具
资源概览工具
CPU Memory性能工具
磁盘性能
- iotop
磁盘性能优化的概览,通过iotop找到性能瓶颈的进程,然后在对进程进行分析
- iosnoop
当发现磁盘性能瓶颈的进程后,通过iosnoop进行进程跟踪找到对应的事件,从而获得磁盘性能的瓶颈症状
网络性能
- sar
- netstat
网络诊断
- tcpdump
- wireshark