壓力測試模擬程式(C實現)

2021-08-17 19:27:14 字數 2286 閱讀 7300

最近在做乙個功能模組,目前功能上已經實現,但是效能暫時沒有做過測試。

我的功能主要是接收udp訊息,並將udp訊息進行封裝處理,傳送到後端處理模組進行處理。

簡單寫乙個小的udp客戶端程式,去模擬壓力測試。

#include 

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char **argv)

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)

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]); // caps

printf("totaludp: %d\n", totaludp);

printf("maxrate: %d\n", maxrate);

int sum = 0;

double rate = 0.0;

char buff[1024*16] = "";

while (sum < totaludp)

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("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

in9.999, rate:

1000

程式原理很簡單:

在未達到指定的傳送訊息數量時,不斷去計算從開始傳送時刻當前傳送時刻平均傳送速率,如果當前傳送平均速率小於你指定的最大傳送速率,則可以繼續傳送,否則暫停一小段時間,然後繼續嘗試傳送。

例如:我要測試20k的訊息總量,2kcaps,如何執行?

./main 20000 2000
實際將在約10s後完成壓力測試(傳送)。

我們可以設定不同的模組配置引數(例如修改udp接收緩衝區的大小),以及每條udp訊息的長度,每秒傳送的caps量來做出一組效能測試結果,用以反映我們模組的效能。

程式壓力測試軟體

由於一些原因要進行一些程式 的壓力測試,webbench 和 apache自帶的一款外掛程式ab webbench可以測試get,head等請求,但不支援post請求,由於我正好是post請求測試,所以只好捨棄它了,改用了apache自帶的外掛程式ab apache benchmark 這個外掛程式...

C 實現伺服器壓力測試框架

c 實現伺服器壓力測試框架 flyfish 2015 3 9 模擬大量客戶端對伺服器進行壓力測試框架 標頭檔案 pragma once include include include include include class csession public boost enable shared ...

Jmeter實現壓力測試 多併發測試

一 jmeter home 例 d apache jmeter 4.0 d apache jmeter 4.0 lib ext apachejmeter core.jar jmeter home lib jorphan.jar jmeter home lib logkit 2.0.jar 四 進入j...