最近在做一个功能模块,目前功能上已经实现,但是性能暂时没有做过测试。

我的功能主要是接收udp消息,并将udp消息进行封装处理,发送到后端处理模块进行处理。

简单写一个小的udp客户端程序,去模拟压力测试。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>int main(int argc, char **argv)
{if (argc != 3){printf("Usage: %s $SUM $RATE\n", argv[0]);exit(1);}struct sockaddr_in server_addr;memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");server_addr.sin_port = htons(4020);int fd = socket(AF_INET, SOCK_DGRAM, 0);if (fd < 0){printf("create socket failed: %s\n", strerror(errno));exit(2);}struct timeval start;gettimeofday(&start, NULL);unsigned long ustart = start.tv_sec*1000000 + start.tv_usec;usleep(1);struct timeval now;memset(&now, 0, sizeof(struct timeval));unsigned long unow = 0;int totalUdp = atoi(argv[1]);int maxRate = atoi(argv[2]); // capsprintf("totalUdp: %d\n", totalUdp);printf("maxRate: %d\n", maxRate);int sum = 0;double rate = 0.0;char buff[1024*16] = ""; while (sum < totalUdp){gettimeofday(&now, NULL);unow = now.tv_sec*1000000 + now.tv_usec;rate = sum/(unow - ustart + 0.0);if (maxRate > 0 && rate * 1000000 > maxRate){usleep(1000); // sleep 0.001 secondcontinue;}sprintf(buff, "%d %d %d\0", now.tv_sec, now.tv_usec, sum);int res = sendto(fd, buff, strlen(buff), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));if (res < 0){printf("sendto error: %s\n", strerror(errno));exit(3);}// printf("send %d bytes ok\n", res);sum ++;}close(fd);printf("finish %d in %.3f, rate: %.f\n", sum, (unow-ustart+0.0)/1000000, rate*1000000);exit(0);
}

编码 && 运行:

[udpdriver@eb6347 test]$ gcc -o main main.c
[udpdriver@eb6347 test]$ ./main
Usage: ./main $SUM $RATE
[udpdriver@eb6347 test]$ ./main 10000 1000
totalUdp: 10000
maxRate: 1000
finish 10000 in 9.999, rate: 1000

程序原理很简单:

在未达到指定的发送消息数量时,不断去计算从开始发送时刻到当前发送时刻的平均发送速率,如果当前发送平均速率小于你指定的最大发送速率,则可以继续发送,否则暂停一小段时间,然后继续尝试发送。

例如:我要测试20k的消息总量,2kcaps,如何运行?

./main 20000 2000

实际将在约10s后完成压力测试(发送)。

我们可以设定不同的模块配置参数(例如修改udp接收缓冲区的大小),以及每条udp消息的长度,每秒发送的caps量来做出一组性能测试结果,用以反映我们模块的性能。

原文链接:https://blog.csdn.net/test1280/article/details/79733708

C实现的UDP压力测试工具相关推荐

  1. Memcache压力测试工具 -- memslap

    memslap是libmemcached自带的memcached性能测试工具,所以使用memslap进行测试时,只需要默认安装libmemcached即可. 安装上文<Memcache客户端库l ...

  2. ab压力测试工具linux,【Linux】ApacheBench(ab)压力测试工具

    AB的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比 ...

  3. WebBench压力测试工具(详细源码注释+分析)

    WebBench压力测试工具(详细源码注释+分析) 本文适合人群:对WebBench实现感兴趣的人 WebBench原理: Linux下使用的服务器压力测试工具,利用fork建立多个子进程,每个子进程 ...

  4. linux下的CPU、内存、IO、网络的压力测试工具与方法

    一.CPU压力测试工具Super Pi forLinux Super PI是利用CPU的浮点运算能力来计算出π(圆周率),所以目前普遍被超频玩家用做测试系统稳定性和测试CPU计算完后特定位数圆周率所需 ...

  5. 网站压力测试工具webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 引用 wget htt ...

  6. 微软压力测试工具 web application stress

    WEB服务器的压力测试工具~ 115808 2009年8月1日 lbimba 铜牌会员 这里给广大的煤油推荐一个web网站压力测试工具.它可以用来模拟多个用户操作网站,在程序投入运行时,可以用它来进行 ...

  7. python的web压力测试工具-pylot安装使用

    pylot是python编写的一款web压力测试工具.使用比较简单.而且测试结果相对稳定. 这里不得不鄙视一下apache 的ab测试,那结果真是让人蛋疼,同样的url,测试结果飘忽不定,看得人心惊肉 ...

  8. benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明

    关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...

  9. Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

    一.http_load程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会 ...

  10. 压力测试工具ab 及 centos下单独安装方法

    为什么80%的码农都做不了架构师?>>>    压力测试工具Ab简介 Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab ...

最新文章

  1. android用户界面之TabHost教程实例汇总
  2. 【darknet速成】Darknet图像分类从模型自定义到测试
  3. Angular中怎样通过localStorage实现数据持久化-实现存储搜索历史为例
  4. 通过标题区别自己的发帖
  5. 图的遍历DFS与BFS(邻接表)
  6. java guava 使用_java – 使用Guava从属性文件创建对象
  7. CXF学习(2) helloworld
  8. java编程求最小公约数_java求最大公约数与最小公倍数
  9. python复数的实部和虚部都是整数嘛_Python学习笔记:从入门到放弃(2)基本语法...
  10. php写两个数相加方法_【PHP学习】实现两个n位二进制整数相加
  11. anaconda 创建,激活,退出,删除环境
  12. LeetCode经典算法精解-字符串编辑距离
  13. 4. Browser 对象 - Navigator 对象(2)
  14. 面试官:如何设计出骚气的秒杀系统?
  15. 零基础学启发式算法(4)-模拟退火 (Simulated Annealing)
  16. JAVA自行车类代码_你好 请问你还有 java Web编写的自行车租赁管理系统源代码么...
  17. 平衡小车——编码器原理及其使用
  18. 苹果8a1660是什么版本_苹果a1780是什么版本
  19. 从0到1哥斯拉项目反编译初步搭建
  20. Mysqldump备份报错1449

热门文章

  1. viper4android 6.0脉冲,【详解】v4a音效脉冲样本
  2. VC2012 学习记录
  3. Qt moc文件缺少“stdafx.h”异常
  4. Windows如何查看.db数据库文件
  5. [uboot 移植]uboot 基础知识
  6. 《WEB全栈工程师的自我修养》--索引笔记
  7. 大地坐标高斯/UTM投影计算工具
  8. smith圆图重要性_smith圆图的理解
  9. VScode安装离线插件
  10. dlibdotnet 人脸相似度源代码_C#开发的人脸左右相似度计算软件源码分析