近期一个项目,客户要求进行高负荷測试;所谓高负荷測试时看系统在CPU占用或MEM占用率极高情况下的表现。
在第一轮測试时,我们通过在LINUX操作系统上,用压缩和解压缩的方法去占用CPU,这个方案有个弊端,就是比較耗时并且不可控。
在这种測试情况下,客户非常不惬意。提出了非常多的问题。
还要客户给了第二轮測试的机会,然后我就通过百度或谷歌,寻找高负荷測试的工具。结果一无所获。我后来想做为一个程序猿,能否够自己动手写一个这种程序呢?
通过分析原理,占用CPU,就是让CPU可劲的进行运算;占用MEM,就是申请内存BUFFER。 分析出这个原理后,接下来的事情,就简单了。
我设计的占用CPU的程序详细例如以下:
#include <stdlib.h> #include <stdio.h> #include <unistd.h> int main(int argc,char ** argv) { int looptimes; float a,b,c; int i; a = 1000000.0; b = 8765.0; i = 1; looptimes = atoi(argv[1]); while(1) { c = a / b; i ++; if((i % looptimes) == 0) { usleep(100); } } //printf("argc=%d ",argc); //printf("argv=%s ",*argv++); //printf("argv=%s ",*argv); //argc=2 //argv=./occu //argv=100 return 0; }
我设计的占用MEM的代码详细例如以下:
#include <stdlib.h> #include <stdio.h> #include <unistd.h> int main(int argc,char ** argv) { unsigned int initbytenum; void * buf; initbytenum = atoi(argv[1]); initbytenum = 1024 * 1024 * initbytenum; printf("initbytenum=%ld ",initbytenum); buf = malloc(initbytenum); memset(buf,0, initbytenum); int a; a=0; int t; t =1; while(a!=9) { if(t % 100 == 0) { scanf("%d",&a); t =1; } t++; buf = malloc(initbytenum); memset(buf,0, initbytenum); } //printf("argc=%d ",argc); //printf("argv=%s ",*argv++); //printf("argv=%s ",*argv); //argc=2 //argv=./occu //argv=100 return 0; }