OSS 性能测试经验总结

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
文件存储 NAS,50GB 3个月
简介:

OSS 性能测试经验总结

1、CPU 相关

1.1 进程使用CPU

我们通常都会习惯性的用top 去查看进程CPU 使用率,但是通常会进入以下误区

系统CPU idle很高CPU不是性能瓶颈

通常我们在看进程CPU使用率的时候用的是top,默认是按照CPU使用排序的,而且这时候看到的进程CPU使用情况是整个进程的,进程内部所有线程CPU使用的总和,这时候如果要进一步确定CPU不是性能瓶颈就要进一步查看进程内每个线程CPU使用情况:
top -H -p pid
这时候会将进程内所有线程按照CPU使用情况排序列出来,这时候观察CPU使用情况,这时候如果有进程CPU使用率持续在90% 或者100% 说明CPU就有可能是瓶颈了。
比如说一个web服务器在设计的时候由一个进程专门进行accept 新的连接,连接完成后交由其他进程处理,此时如果该进程用满单核CPU就会造成性能瓶颈。这时候可以进一步确认将CPU 用满的进程在干啥,是否在进行符合我们预期的操作:
pstack pid

案例

在Nginx multi_accept on; 这一项打开后,在压力极大的情况下,每一秒有3W+的tcp连接请求过来Nginx 某个worker 每时每刻都会有新的连接需要建立,导致这个worker 一直hold 住accept互斥锁不释放, 造成Nginx 严重负载不均,这个worker 一直在accept 新的连接被打满(满占一个CPU),而其他worker闲着没事做, multi_accept 项关闭后解决。 pstack 看这个worker 一直在accept 新的连接。

1.2 软中断使用CPU

系统上每时每刻都会有很多软中断产生,这些软中断会悄无声息的使用CPU,而通常由硬件产生的软中断对CPU具有亲和性,比如说中断号为100的中断对CPU0 有亲和性,如果某个时候100 号软中断非常多就会造成CPU0被打满,处理不了更多中断造成性能瓶颈。这时候可以用以下命令查看下单个CPU的使用率:
top +1 (输入top命令后按1)有可能CPU核心太多屏幕太小显示不出来,尝试用下面命令
mpstat -P ALL 1
具体案例下面的网络部分。

1.3 总结

a、系统CPU idle 很高CPU不一定不是性能瓶颈,有可能单个进程吃满单核CPU
b、系统CPU idle 很高也没发现有单个进程吃满单核CPU情况下CPU不一定不是瓶颈,有可能单核CPU被打满,因CPU亲和性问题造成性能瓶颈

注:当然还有很多其他情况会使用CPU,比如说进程切换等

2、网络

通常查看网络状况的时候都是看机器网卡是否被打满,我通常用的是ifstat 或者dstat 来看, 但是也会有以下误区

网卡未打满网络就不是瓶颈

2.1 大量小包情况下

这种情况比较好理解,假设用http 短连接上传到OSS数据,每个Object 1字节,从抓包上看一次PUT 操作要产生八个包TCP 三次握手,四次挥手加上一次1字节数据传输,光进行这一个字节数据的传输就要产生8个tcp 报文,底层网卡怎么滴也会产生8次中断吧。不过这种场景只有在很极端的情况下才会出现,而且通常都是后端Server 先到达性能瓶颈。

2.2 上游网络环境差丢包严重导致

这种情况也比较好理解,因为现在基本上网络通信用的都是TCP,如果上游网络环境差会造成丢包现象出现,丢包会触发TCP协议的拥塞控制算法,进而导致整体网络使用率上不去,这里可以使用tsar 工具查看系统丢包率 tsar --live, 注意观察retran 一项。但有时候系统丢包率高有可能并不是上游网络环境差造成,具体见2.3 分析。

2.3 网卡软中断打满单核CPU造成性能瓶颈

2.3.1 现象及原因

这种情况比较常见,尤其是在万兆网的机器上,网络流量达到1GB 也算是比较轻松的事情,但是经常会有这种情况出现,万兆网机器,网络流量打到400M的时候就再也打不上去了,利用淘宝对外提供的开源监控工具tsar 查看下系统丢包率,如果有异常有可能是2.2 描述的原因,但是也有可能是自身原因。
分析步骤:
1、查看系统CPU使用情况

mpstat -P ALL 1  
top +1

注意观察是否出现某个CPU被软中断打满的情况,如下图:

如果出现如下情况说明是网卡软中断对CPU0有亲和性,需要对网卡软中断进行分流了。

2.3.2 网卡软中断打满单核CPU造成的影响

网卡打满单核CPU情况造成的影响很多很坏而且不好查,首先我们知道网卡一定是有自己的buffer的,如果网卡产生的软中断没有被及时处理,就会导致网卡buffer溢出,直接导致的后果就是丢包,丢包会触发TCP拥塞控制导致网卡使用率上不去。

2.3.3 如何判断网卡软中断是否分流及如何设置

当前一般千兆网或者万兆网都是多队列网卡,网卡产生的软中断会对于到多个中断号,查看多队列网卡对应的中断号:
cat /proc/interrupts | grep eth | awk '{print $1 " " $NF}'

vim 打开 /proc/interrupts 查看软中断是否都落在同一个CPU上
更精确的查看方法是看 /proc/irq/$interupt_id/smp_affinity, 里面会有一串十六进制数字
具体含义和设置方法不做过多介绍,详见:http://blog.csdn.net/turkeyzhou/article/details/7528182

2.4 总结

a、丢包严重不一定是上游网络问题
b、网卡util不高不一定不是性能瓶颈

3、磁盘

关于磁盘通常都是用iostat 去看磁盘使用情况,但是也有问题,也会进入误区

3.1 关于磁盘使用率(IOPS争抢)

通常我们在查看磁盘使用率的时候都会用iostat 去看,我比较常用的是如下命令:
iostat -x 1
最后一项有个磁盘util 项,千万不要被这个值迷惑,这个值只是磁盘在1s 内的平均使用率
有可能在1s内的某个瞬间磁盘使用率达到100% 到达性能瓶颈。

3.2 因IOPS 争抢丢日志案例

在机器压力比较大的时候发现Nginx 和我们的后端Server 都有不同程度的丢日志现象,Nginx 日志和我们后端Server日志都是打在同一块盘上的,于是开始怀疑是磁盘IOPS被打满导致,想当然的用iostat -x 1 查看磁盘使用率,看到这块盘在1s 内有util 可以达到80%,但是没有看到100%的情况,因此开始怀疑有可能在1s 内磁盘使用率达到100%,为了证实我的想法将Nginx 日志和后端Server 日志分别达到不同磁盘上,再用iostat 去观察,发现两块盘都有使用率到80%的情况,加起来超过100%,因此确定打在一块盘上确实是会造成IOPS争抢导致丢日志。

3.3 总结

a、一段时间内磁盘使用率低不代表瞬时使用率也低

4、内存

关于了内存这块,测试过程中很少出现因内存问题造成性能瓶颈,所以没太多经验,不过还是有一点需要强调下

4.1 关于可用内存

是否是内存free 的越少表面内存就越不够用?不是这样的,free 内存越少只能证明Linux 对内存使用率越高,通常系统可用内存分为三块,一块是free 部分,一块是读Cache 部分,还有写buffer,Cache通常指的是读Cache(Linux 会利用多余的主存来做读Cache,也就是传说中的Page Cache)。

chy@ubuntu:~$ free -m
                     total       used       free     shared    buffers     cached
        Mem:          4024       2507       1516          0        237       1170
        -/+ buffers/cache:       1100       2924
        Swap:         1021          0       1021

可以看到下一行-/+ buffers/cache,我理解这里的free 才是真正的使用可用内存,当free 量不够之后系统清先清Cache 和 buffer 使用的内存供进程使用,等这些都用完了才会考虑swap。

4.2 总结

a、free 内存少不代表系统内存不够用

附录

使用到的命令

top 
top -H -p pid
top +1
pstack pid
tsar --live
ifstat
 dstat
mpstat -P ALL 1
iostat
iostat -x 1
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
7月前
|
存储 测试技术 区块链
阿里云、百度云及移动云对象存储横向性能对比测试
在企业的数字化转型进程中,我们观察到越来越多的公司将其IT基础设施迁移到云端。随着企业业务的持续运营,无论是储存、处理、分享还是删除,都会产生大量的数据,这就要求有一个既可靠又高效的系统来管理和存储这些信息。对象存储产品在这个场景中扮演了至关重要的角色。它们以一种可扩展、安全、持久的方式,有效地满足了对大规模非结构化数据存储的需求。 尽管市场上云计算提供商众多,各自都有自己独特的对象存储产品,面对这样的丰富选择,如何寻找最符合企业需求的产品呢?这正是企业今天寻求解答的问题。 在本篇文章中,我们将深入进行一项横向对比测试,专门对阿里云OSS、百度云BOS和移动云EOS这三大云服务提供商的对象
2486 0
|
5月前
|
SQL DataWorks 数据可视化
DataWorks操作报错合集之测试OSS数据源的连通性时,出现503 Service Temporarily Unavailable的错误,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
域名解析 Kubernetes 对象存储
k8s场景测试之使用ingress反代oss
需要使用ingress反向代理某个域名的场景,本场景仅供测试参考,生产环境使用请自行评估
640 0
k8s场景测试之使用ingress反代oss
|
Linux 测试技术 Apache
|
存储 开发工具 对象存储
.Net程序测试阿里云OSS开放存储服务
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/41862311 阿里云官网有提供OSS相关的操作API文档和.
2187 0
|
5月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
4月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
|
5月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。

相关产品

  • 对象存储