《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.3 云上大型赛事系统调优(1)

本文涉及的产品
性能测试 PTS,5000VUM额度
日志服务 SLS,月写入数据量 50GB 1个月
简介: 《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.3 云上大型赛事系统调优(1)

3.1.3 云上大型赛事系统调优


本节讨论针对压测时遇到的具体问题如何进行系统调优。


3.1.3.1 常见问题及应对


3.1.3.1.1 压测机和服务端问题

压测机和服务端上产生的问题通常是系统瓶颈问题,例如压测机发包速率上不去、服务端队列溢出、服务端Conntrack表项打满等等,这些系统内问题一般都会有相应的性能指标指示,我们可以通过通用的系统性能问题排查方法找到瓶颈点,并做对应的调整。

Linux系统下常见的排查手段命令如下:

top命令可以动态查看当前系统的资源情况,以及占用资源的命令列表。

dmesg ==> /var/log/dmesg命令可以快速查看系统启动过程中的内核日志信息,包括:系统设备信息、启动和操作过程中系统记录的任何错误和问题。

vmstat 1 5命令输出系统核心指标信息,1 5 表示1秒输出5次信息。

mpstat -P ALL 1命令可显示CPU的个数,以及每一个CPU被占用的状况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。

pidstat 1输出进程的CPU占用率{会持续输出,并不会覆盖之前的数据}。

iostat -zx 1查看机器磁盘IO情况。

sar -n DEV 1 查看网络设备的吞吐率。

sar -n TCP,ETCP 1 查看TCP连接状态。

systcl -a | grep ipv4 查看Linux系统网络相关内核参数。

netstat -tan |grep ^tcp |awk '{++a[$6]} END{for (i in a) print i, a[i]}' 统计Linux系统不同状态的tcp连接数。

netstat -st | egrep -i "drop|reject|overflflowed|listen|fifilter" 显示系统队列溢出、丢包计数。

Windows系统常见的排查工具如下:

Task1Manager提供一些排查通用信息,包括系统整体资源利用率、各进程资源占用率、注册服务信息等。

Resource1Monitor可实时监控系统详细性能,包括CPU、内存、磁盘IO和网络。

Event1Log检查操作系统各组件日志,包括系统日志、应用程序日志和服务日志。

Regedit检查系统注册表。注册表实质上是一个庞大的数据库,它存储和管理关于系统的一切信息。

Process Explorer为Microsoft提供的Sysinternals工具,可以检查各进程详细信息和hook信息、句柄信息。

Process Monitor为Microsoft提供的Sysinternals工具,可以捕获进程的大多数操作数据。

WinDbg为Mircosoft提供的GUI调试器,可以调试应用程序,或者提供Windows操作系统的Kernel Debug。

CPU瓶颈常见考量点:

CPU资源利用率很高的话,需要看CPU消耗User、Sys、Wait哪种状态。

如果CPU1User非常高,需要查看消耗在哪个进程,可以用top(Linux)命令看出,接着用top–H–p看哪个线程消耗资源高。如果是Java应用,就可以用jstack看出此线程正在执行的堆栈,看资源消耗在哪个方法上,查看源代码就知道问题所在;如果是c++应用,可以用gprof性能工具进行分析。

如果CPU Sys非常高,可以用strace(Linux)看系统调用的资源消耗及时间。

如果CPU1Wait非常高,考虑磁盘读写了,可以通过减少日志输出、异步或换速度快的硬盘。

内存瓶颈常见考量点:

操作系统为了最大化利用内存,一般都设置大量的cache,因此,内存利用率高达99%并不是问题,内存的问题主要看某个进程占用的内存是否非常大以及是否有大量的swap(虚拟内存交换)。

磁盘I/O常见考量点:

磁盘I/O一个最显著的指标是繁忙率,可以通过减少日志输出、异步或换速度快的硬盘来降低繁忙率。

网络I/O常见考量点:

网络I/O主要考虑传输内容大小,不能超过硬件网络传输的最大值70%,可以通过压缩减少内容大小、在本地设置缓存以及分多次传输等操作提高网络I/O性能。

内核参数:

内核参数一般都有默认值,这些内核参数默认值对于一般系统没问题,但是对于压力测试来说,可能运行的参数将会超过内核参数,导致系统出现问题,可以用sysctl来查看及修改。


3.1.3.1.2 中间件问题

中间件问题通常是超限问题,例如SLB1QPS超限、nginx节点不足、EIP流量超限、JDBC连接池不足等等,可以通过组件监控指标查看到,一般是通过升配(Scale up)或者扩容(Scale out)解决。


3.1.3.1.3 数据库问题

数据库层面需要关注慢SQL、死锁等等。最常见发生的就是慢SQL问题。

索引

最常见的情况是在数据量比较大的情况下,应用程序的SQL语句未建立索引,或者未能利用索引,产生了全表扫描。

带有NULL会导致索引性能低。例如表中有空NULL值或者语句中有IS NULL或IS NOT NULL。

如SQL语句产生表级锁,将会锁住整个表,导致性能恶化。

创建临时表会产生大量日志也可能会导致性能恶化。

以上问题可以通过具体的SQL语句调整解决。

3.1.3.1.4 应用侧问题

应用侧本身问题包括GC/FULL1GC频率过大、应用线程池不足等问题,需要检查应用端代码解决。



《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.3 云上大型赛事系统调优(2): https://developer.aliyun.com/article/1226610?groupCode=supportservice

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
7月前
|
JavaScript 前端开发 算法
性能测试与调优
性能测试与调优
84 0
|
负载均衡 测试技术 应用服务中间件
性能测试常见瓶颈分析及调优方法总结
性能测试常见瓶颈分析及调优方法总结
358 0
|
20天前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
36 3
|
7月前
|
消息中间件 网络协议 物联网
如何入门做物联网系统压测?
【4月更文挑战第18天】物联网系统在架构、网络模式、通信协议等方面与传统的互联网系统有所区别。因此,传统的性能测试方法不能直接套用到物联网系统中。
376 13
如何入门做物联网系统压测?
|
3月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
101 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
4月前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
138 4
|
6月前
|
监控 Java 测试技术
Java性能测试与调优工具使用指南
Java性能测试与调优工具使用指南
|
5月前
|
数据采集 传感器 新能源
LabVIEW新能源汽车电池性能测试系统
LabVIEW新能源汽车电池性能测试系统
78 0
|
6月前
|
缓存 Java 测试技术
Spring Boot中的性能测试与调优
Spring Boot中的性能测试与调优
|
7月前
|
数据采集 存储 传感器
LabVIEW开发燃油阀自动性能测试系统
LabVIEW开发燃油阀自动性能测试系统
45 0