性能测试一般关注的几方面:CPU占用率,I/O值,网络以及内存占用率
1、CPU占用率
2、内存
用top指令来查看
内存是查看MEM部分
要至少有10%free内存,used不超过85%为宜,过高则会导致内存溢出
CPU则是查看Cpu部分
持续used高于95%说明进入瓶颈,最大上线应在80%~85%,合理范围是60%~70%以下
3、I/O
查看上图的wa值,即磁盘I/O占用CPU百分比,如果比较高就
ps -eo state,pid,cmd
这个可以看进程的状态,如果是类似D这种的应该就是有问题的进程,可能就是造成I/O比较高的原因,需要杀掉
iostat -xk 1
通过这个方法可以查看哪个磁盘的I/O比较高,当然也可以捎带手看一下CPU的利用率,或者直接拿他来看I/O是不是过高也可以
最后一列util表示一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比,100%无疑就需要优化了
4、网络
ethool eth0 看speed,查看总带宽
知道总带宽后来看即时网速
sar -n DEV 1 100
很方便查看网速是否过大进入瓶颈
5、各类性能测试的含义
容量测试:当随着用户增加TPS不在增加,则此TPS为最大容量
负载:按60%或80%最大容量(TPS)加压,查看各项数值
疲劳:长时间,查看各项数值
6、如何根据数据进行问题定位
先看各项,如果都不高就是没问题的
CPU利用率和I/O是反向的,CPU利用率高则 I/ O小, I/ O大则CPU利用率就低,因cpu的工作效率要高于磁盘,而进程在cpu上面运行需要访问磁盘文件,这个时候cpu会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候会切换到其他进程或者空闲。当这种读写请求过多就会导致不可中断睡眠状态的进程过多,从而导致负载高,cpu低的情况。
缓存是为了解决CPU速度和内存速度的速度差异问题
内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不用去内存中取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多
MySQL的数据是存储在硬盘中,如果需要进行sql查询,需要先把数据从磁盘加载到内存中。当在数据特别大的时候,如果执行的sql语句没有索引,就会造成扫描表的行数过大导致I/O阻塞,或者是语句中存在死锁,也会造成I/O阻塞,从而导致不可中断睡眠进程过多,导致负载过大。具体解决方法可以在MySQL中运行show full processlist命令查看线程等待情况,把其中的语句拿出来进行优化。
所以网络导致其他正常但CPU利用率不高制造瓶颈,CPU不够导致数据传入后也无法加快速度,制造瓶颈,内存不够,导致CPU无法及时要到想要的数据形成CPU利用率上不去,制造瓶颈,I/O过大导致进程堆积,CPU闲置制造瓶颈