Linux-Web应用服务性能测试初探
一、服务端与客户端的准备工作
对于服务器最想要的数据就是,每秒支持的并发数,以及相应的内存CPU使用情况。
服务端需要设置最大打开描述符的限制(以支持创建大量的socket),配置socket参数。客户端要产生大量的并发请求时,也有相应的参数需要设置。
可参考我的另一篇随笔:http://www.cnblogs.com/chang290/archive/2013/05/09/3069474.html
二、服务端主机主要参数监控
1、内存,可以使用top、vmstat监控,free
vmstat可参考:http://www.cnblogs.com/peida/archive/2012/12/25/2833108.html
top可参考:http://www.cnblogs.com/peida/archive/2012/12/24/2831353.html
free可参考:http://www.cnblogs.com/peida/archive/2012/12/25/2831814.html
2、磁盘IO的监控 iostat ,可参考:http://www.cnblogs.com/peida/archive/2012/12/28/2837345.html
3、网络IO的监控(若传输的数据较大,尽量采用千兆网连接以防止网络产生瓶颈),iftop 监控, 可参考:http://www.vpser.net/manage/iftop.html
4、系统负载 uptime
三、某些样例
1、当通过上述命令监控,发现内存充足,CPU空闲,并且IO也不满,那么很有可能就是网络IO瓶颈了,并发客户端的数据传不到服务器。
2、对于磁盘IO频繁的程序,当IO负载达到满时,无论增加在大的并发量也无济于事,可能的解决方法为增加磁盘分散来读写。另外要防止多线程大量并发读写磁盘这样会导致比单线程更慢。通常一个线程读,一个线程写,就足够了。增加线程一般不增加性能。
四、使用sar监控
如果系统没有安装sar,那么可以通过 yum install sysstat 安装,ubuntu安装 sudo apt-get install sysstat
sar命令格式为,sar [opt ] [interval] [count] [-o filename] [-f filename]
opt表示sar支持的各种类型监控信息;
interval表示多长时间显示一次;
count表示总共显示次数,若没有该字段则一直监控不停止;
-o filename表示将数据写入到文件中; sar -P -ALL 1 -o ./all_cpu.txt
-f filename表示从指定文件中读取数据;sar -f ./all_cpu.txt; sar -P ALL ./all_cpu.txt
1、监控CPU使用情况: sar -P ALL 1 (单独列出每个核心统计数据),
-P表示processor,后面可添加CPU列表也可以使用ALL表示所有,sar -P 0 1 #每秒显示第一个CPU的信息
11时06分28秒 CPU %user %nice %system %iowait %steal %idle
11时06分29秒 all 3.47 0.00 2.23 0.00 0.00 94.29
11时06分29秒 2.00 0.00 5.00 0.00 0.00 93.00
11时06分29秒 3.88 0.00 1.94 0.00 0.00 94.17
11时06分29秒 8.65 0.00 1.92 0.00 0.00 89.42
11时06分29秒 0.00 0.00 1.01 0.00 0.00 98.99
CPU all 表示统计信息为所有 CPU 的平均值。
%user 显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice 改变优先级的进程所占用 CPU 总时间的百分比。
%system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle 显示 CPU 空闲时间占用 CPU 总时间的百分比。
对nice值的补充说明,参考自:http://blog.csdn.net/longdel/article/details/7317511。
进程的优先级由 pr+nice 决定,nice取值在-20~19之间。一个进程的nice值越高,那么其所占用的CPU就越少(由于privelge值越高,优先级越小),所以叫做nice。系统为了动态调整进程的CPU时间,因此会修改进程的nice取值。进程的nice cpu时间就表示为:假如调整前时间片为100,调整后为150,那么就是150-100/total。那么把所有进程的nice cu加起来就是这里的 %nice了。进程的nice取值可以通过nice,renice函数来修改。
sar -u 1(显示所有CPU的统计信息)
-u 表示CPU
11时23分41秒 CPU %usr %nice %sys %iowait %steal %irq %soft %guest %idle
11时23分42秒 all 16.08 0.00 3.02 0.00 0.00 0.00 0.00 0.00 80.90
11时23分43秒 all 2.30 0.00 1.02 0.00 0.00 0.00 0.00 0.00 96.68
%irq 表示硬件中断服务时间
%soft 表示软件中断服务时间
2、磁盘IO统计信息:sar -d -p 1
-d 表示device显示每个块设备信息,-p表示以易读取方式显示DEV名称。
14时10分06秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14时10分07秒 dev8- 4.00 0.00 40.00 10.00 0.04 10.25 6.75 2.70
tps 每秒传输次数(多次逻辑请求可能被合并成一个IO请求,一次传输特定的大小);
rd_sec/s 每秒读取的散区个数(散区为512字节)
wr_sec/s 每秒写入的散区个数(散区为512字节)
avgrq-sz average-request-size读写操作平均大小(以散区计算),可通过wr_sec+rd_sec/tps,计算出该值为10
avgqu-sz average-queue-size设备请求队列的平均长度
await 平均完成请求的等待时间,毫秒,包括在队列中等待时间与设备服务时间
svctm service-time设备的平均服务时间,毫秒(sar指出该值不可靠)
%util 设备处于服务状态的百分比,当该值接近100%则表示该设备使用饱和
说明:1)util值如果长时间很高表示IO已经满负荷运行。
2)队列等待时间:await-svctm 该值大表示IO请求有大量时间处于队列中等待,也就是请求过多,可以考虑合并IO请求。
3)avgrq-sz 值可以看出对IO操作的数据大小,很小很频繁的IO操作将导致占用大量的设备随机寻址时间。
例子(10个线程,拷贝同一个100MB 文件,到不同的目标文件,每次读写10字节):
14时45分37秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14时45分38秒 sda 156.00 0.00 43504.00 278.87 52.84 338.72 4.59 71.60 14时45分38秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14时45分39秒 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 14时45分39秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14时45分40秒 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 14时45分40秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14时45分41秒 sda 12.00 0.00 208.00 17.33 0.14 12.00 9.67 11.60 例子(10个线程,拷贝同一个100MB 文件,到不同的目标文件,每次读写10K字节):
14时46分27秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14时46分28秒 sda 107.00 0.00 68312.00 638.43 74.46 660.79 9.35 100.00 14时46分28秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14时46分29秒 sda 84.00 0.00 64112.00 763.24 64.08 686.57 11.90 100.00 14时46分29秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
14时46分30秒 sda 104.00 0.00 75368.00 724.69 64.06 681.23 9.62 100.00 从上述两种方式读取文件方式:1)await后者明显比较大,表示大量的请求被放到queue中等待执行。2)svctm却没有明显变化,表示虽然每次磁盘读写较小,但是服务时间没有明显的差别。3)util后者100,可见前一种方式对磁盘的使用效率高。
类似命令:iostat
3、网络性能 sar -n DEV 1
-n表示network,
DEV表示显示网卡的统计信息,
EDEV表示显示网卡的失败信息,
NFS表示NFS客户端活动的统计,NFSD表示服务端活动的统计
SOCK表示IPV4使用的套接字数量信息(查看系统当前打开的套接字数量)
14时53分43秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
14时53分44秒 lo 2.02 2.02 0.19 0.19 0.00 0.00 0.00
14时53分44秒 em1 139.39 127.27 155.85 10.38 0.00 0.00 0.00
14时53分44秒 em2 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IFACE 接口名称
rxpck/s 每秒接收到的包个数 received
txpck/s 每秒发送的报个数 transmitted
rxkB/s 每秒接收的kB数
txkB/s 每秒发送的kB数
rxmcst/s 每秒接收到的广播包个数
说明:1)如何确定一个链路的带宽,由于链路带宽取决于两端网卡以及中间路由的带宽,因此在网络稳定的情况下使用scp拷贝大文件的方式查看每秒传输量,是比较可靠的方式。
2)可以使用dmesg | grep -i eth,来查看机器网卡的信息,如:Link is up at 100 Mbps, full duplex,则表示100Mb全双工,理论上上行下行都能达到100Mb,但是由于CPU,磁盘IO等原因实际上很难达到。
scp dest_3 root@10.0.0.1:/root/soft
dest_3 % 107MB .9MB/s :
表示每秒传输11.9MB,两端的带宽大致为100Mb
2)平均包大小,传输中如果包很小,很显然会影响传输效率,使用 rxkB/rxpck ; txkB/txpck 可以得到读与写的平均包大小。
类似命令:ifstat http://gael.roualland.free.fr/ifstat/ 可以查看到内容与sar -n 差不多; iftop http://www.ex-parrot.com/pdw/iftop/ 可以查看到具体某个IP使用的流量。
4、套接字使用量 cat /proc/net/sockstat; sar -n SOCK
sockets: used
TCP: inuse orphan tw alloc mem
UDP: inuse mem
UDPLITE: inuse
RAW: inuse
FRAG: inuse memory
sockets 表示套接字总使用量
tcp inuse 当前使用的tcp数量 orphan 无主(待关闭)数量 tw 处于timewait数量 alloc 已建立连接数 mem
UDP inuse 当前的UDP连接数 mem
参考自:http://www.cnblogs.com/jankie/archive/2013/01/30/2882441.html
附注:linux查看机器网卡参数:
ethtool eth0 查看速度等各种属性
lspci|grep -i ether 查看设备产商等
dmesg |grep -i eth 查看系统加载网卡时的信息
8、进程队列长度与平均负载 sar -q 1
-q 表示queue,表示系统的任务队列以及负载
关于负载其他查看方法:top、uptime、cat /proc/loadavg
16时52分49秒 runq-sz plist-sz ldavg- ldavg- ldavg- blocked
16时52分50秒 0.51 0.94 0.84
16时52分51秒 0.51 0.94 0.84
16时52分52秒 0.47 0.92 0.84
16时52分53秒 0.47 0.92 0.84
16时52分54秒 0.47 0.92 0.84
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-:最后1分钟的系统平均负载(System load average)
ldavg-:过去5分钟的系统平均负载
ldavg-:过去15分钟的系统平均负载
说明:1)关于负载的数值,0~cpu和数之间,如果四核则合理值为4.0;2)cpu核数查看,top 然后输入1;grep 'model name' /proc/cpuinfo;
grep 'processor' /proc/cpuinfo +1;
9、按照进程对资源占用进行排序
1)根据内存占用排序 top后使用M
2)根据CPU占用排序 top后使用P
3)根据IO使用进行排序
iotop: Iotop is a Python program with a top like UI used to show of behalf of which process is the I/O going on. It requires Python ≥ 2.7 and a Linux kernel ≥ 2.6.20 with the TASK_DELAY_ACCT CONFIG_TASKSTATS, TASK_IO_ACCOUNTING and CONFIG_VM_EVENT_COUNTERS options on.
http://www.cnblogs.com/jankie/archive/2013/01/30/2882441.html
http://os.51cto.com/art/201005/200672_all.htm
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858923.html
Linux-Web应用服务性能测试初探的更多相关文章
- Android 性能测试初探(四)
书接上文 Android 性能测试初探(三) 自从 cpu及内存后,GPU 这个词对于 PC 性能测试者也不陌生了,什么 3Dmax,安兔兔之类的第三方软件让 GPU 在移动端性能测试领域都知晓,但对 ...
- 《Android 性能测试初探》
移动测试站点推荐: https://testerhome.com/ 专项相关帖子推荐: <Android 性能测试初探>合集 移动无线应用专项测试浅谈 公开课: [腾讯课堂]Testerh ...
- Kali Linux Web 渗透测试视频教—第二十课-利用kali linux光盘或者usb启动盘破解windows密码
Kali Linux Web 渗透测试视频教—第二十课-利用kali linux光盘或者usb启动盘破解windows密码 文/玄魂 目录 Kali Linux Web 渗透测试视频教—第二十课-利用 ...
- Kali Linux Web 渗透测试— 第二十课-metasploit.meterpreter
Kali Linux Web 渗透测试— 第二十课-metasploit.meterpreter 原文链接:http://www.xuanhun521.com/Blog/7fc11b7a-b6cb-4 ...
- KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础
原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...
- KALI LINUX WEB 渗透测试视频教程—第16课 BEEF基本使用
Kali Linux Web 渗透测试视频教程—第16课 BeEF基本使用 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第16课 BeEF基本使用............... ...
- Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击
Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击................... ...
- Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗、嗅探、dns欺骗、session劫持
Kali Linux Web 渗透测试视频教程—第十四课-arp欺骗.嗅探.dns欺骗.session劫持 文/玄魂 目录 Kali Linux Web 渗透测试—第十四课-arp欺骗.嗅探.dns欺 ...
- Kali Linux Web 渗透测试视频教程— 第十三课-密码破解
Kali Linux Web 渗透测试— 第十三课-密码破解 文/玄魂 目录 Kali Linux Web 渗透测试— 第十三课-密码破解............................... ...
随机推荐
- HowTo: Xen 4.1.3 Windows 8 HVM domU with Intel HD4000 VGA Passthrough on Debian Wheezy
http://linux-bsd-sharing.blogspot.com/2012/10/howto-xen-413-windows-8-hvm-domu-with.html Update 05/0 ...
- IPP库下FFT的基本实现
首先感谢韩昊同学,他的傅里叶分析入门给我们对数学公式不熟悉的人了解傅里叶算法打开了一扇窗户,其原文发表于知乎:https://zhuanlan.zhihu.com/p/19763358 在了解其基本原 ...
- Redis学习(2)—— 实例与注释说明[转]
import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import ...
- 如何让两个div并排显示
正常情况下两个div都是上下排版的,那么怎么让它们并排显示呢? 方法一:都左浮动float:left; 方法二:一个左浮动,一个右浮动 方法三:给两个div都设置display:inline属性,但两 ...
- PLSA算法(转)
文章分类:综合技术 1. 引子 Bag-of-Words 模型是NLP和IR领域中的一个基本假设.在这个模型中,一个文档(document)被表示为一组单词(word/term)的无序组合,而忽略了语 ...
- C# chart.DataManipulator.FinancialFormula()公式的使用 线性回归预测方法
最近翻阅资料,找到 chart.DataManipulator.FinancialFormula()公式的使用,打开另一扇未曾了解的窗,供大家分享一下. 一 DataManipulator类 运行时, ...
- Spring框架总结(七)
Spring代理模式:名词解释: 代理是一种开发的设计模式,用途:提供了对目标对象另外的访问方式,及通过对代理访问目标对象. 优势: 可以在目标对象实现的基础上,增强额外的功能操作,(扩展目标对象的功 ...
- js总结33 :javascript-DOM节点属性
1 设置节点属性三个方法: 获取:getAttribute(名称) 设置:setAttribute(名称, 值) 删除:removeAttribute(名称) 举个例子: <!DOCTYPE h ...
- CAD&CG GDC 2018大会论文录用名单
Section 1 增强现实与图形学: 报告时间:2018-8-25 14:00-15:30 报告地点:会议室1 P000009 基于增强现实的产品质量信息传递方法 P000104 重彩画的风格转移 ...
- Django进阶(转载)
Django进阶地址 来自为知笔记(Wiz)