使用siege进行乱序压力测试
web压力测试,之前用过autobench和ab,但是都不是进行乱序测试的,之后看公司wiki发现有人用siege进行乱序测试。
这个东西安装和使用很简单,主要步骤如下
1 | wget ftp://ftp.joedog.org/pub/siege/siege-latest.tar.gz cd siege* ./configure make make install siege -c 1000 -r 100 -i -b -f url.txt |
web压力测试,之前用过autobench和ab,但是都不是进行乱序测试的,之后看公司wiki发现有人用siege进行乱序测试。
这个东西安装和使用很简单,主要步骤如下
1 | wget ftp://ftp.joedog.org/pub/siege/siege-latest.tar.gz cd siege* ./configure make make install siege -c 1000 -r 100 -i -b -f url.txt |
这本书是日本人安不司写的,他可是算做日本添加剂之神。
但是看了之后感触最深的并不是添加剂相关的内容,而是其它方面的感触却挺深。
食品添加剂,这个东西以前是肯定是没有的,而是工业时代的产物,是为了方便进行量产,同时作为消费者也有责任,总是喜欢挑选便宜而且看着又好看的了。所以很多制造商为了这些目的就拼命朝这方面努力。
而一旦让孩子知道食物得来的那么容易,那就不会珍惜。很多东西都是这样的,你一旦知道太容易的得到它,那就不会太在乎的。
作者说的那个事情很真实,因为我也经历过这样的事情。当你跟一只小鹅一起长大,突然有一天你父母把小鹅给杀了,做了吃了。我想这个时候你肯定会很珍惜。也许你或许都不会吃。而如果你就加点添加剂就能得到肉的味道,那你会怎么看待呢?
而我想作者其实最想表达的就是这个意思。好了,还是说说不能吃哪些添加剂吧。原理很容易:只要你自己厨房里没有的就得注意了。当然在国内的话一般都会特别标注为添加剂。
添加剂最不好的就是安赛蜜和阿斯巴甜,这2个是作为甜味剂使用的,甜味是蔗糖的2000倍,而价格才是蔗糖的3倍。所以这种是完全不应该添加的。而且据说阿斯巴甜和安赛蜜会导致偏头痛,这2个都在欧洲杯禁用了。而美国也禁用了安赛蜜,而国内还没有禁止。山梨酸和山梨酸钾,这几个都是调酸味的,而且是完全化学合成,所以千万别有。还有亚硝酸钠,各种着色剂,各种BHT,BHA,OPP,TBZ。
而作者认为必不可少的添加剂,对人也没有危害的有:苏打,发酵粉,盐卤,氢氧化钙,琼脂和明胶。
而作为我们消费者来说,不光买东西要看生产日期和保质期,还得特别留意配料表。也不要尽找便宜的。有的时候你吃了添加剂的你再吃自然的就感觉自然的东西不怎么好吃,其实我们都被添加剂给害了我们的味觉。
##############################
Best regards
Timo Seven
(http://twitter.com/twitter) UNIX System Admin & MySQL DBA
其实现在我这本书只看了一半,但是有些想法我觉得还是得记录下来。
我一直是做系统运维的,作者应该是开发出身。书的第二章和第三章主要是讲网络 传输和服务器并发处理能力。
虽然这2部分离非常专业还是差的比较远,但是我觉得作者分析的思路还是很不错
的。普通的系统运维人员一般处理问题就是man一下或者google一下,翻翻WIKI,
查查mail list。但是书的作者因为是开发人员,所以他的视角从一开始就是源 码,系统函数来判断。
其实这样做是非常正确的我觉得,毕竟所有服务器软件最终都是调用系统函数,而 Linux的优势不就是开放源码呀。
其实刚开始这种分析方法帮我解决了几个nginx的问题,首先是epoll,这个I/O模
型到底有哪些优势,为什么会产生epoll,它主要解决了哪些问题,而作者关于那 个面馆的比喻也非常不错,很形象。
另外一个问题是sendfile()方法,启用这个和不启用的区别在哪里? 而作者通过
strace工具分析也很不错。可以抓取到各个系统函数的调用时间和次数。而通过
strace分析后发现使用sendfile()方法后write()方法就没有了,而write()方法就 是把文件从用户空间往内核空间中进行写。
另外一个是到底开多少nginx进程好呢? 这个在apache中是不需要配置的,它会自
己根据链接情况增加和减少。nginx进程太少可能就会让其它cpu闲置着,而开启太
多还会导致频繁的上下文切换。虽然这些时间对于1秒种来说是非常微小的,但是 累计起来就大了。
看到一半为什么要写读后感主要是觉得以后排除问题,特别是性能方面的问题有了
全新的解决思路,而这个思路就导致了我必须看下linux内核的源码以及系统软件 的源码,当然wiki还是必须要参考的。
##############################
Best regards
Timo Seven
() UNIX System Admin & MySQL DBA
上个月老婆办了一个招商银行信用卡和卡,说是只要一次消费满288就可以送2张电影票。
下面这个网址是招商银行信用卡对于这个活动的具体说明。
http://www.cardcmb.com/play/others_movie_1.shtml?WT.mc_id=N371400101006250
可老实说这种规定基本属于银行为了规避自己责任的规定,而对于具体如何换票没有特别的说明。
从这里我实在不知道指定电影院是哪里? 指定到密云难道大家也去吗? 而且什么叫以实际为准?
为了确认这个问题,老婆直接播了招行信用卡的4008205555电话。而且还拨了3次。但是却得到不同的答案。
由于工作需要,需要用到nginx的很多特性,但是每个层次需要做不同的功能。虽然下面这个日志配置文件可以很好的运行。可我就跟郭欣在《构建高性能web站点》中说的,我还没弄清楚这些日志配置之后的原理。
测试环境
1. 10.1.41.81 client
2. 10.10.72.148 proxy
3. 10.10.72.219 cache
4. 10.10.72.221 real server
日志设置的需求
1. 日志设置的结果需要在所有节点上知道它的上一级IP和用户IP,这样可以方便查找问题 2. 日志设置的第二个目的是在proxy和cache都加了response time和request time 3. 在cache层的日志增加了cache的命中结果,有MISS,EXPIRED,HIT等5种不同状态 4. 在源站加入了gzip的压缩比
5. msec是表示用毫秒表示当前写入日志的时间
意外发现
今天就对keepalived进行了自定义脚本的测试。
先是定义一个vrrp_script
脚本名字,指定测试的内容。也可以自定义脚本,设定执行时间。然后在vrrp_instance中调用就可以了。这样一旦出现无法连接VIP就会自动漂移到其它机器上。
今日还顺便测试了下当2个BACKUP的priority相同,master失效的结果,结果发现VIP会同时漂移到这2台机器,而且你用arping的时候会得到2个mca地址,这是非常危险的,所以我们在一个多播组内千万要设置不同的priority.
同时我们在我昨日的blog中老外写的那个监控脚本有关于weight值的设定,这个我自己测试上加了后发现监控就不生效了,我把80口的nginx直接关了也没有实现VIP漂移。关于这个问题以及发信给作者了,现在还在等回复,官方文档找不到,例子中发现weight有-2,-3,-4,2各种不同,实在是不明白。我自己也没看到直接看源码的程度,还是直接问问得了。
vrrp_script chk_http_port { script "/tcp/127.0.0.1/80" # 连接本机80端口,正常就退出,无法连接就报错 interval 1 # 每秒连接一次 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 smtp_alert authentication { auth_type PASS auth_pass hdtv } virtual_ipaddress { 10.1.41.141 } track_interface { eth0 #加入网卡部分监控,要实现这个功能也可以不加 } track_script { chk_http_port #上面的vrrp_script的名字 } }
###########################################
keepalived既可以配合lvs使用,也可以单独使用,所以它的配置文件分为如下几个部分:
Global Configuration
Global definitions
Static routes/addresses
Vrrpd Configuration
VRRP synchronization group(s)
VRRP instance(s)
Lvs Configuration
Virtual server group(s)
Virtual server(s)
这次由于主要用到vrrp instance,所以重点对配置文件这个部分进行解读
下面是对这个配置的解释
state MASTER|BACKUP #如果不指定Master或者BACKUP,那priority最高的就是master interface eth0 #监听的实际网口 virtual_router_id 51 #组播ID,通过224.0.0.18可以监听到现在已经存在的VRRP ID,最好不要跟现有ID冲突 priority 100 #权重为100,权重数字越大就越高 advert_int 1 #发送组播包的间隔时间,默认为1秒 smtp_alert #发送邮件报警 authentication { auth_type PASS auth_pass hdtv } #这个是验证类型为PASS(明文),密码为hdtv。验证类型也可以选择IPSEC,但是官方是不推荐的 virtual_ipaddress { 10.1.41.141 } #虚拟IP为10.1.41.141 #############下面这些是文档中存在,但是在上面没有用到的############################# dont_track_primary #忽略网卡错误 track_interface { eth0 eth1 } #监控eth0和eth1这2块网卡的状态 mcast_src_ip #使用这个地址作为多播包的源IP,而不是使用interface eth0上的IP lvs_sync_daemon_interface eth1 #绑定eth1作为lvs同步的 garp_master_delay 2 #master和slave漂移时间改为2秒,默认位5秒,怪不得我昨天发现每次都是5秒才转移 virtual_ipaddress { / brd dev scope label 192.168.200.17/24 dev eth1 192.168.200.18/24 dev eth2 label eth2:1 } #vip可以写成整个网段和某块网卡上的所有IP virtual_ipaddress_excluded { / brd dev scope / brd dev scope ... } #排除哪些IP virtual_routes { src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1 192.168.110.0/24 via 192.168.200.254 dev eth1 192.168.111.0/24 dev eth2 192.168.112.0/24 via 192.168.100.254 } #当状态切换的时候会增加和删除路由,格式如src \[to\] / via|gw dev scope tab nopreempt #这个参数是用来,当master当掉,slave接替原来的master作为master后,这个时候当master重新起来后,有了这个参数后原来的slave就不会自动再自动切换为slave,而是继续作为master preempt_delay 300 #接上面那个参数,这个表示,只有在老的master重新正常300秒后,老的master才会切换为master,这个参数范围是0-1000,默认为0 notify_master | notify_backup | notify_fault | notify | smtp_alert #各种报警方式,可以定义具体的内容来达到不同的报警信息。
上面这些是官方的配置文件,下面这些是放狗搜索出来的其它配置,主要是为了做服务状态的检测,不然keepalived只能看网口有没有down掉再进行迁移,那样就要另外写其它的监控脚本来达到当服务挂掉后就把网口down掉。
下面这个是从邮件列表中抄袭而来,但是没有测试过,明日会找时间进行测试。下面这个是在1.1.13版本之后就实现了。
使用keepalived,是因为keepalvied的切换时间非常短,我在Linux用ping进行测试基本4秒左右就可以切换了,这样的时间还是可以接受的。
做LVS最讨厌的就是有太多的机器做LVS的时候会浪费一半的机器。这样其实是非常不合算的。
而heardbeat实在是太麻烦了。keepalived问题就是文档实在不怎么全,最新的完整文档还是2002年的。
在测试环境中我使用了3台机器,其中每台机器都是前端,但是又各自备了其它的其它2个前端。健康检查是通过实际IP进行的,而所有的服务端口都是跑在vip的端口上。vip也可以指定多个。
机器分配如下:
a: 10.1.41.90 vip 10.1.41.141
手术台,去年这个时候我们家球子已经下了手术台了,也正在康复期了。
虽然手术前我觉得应该问题不大,但是我还是很担心,毕竟只要是手术都是有风险,而且该死的医院还一定要签那个生死合同。
那天是我推着你进手术室的,同时也推进去其它的病人,大概有5个手术同时进行。
时间一分一秒的过去了,一会儿站着,一会儿坐着。焦急的等了没多久,居然麻醉师出来了,问我们术后用哪种麻药,汗,压根还没开始。
时间过去2个多小时了,小田子也开始着急起来了,终于主治医生出来了,手里拿着一个小不锈钢杯子,看到那个完整的瘤的时候我心总算落下了。我想我们家宝贝这个手术算是成功了。
接着医生把瘤送到楼下进行化验是良性还是恶性。但是一般来说这样能够完整切除的应该是良性的。当我看到其它恶性的,那真是太恐怖了,虽然不至于看了晕倒吧,可至少也反胃了。
医生又进去了,我想不就是缝缝伤口就可以出来了。可这一等又是2个多小时,我又开始紧张起来了,难道出什么意外了还。想到有些烂医生故意把纱布什么放人家肚子里还。难道这些破医生还出这样的问题?
分析基础是之前的shell分析脚本后的csv文件。但是我现在分析的是平均房价等等信息。由于之前那个csv文件格式不是特别好,所以没法使用二维数组这种方式来分析,所以只能简单的使用的一维数组。
分析的步骤基本如下,读入文件,然后根据关键用正则把每个数据读入到一个数组中,方法有点笨,因为原日志文件中有”平米”,’万元’,所以分2次读入的,不直到能否跟简单点,尝试过用group(),但是在compile中没法使用,所以大家有什么好的方法可以回复给我。
#!/usr/bin/python #coding:UTF-8 import re f = open('../../house/today.anjuke.2010-08-27.csv','r') totalDolar=\[\] totalPingmi=\[\] re_obj = re.compile(r"d+万元") re_num = re.compile(r"d+|d+.d+") re_ping = re.compile(r"d+平米|d.d+平米") for row in f: for match in re_obj.findall(row): for num in re_num.findall(match): totalDolar.append(int(num)) for pingmi in re_ping.findall(row): for pingmiNum in re_num.findall(pingmi): totalPingmi.append(int(pingmiNum)) #print totalPingmi print '共有房产: %d套' % len(totalDolar) print '所有房产总价: %d万元' % sum(totalDolar) avg=float(sum(totalDolar))/(len(totalDolar)) avgPingmi=float(sum(totalDolar))/(sum(totalPingmi)) print '每套均价:%f万元' % avg print '每平米均价:%f万元' % avgPingmi #break f.close()
###########################################
Best regards
Timo Seven
()
Linux System Admin & MySQL DBA