サーバの簡易高負荷暴力テスト

3385 ワード

1、[アナログ高CPU占有率]



Cプログラムの作成はCPUの空きスペースを占有する:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
 
int main() 
{ 
    pid_t pid; 
    while(1) 
    { 
        if((pid=fork()) <0) 
        continue; 
        else if(pid==0) 
        { 
            while(1) 
            { 
            } 
        } 
        else 
        continue; 
    } 
    return 0;
}

注意:以上のプログラムはサーバCPUの占有負荷を100%に引き上げ、占有率を調整できない.
topツールを使用して、現在のシステムのCPU使用率を表示します.
Cpu(s): 
usユーザースペース占有CPUパーセント
SyカーネルスペースのCPU占有率
Niユーザプロセススペース内で優先度を変更したプロセスのCPU占有率
idアイドルCPU%
wa入出力待ちCPU時間%
ここでは、プログラムCPUの使用率を制限するオープンソースツール:cpulimiterを紹介します.プログラムがCPUを使用する割合を制限することができる.
svn checkout https://cpulimit.svn.sourceforge.net/svnroot/cpulimit/trunk cpulimit
cd cpulimit
./configure
make
生成された実行ファイルを/usr/bin/ディレクトリの下に配置できます.
再実行:cpulimit--exe FileName--limit 80
(FileNameプログラムのCPU占有率負荷を80%に制限)
これにより,デバッグCPU負荷占有率を任意にシミュレートできる.

2、[アナログ高メモリ使用率]


C++プログラムを作成し、システムの空きメモリを占有する:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <time.h>

int main()
{
	int timeuse=0;
	struct timeval tpstart,tpend;
	while (1)
	{
		gettimeofday(&tpstart,NULL);
		while (1)
		{
			gettimeofday(&tpend,NULL);
			timeuse = 1000000 * (tpend.tv_sec - tpstart.tv_sec) + (tpend.tv_usec - tpstart.tv_usec);  
			timeuse /= 1000;
			//char * Logmsg = new char[65535];
			char * Logmsg = new char[512];
		}
		sleep(20 / 1000);
	}
	return 0;        
}

このプログラムはシステムメモリをいっぱいにし、メモリがいっぱいになるとシステムは自分でプログラムプロセスをkillします.
topコマンドでメモリ情報を表示するには、次の手順に従います.
Mem: 
total物理メモリ総量
usedで使用される物理メモリの合計
フリー空きメモリ合計
buffersがカーネルキャッシュとして使用するメモリ量
以上の方式でメモリの高占有率のテストをして、一定の欠陥があって、メモリの占有率に対して制限の調節をすることができなくて、ここでもし誰かがプロセスのメモリの占有率を制限して調節することができる方法が1、2、私は感謝します.

3、[ディスクの読み書き能力のテスト]


ディスクファイルの高周波読み書き操作をシミュレートします.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <error.h>
/*
* 40M , 5ms 5ms, 
*/
int main(void)
{
	FILE *fp = NULL;
	char* testRead = NULL;
	char* testWrite = NULL;
	int i = 0;
	unsigned long ulFileLen = 0;
	for(;;)
	{
		testWrite = (char *)malloc(1024*1024*50);		
		memset(testWrite, 0, sizeof(testWrite));
		
		for(i=0;i<1024;i++)					//4K=1024*4
		{
			strcat(testWrite, "Test");
		}
		fp = fopen("/tmp/testReadWrite1.ini", "w");
		if(fp == NULL)
		{
			printf("Cannot Open This File !");
			exit(1);
		}
		for(i=0;i<10*1024;i++)				//40M=1024*4K*10
		{
			fwrite(testWrite,sizeof(testWrite),1024,fp);
		}
		fclose(fp);
		free(testWrite);
		usleep(5);
		
		testRead = (char *)malloc(1024*1024*50);
		memset(testRead, 0, sizeof(testRead));
		fp = fopen("/tmp/testReadWrite1.ini", "r");
		if(fp == NULL)
		{
			printf("Cannot Open This File !");
			exit(1);
		}
		fseek(fp, 0, SEEK_END);
		ulFileLen = ftell(fp);
		fseek(fp, 0, SEEK_SET);	
		fread(testRead, sizeof(testWrite), ulFileLen/sizeof(testWrite), fp);
		printf(">>>>>>>>>
[TEST]READ:%s [%d]
", testRead, ulFileLen); fclose(fp); free(testRead); usleep(5); } return 0; }