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 渗透测试— 第十三课-密码破解............................... ...
随机推荐
- 二、SQL的生命周期
MySQL的sql语句由客户端发出,经过连接和权限验证后,最终达到服务器端,由服务器分配thread线程处理,之后就是要介绍的具体服务器端的thread线程是怎么处理每条sql语句的.[ 了解thre ...
- 对JS中函数的理解
函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...
- Sublime Text 2 安装配置插件
最近学习python,看网上推荐用sublime text2挺方便,就学习了一下对sublime text2 安装插件,先放在这里,以备以后查找 根据晚上资料修改,原文请看这里 Python的自动补全 ...
- mysql链接错误:2003 can't connect to mysql server on 10038
出现这个错误原因是端口号不是3306. 打开D:\Program Files\MySQL\MySQL Server 5.5 \my.ini文件,当然还有其他的.ini的文件: [client] ...
- vs2015发布网站至azure web应用服务
进入www.azure.cn管理门户 1,左下角新建web应用,实例如下,url设置为demo(有防止重名判断) 2,进入demo配置页(左侧web应用下点击demo) 3,demo首页,下载配置文件 ...
- Alpha冲刺(五)
Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1 柯奇豪 过去两天完成了哪些任务 基于ssm框架的前后端交互测试,结合微信小 ...
- 第二章第一个项目——关于mime
一句话就能解释清楚. MIME标注HTTP响应类型. 而后缀名标注文件类型. ---------分割线-------- http响应实质上只有数据,没有文件名. 举个例子吧. HTTP/1.1 200 ...
- java外观模式
外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口 ...
- Oracle觸發器調用procedure寄信
最近寫了一直Web Service給很多不同站的客戶端呼叫,并直接寄信通知程式中的異常. 直接在oracle中設置某張表的trigger(after insert),當有新的異常資料寫入時候,寄給相關 ...
- Partition--分区总结
1. 在SQL SERVER 2008 R2 SP2之前版本,对分区只支持到1000个分区,之后版本支持到15000个分区.2. 分区索引对齐并不要求索引和表使用同一分区方案,但要求两者使用的分区方案 ...