发布时间:2020-07-23
高并发系统的优化一直以来都是一个很重要的问题,今天小编和大家聊聊高并发系统的一些性能调优和优化策略。
系统性能的关键指标
吞吐量(Throughput) 系统单位时间内处理任务的数量;
延迟(Latency) 系统对单个任务的平均响应时间;
一般来说,考量一个系统的性能主要看这两个指标。而这两个指标之间又存在着一些联系:对于指定的系统来说,系统的吞吐量越大,处理的请求越多,服务器就越繁忙,响应速度就会慢下来;而延迟越低的系统,能够承载的吞吐量也相应的更高一些。
一方面,我们需要提高系统的吞吐量,以便服务更多的用户,另一方面我们需要将延迟控制在合理的范围内,以保证服务质量。
系统性能测试
业务场景
对于不同的业务系统,可以接受的延迟(Latency)也有所不同,例如邮件服务可以忍受的延迟显然要比Web服务高得多,所以首先我们需要根据业务场景的不同来定义理想的Latency值。
我们需要一个能够制造高吞吐的工具来测试系统的性能,PerformanceRunner是国内领先的支持http、https、websocket、tcp/ip、MQ等各种协议、10万+海量并发、精准可靠的性能测试工具,极大地降低了应用系统运行风险。
测试流程
测试的过程中需要不断加大吞吐量,同时注意观察服务端的负载,如果负载没有问题,那就观察延迟。一般这个过程需要反复很多次才能测出系统的极限值,而每次测试消耗的时间也比较长,需要耐心一些。
通用的系统参数调优
Linux内核默认的参数考虑的是最通用的场景,不能够满足高并发系统的需求。
内存:对于单个Socket连接来说消耗内存不多,但是几万甚至几十万个连接叠加起来就非常可观了,配置不当会导致压测端内存成为瓶颈。
网络:有时候为了避免网络拥塞,需要限制压测客户机的带宽,使流量以比较平滑的速率发送和接收。
定位系统性能瓶颈:当系统吞吐和延迟上不去时,首先需要定位问题,而不是急于修改代码。常见的性能瓶颈包括CPU/内存/磁盘IO/网络带宽等,其中每一项都有一到多个简单实用的工具: 对于CPU和内存,我们只要使用top就可以了;对于磁盘IO,可以用iotop或iostat;对于网络带宽,可以使用iftop。
如果依然没能定位到问题,可能系统配置不当,参考通用的系统参数调优。最后检查代码是否有单点瓶颈,例如程序被阻塞了:在笔者实测过程中,发现每个用户创建会话进程都需要对同一个supervisor发起同步请求,同时登录的用户数量很大时,这些同步请求会排队,甚至引发超时。
以上就是小编收集的做压力测试时遇到的一些问题以及应对办法,鉴于笔者水平有限,错漏难免。
更多并发测试推荐阅读:
如何开展数据库系统的性能需求分析?如何制定数据库能力评估模型?
您的信息已成功提交!
我们的客服人员稍后会与您联系