免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5148 | 回复: 15
打印 上一主题 下一主题

[C] 测试服务器对一个连接的最大响应量和时延,大家帮忙看看!!! [复制链接]

论坛徽章:
1
白羊座
日期:2013-08-20 17:40:23
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-25 10:30 |只看该作者 |倒序浏览
服务器是回射服务器,现在客户端只建一个socket连服务器,
想测试一下服务器的最大tps和平均时延,只测一个socket的情况,
我现在的客服端是这样做的:
开一个线程专门读数据,主线程专门发数据,自己指定发多少
条就退出。
请教一下,这样测对不对呢,怎样测才比较好呢,大家帮忙看下啊,感谢。

发送数据的结构体:
typedef struct
{
        struct timeval begin;
        struct timeval end;
        char buf[2048];
}data_t;


main函数:
    time_t begin = time(NULL);

    pthread_t sender;
    pthread_create(&sender, NULL, read_data, &con_fd);//同一个套接字,con_fd
    send_data(con_fd);
    pthread_join(sender, NULL);

    time_t end = time(NULL);
    unsigned int cost = end - begin;


线程读函数:
void* read_data(void *arg)
{   
    int fd = *(int *)arg;
    int ret = 0;
    data_t buf_read;
    int cost = 0;

    fd_set readset;
    fd_set set;

    FD_ZERO(&readset);
    FD_SET(fd,&readset);

    while(1)
    {
        set = readset;
        ret = select(fd+1, &set, NULL, NULL, NULL);
        if(ret <= 0) continue;

        memset(&buf_read, 0, sizeof(buf_read));
        ret = my_write(fd, (char *)&buf_read, sizeof(data_t));   //循环读完
        if(ret < 0)
        {
            fails++;
            continue;
        }

        gettimeofday(&buf_read.end, NULL);
        cost = (buf_read.end.tv_sec - buf_read.begin.tv_sec)*1000000 + buf_read.end.tv_usec - buf_read.begin.tv_usec;

        if(cost >= 1000000) time_outs++;

        total_time += cost;

        if(++reads == sent_nums) return NULL;
    }
}
还有一个发送的函数,和读函数差不多了。

论坛徽章:
1
白羊座
日期:2013-08-20 17:40:23
2 [报告]
发表于 2013-03-25 11:14 |只看该作者
大侠们,指点一下啊。。。

论坛徽章:
1
白羊座
日期:2013-08-20 17:40:23
3 [报告]
发表于 2013-03-25 14:08 |只看该作者
为嘛没人呢。。。。。。

论坛徽章:
1
白羊座
日期:2013-08-20 17:40:23
4 [报告]
发表于 2013-03-25 16:36 |只看该作者
这样做对不对呢?

论坛徽章:
0
5 [报告]
发表于 2013-03-25 21:11 |只看该作者
先说你的程序可读性
pthread_t sender;
我觉得应该把sender改成reader,观众们容易看懂些。
再说测试,你这样的测试属于串行发消息才测试服务器程序,只能测出服务器的单条交易的平均处理时间。
不能测出服务器在高并发时的处理瓶颈和TPS

论坛徽章:
1
白羊座
日期:2013-08-20 17:40:23
6 [报告]
发表于 2013-03-26 09:58 |只看该作者
回复 5# Neptune_zx
多谢指正,之前我是先开个线程发数据,主线程读数据,不过这样好像有点问题,就改过了,
不过变量名忘改过了,测试模式应该怎样改才好呢,指点大概的思路。



   

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
7 [报告]
发表于 2013-03-26 11:26 |只看该作者
做法山寨, 应当先了解一下比较常规的做法.

论坛徽章:
1
白羊座
日期:2013-08-20 17:40:23
8 [报告]
发表于 2013-03-26 11:44 |只看该作者
回复 7# linux_c_py_php
就是不知道常规做法怎么弄的,才来问问啊。。。
哪能看看呢?


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-06-04 06:20:00
9 [报告]
发表于 2013-03-26 11:57 |只看该作者
不熟悉
友情顶贴~

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
10 [报告]
发表于 2013-03-26 12:27 |只看该作者
本帖最后由 yulihua49 于 2013-03-26 12:34 编辑
cgcym1234 发表于 2013-03-25 10:30
服务器是回射服务器,现在客户端只建一个socket连服务器,
想测试一下服务器的最大tps和平均时延,只测一个 ...

给你一个函数:
gettimeofday(),man一下,可以测到微秒级。
我用这个测得SDBC服务器的Echo响应时间:
strlen=3275,time=2
XWVUTSRQPONMLKJIHGFEDCBAZY..... PKG_LEN=3275,T_LEN=86,time=285微秒
本机,包长度3275,压缩后86字节,带有一个快速加密,耗时285微秒。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP