贴一张LR对服务器的监控图。。请大虾们进来分析下。。多谢。。
此图为对服务器的监控的图。。我一共设置了120个用户对航班时刻表进行查询,到达120人的时候,平均响应时间已经25S,这显然达不到我们的要求。
此图为我对服务器监控的结果,请帮忙分析一下,我们的瓶颈在哪里,要怎么样做调整。
下图是事务平均响应时间的图
下图是吞吐量
下图是每秒点击数的图
我们的软件是应用在手机上的,所以不能录制,我也仅仅是对航服的接口做压力,所以不存在网页细分图。
我的脚本如下:
/**********************************************************
* 事务名称:航班时刻表查询
* 事务业务功能: 查询条件,返回查询结果
* 测试对象:差旅系统
* HTTP请求方法:POST
*********************************************************/
flidht_datetable()
{
response=(char *)calloc(1000,sizeof(char));
check =(char *)calloc(1000,sizeof(char));
web_reg_save_param("response",
"LB=<value>",
"RB=</value>",
"search=all",
LAST);
lr_start_transaction("search_flight_datetable");
//lr_rendezvous("submitdata");
web_submit_data("search_flight_datetable",
"Action=http://192.168.2.73:9080/trip/doServer?",
"Method=POST",
"Mode=HTML",
ITEMDATA,
"Name=userCode","Value=AAAAAA",ENDITEM,//
"Name=userType","Value=AAAAAA",ENDITEM,//用户类型,这里用交行的doc
"Name=channel","Value=1",ENDITEM,//手机用户用mobile.网站用户是web
"Name=tranCode","Value=FT0003",ENDITEM,//交易代码
"Name=orgCity","Value={orgcity}",ENDITEM,// 三字码
"Name=dstCity","Value={dstcity}",ENDITEM,
"Name=departDate","Value=20090629",ENDITEM,
"Name=carrier","Value=ALL",ENDITEM,//航空公司
"Name=page","Value=1",ENDITEM,
"Name=pageSize","Value=9",ENDITEM,
LAST);
lr_end_transaction("search_flight_datetable",LR_AUTO);
lr_start_transaction("search_flight_datetable_check");
sprintf(response,"%s",lr_eval_string("{response}"));
check =(char *)strstr(response,"0");
if (!check) {
lr_set_transaction_status(LR_FAIL);
lr_log_message("返回数据是 [%s]",response);//
}
lr_end_transaction("search_flight_datetable_check",LR_AUTO);
return 0;
free(response);
free(check);
}
[ 本帖最后由 Lorita 于 2009-6-15 12:11 编辑 ] 额。。就给一个图要分析问题,还真有些难度了,你可以检查一下这些计数器,有没有明显的瓶颈
我只是比较纳闷为啥CPU波动的这么厉害 我就是看不懂计数器的图,哪些是正常,哪些是不正常,,才贴出来请教的,那我还要贴哪些图?你才能给我分析分析。。 响应时间、网页细分图(如果是b/s结构的),吞吐量、点击数等等,都贴出来。
回复 4# 的帖子
你要的我都贴出来啦。。小木。 你看一下 search_flight_datetable 这个 事物,有点问题吧..(不敢断定啊..)响应时间越来越大了.. 还有,这个函数我总觉得怪怪的, 感觉有问题..
既然都return 0;了,说明到这里已经跳出函数了.那么
free(response);
free(check);
就自然不会被释放了...这两句代码走不到了..
但是你的 response 的定义我也没看明白.. 难道是 全局变量?
回复 7# 的帖子
我之前都是放在return前面的,当时在场景中运行的时候,总是出现内存访问不到。后来我问一个朋友,他说让我放在return后面,就再也没问题了。response我是用来对结果做判断的,是从服务器返回的xml中返回的字段和我预期的做比较,其实就相当与检查点的。我做性能测试不久,对于这样的事情不知该从哪些方面去分析。你帮我看看,要不加我msn吧。。yhl_1103@163.com 看了一下你的图,在目前这个拼发数应该不是你的服务器有瓶颈,应该与你设置你的运行场景有关。1.cpu排队应该很少,从这些图上看,不是十分确定cpu的消耗,因为平均值很低。
2.内存,磁盘,线程都很正常,
问题:
1.在运行16分钟时,点击率,吞吐量都很低,而此时cpu开始有些排队,所以此时响应时间比较大,为什么会这样?此时在处理数据库??
2.你代码的服务器的地址与你图片显示地址不一致,确定是服务器上数据图片??
回复 9# 的帖子
与我设置的运行场景有关是什么意思?是不是我发请求太快了?一:在五分钟的时候,用户已经加载到120人,这个结果是我把出发和到达城市参数化了的,而每次查询结果数据库中都有十五分钟的缓存的。服务器没问题的话,那响应时间就一定是出在数据库上吗?
二:我刚贴的脚本是后来我又连了另一台机器看效果了,此处的结果还是2.73的,没错;
[ 本帖最后由 Lorita 于 2009-6-15 13:51 编辑 ] 我觉得你先一点点解决问题,然后再考虑场景,如果是脚本的问题话,场景也会受影响的.
1.你的AP 应用服务器 是在什么环境下 ? 是WINDOWS 还是 LINUX UNIX AIX..
2. 放在return 0 ; 前面报错的原因是 你这个函数中没有对应的 response 和 check 变量的声明. 在这个函数里所用的是外部变量, 那么自然不能在 这个函数里面 free 掉了, 可以把这两句放在这个函数外面free . (例如主函数的return 0 上面..)
向你这样放函数里面其实这个脚本无论怎么执行都执行不到这两句... 自然没有释放你的内存,循环使用calloc 不是不可以但是会非常慢的,也很可能出现溢出..等等
回复 11# 的帖子
你说的对。我刚问开发了,他也说free()在return 后面就执行不到了;我们现在的服务器是XP的,现在我测试的程序是要拿到交行再做测试的;
你说的response和check 我当作全局变量已经在首部定义了,此处的脚本只是一部分,所以你没看见变量定义;
那我要是不用calloc,用什么做判断呢? 你分析的方式和方法不对。
如果认为事务响应时间太长了,应该先分析时间具体耗费到哪里去了,然后再分析什么原因引起了时间过长。 你可以通过网络细分时间查到。
几个注意点:
1、你的第一张图中没有将网络流量加入。
2、数据库服务器是否和web服务器是同一台,注意要全面监控。
3、一般来说,常见瓶颈是cpu和网络流量,特别是你这类查询,一般都是数据库的cpu。 把BOSS都引来了... 1、从你给的数据(太少了)看,你的资源使用情况正常到很反常。
2、就如大漠飞鹰说的,你应该分段跟一下具体的时间消耗。
3、从直觉上说,你的问题很可能出在数据库查询上,建议查一下索引加了没有,还有你的分页方式。 response=(char *)calloc(1000,sizeof(char));
声明个变量为什么要搞的上面这么复杂,声明一个字符串不就行了,根本不用考虑释放内存的问题了。:lol
回复 16# 的帖子
怎么分段跟一下具体的时间消耗。。我很想知道。。是在场景中有这个计数器吗回复 14# 的帖子
1.我们的数据库用的是DB2.web服务器是websphere.是放在一台机器上的,是选择datebase serverResource Graphs 中的DB2对数据库进行监控吗?然后就是选择Web ApplicationServerGraphs中的 Websphere Application Server进行监控?这是不是就是对数据库和web服务器分开进行监控了。。?2.网络流量加入是要加network interface吗?我已经加了吞吐量的图了,不也是指的网络流量吗?
3.昨天开发那边在我做压力的时候,观察程序,然后说是apache的原因导致响应时间变长。。
回复 17# 的帖子
不分配内存怎么能往变量里传数据呢?会报错的哈。。
页:
[1]
2