C/S架构,做成了伪B/S。性能测试过程中发现并发条件下存在比较严重的延时问题。某些几十K几百K的包,从服务端到客户端居然要走10s。
这只是一些偶然情况,在每个客户端的日志里,大概几百次交互中有一次,几率不高,但是一旦有,就是10s数量级的延迟。
第一步:Perfmon/Network Interface计数器
添加了Bytes Received/sec(简称R),Bytes Sent/sec(简称S), Current Bandwidth(简称CB)。 S计数器高一些,换算后最高3MB/s,CB计数器没有异常,始终显示网卡为100Mbps。测试同时打开的任务管理器的"网络使用率"输出和计数器大致相符。
第二布:Apach mod_status,相关脚本如下。由于是我个人测试,有些粗糙。
#mod_status LoadModule status_module modules/mod_status.so <IfModule status_module> <Location /server-status> SetHandler server-status Order deny,allow Allow from all </Location> ExtendedStatus On </IfModule>
IE浏览Apache的Status输出:
Total Accesses: 14930 Total kBytes: 116650 Uptime: 3539 ReqPerSec: 4.21871 BytesPerSec: 33752.4 BytesPerReq: 8000.64 BusyWorkers: 1 IdleWorkers: 199 Scoreboard: _____________________
Cygwin本机测试脚本:
#! /bin/sh while true; do curl http://serverIP:8080/server-status?auto | sed -n -e '/IdleWorkers/p' | cut -d : -f 2 >> log.txt echo 'Current IdleWorkers: ' cat log.txt | sort | head -n 1 sleep 3s done
上述脚本最小值127,看来默认的200工作线程都用不了。
#! /bin/sh while true; do curl http://ServerIP:8080/server-status?auto | tail -n 1 | cut -d : -f 2 | tr -d [.] >> worker.txt sleep 3s done
上述脚本输出片段如下:
KKWKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK WWWWWWWWKWWWWKKWWWKWWWWKWKWKKKWWKKWKKWWKKWKKWWWWKWWKKKKKKKKKKKKWWKKKKKKKKKKKKKKK WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
可以看出除了Client并发登录阶段Apache以接受(K)为主以外,其余基本都是以发送数据(W)为主。纵向的输出我没有分析,因为不知道怎么看结果,hoho~!
第三步:Sniffer监控服务端。未果,结果太专业,完全用不上...
第四步: HttpAnalyzer
悲剧啊,测试用客户机,win2003 32bit/8G开五个会话,HttpAnalyzer监视全局Session的IE进程,居然崩溃...
那好吧,只监视当前Session的...慢着,我只不过中途会重启IE而已,500多次交互它居然只给我抓到3次...
让我说什么好。
第五步:我已经把客户端的数据精简到不能再精简了,虽然这基本上不会有什么效果。所以,等2011年回来再接着搞吧。哪位达人给指一指路吧,我实在是迷路迷的厉害.
最后祝大家新年愉快吧。来年更上一层楼。