Lorita 发表于 2009-6-12 16:31:28

贴一张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 编辑 ]

云层 发表于 2009-6-12 17:38:04

额。。就给一个图要分析问题,还真有些难度了,你可以检查一下这些计数器,有没有明显的瓶颈

我只是比较纳闷为啥CPU波动的这么厉害

Lorita 发表于 2009-6-12 18:03:56

我就是看不懂计数器的图,哪些是正常,哪些是不正常,,才贴出来请教的,那我还要贴哪些图?你才能给我分析分析。。

森林一木 发表于 2009-6-13 08:18:04

响应时间、网页细分图(如果是b/s结构的),吞吐量、点击数等等,都贴出来。

Lorita 发表于 2009-6-15 10:35:01

回复 4# 的帖子

你要的我都贴出来啦。。小木。

Fin 发表于 2009-6-15 11:11:31

你看一下 search_flight_datetable 这个 事物,有点问题吧..(不敢断定啊..)
响应时间越来越大了..

Fin 发表于 2009-6-15 11:17:47

还有,这个函数我总觉得怪怪的, 感觉有问题..
既然都return 0;了,说明到这里已经跳出函数了.那么
free(response);
free(check);
就自然不会被释放了...这两句代码走不到了..

但是你的 response 的定义我也没看明白.. 难道是 全局变量?

Lorita 发表于 2009-6-15 11:39:08

回复 7# 的帖子

我之前都是放在return前面的,当时在场景中运行的时候,总是出现内存访问不到。后来我问一个朋友,他说让我放在return后面,就再也没问题了。response我是用来对结果做判断的,是从服务器返回的xml中返回的字段和我预期的做比较,其实就相当与检查点的。我做性能测试不久,对于这样的事情不知该从哪些方面去分析。你帮我看看,要不加我msn吧。。yhl_1103@163.com

oscarli 发表于 2009-6-15 12:01:23

看了一下你的图,在目前这个拼发数应该不是你的服务器有瓶颈,应该与你设置你的运行场景有关。
1.cpu排队应该很少,从这些图上看,不是十分确定cpu的消耗,因为平均值很低。
2.内存,磁盘,线程都很正常,

问题:
1.在运行16分钟时,点击率,吞吐量都很低,而此时cpu开始有些排队,所以此时响应时间比较大,为什么会这样?此时在处理数据库??

2.你代码的服务器的地址与你图片显示地址不一致,确定是服务器上数据图片??

Lorita 发表于 2009-6-15 12:26:51

回复 9# 的帖子

与我设置的运行场景有关是什么意思?是不是我发请求太快了?
一:在五分钟的时候,用户已经加载到120人,这个结果是我把出发和到达城市参数化了的,而每次查询结果数据库中都有十五分钟的缓存的。服务器没问题的话,那响应时间就一定是出在数据库上吗?
二:我刚贴的脚本是后来我又连了另一台机器看效果了,此处的结果还是2.73的,没错;

[ 本帖最后由 Lorita 于 2009-6-15 13:51 编辑 ]

Fin 发表于 2009-6-15 12:39:41

我觉得你先一点点解决问题,然后再考虑场景,如果是脚本的问题话,场景也会受影响的.
1.你的AP 应用服务器 是在什么环境下 ? 是WINDOWS 还是 LINUX UNIX AIX..
2. 放在return 0 ; 前面报错的原因是 你这个函数中没有对应的 response 和 check 变量的声明. 在这个函数里所用的是外部变量, 那么自然不能在 这个函数里面 free 掉了, 可以把这两句放在这个函数外面free . (例如主函数的return 0 上面..)
向你这样放函数里面其实这个脚本无论怎么执行都执行不到这两句... 自然没有释放你的内存,循环使用calloc 不是不可以但是会非常慢的,也很可能出现溢出..等等

Lorita 发表于 2009-6-15 13:51:01

回复 11# 的帖子

你说的对。我刚问开发了,他也说free()在return 后面就执行不到了;
我们现在的服务器是XP的,现在我测试的程序是要拿到交行再做测试的;
你说的response和check 我当作全局变量已经在首部定义了,此处的脚本只是一部分,所以你没看见变量定义;
那我要是不用calloc,用什么做判断呢?

大漠飞鹰 发表于 2009-6-15 16:48:47

你分析的方式和方法不对。
如果认为事务响应时间太长了,应该先分析时间具体耗费到哪里去了,然后再分析什么原因引起了时间过长。

大漠飞鹰 发表于 2009-6-15 16:55:50

你可以通过网络细分时间查到。

几个注意点:
1、你的第一张图中没有将网络流量加入。
2、数据库服务器是否和web服务器是同一台,注意要全面监控。
3、一般来说,常见瓶颈是cpu和网络流量,特别是你这类查询,一般都是数据库的cpu。

Fin 发表于 2009-6-15 16:58:17

把BOSS都引来了...

Corelli 发表于 2009-6-15 17:10:14

1、从你给的数据(太少了)看,你的资源使用情况正常到很反常。
2、就如大漠飞鹰说的,你应该分段跟一下具体的时间消耗。
3、从直觉上说,你的问题很可能出在数据库查询上,建议查一下索引加了没有,还有你的分页方式。

leey 发表于 2009-6-15 18:00:35

response=(char *)calloc(1000,sizeof(char));

声明个变量为什么要搞的上面这么复杂,声明一个字符串不就行了,根本不用考虑释放内存的问题了。:lol

Lorita 发表于 2009-6-16 10:24:36

回复 16# 的帖子

怎么分段跟一下具体的时间消耗。。我很想知道。。是在场景中有这个计数器吗

Lorita 发表于 2009-6-16 10:59:12

回复 14# 的帖子

1.我们的数据库用的是DB2.web服务器是websphere.是放在一台机器上的,是选择datebase serverResource Graphs 中的DB2对数据库进行监控吗?然后就是选择Web ApplicationServerGraphs中的 Websphere Application Server进行监控?这是不是就是对数据库和web服务器分开进行监控了。。?
2.网络流量加入是要加network interface吗?我已经加了吞吐量的图了,不也是指的网络流量吗?
3.昨天开发那边在我做压力的时候,观察程序,然后说是apache的原因导致响应时间变长。。

Lorita 发表于 2009-6-16 11:01:34

回复 17# 的帖子

不分配内存怎么能往变量里传数据呢?会报错的哈。。
页: [1] 2
查看完整版本: 贴一张LR对服务器的监控图。。请大虾们进来分析下。。多谢。。