目的:
1) 提高Linux环境的内存使用率,使得性能数据发生明显变化
--------------------------------------------------------------------------------
使用方法:
编译# gcc test_eatMem.c -o test_eatMem运行# ./test_eatMem
--------------------------------------------------------------------------------
实现test_eatMem.c代码参考:
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// Destription : release memory
// 1.parameters# gcc test_eatMem.c -o test_eatMem
// 2.parameters# ./test_eatMem
// Date : 2015-1-12
#define block 120 // eat times
void eatMem()
{
int i =0; int j = 0;
int cell = 256 * 1024 * 1024; //256M
char * pMem[block]={0}; // init all pointer to NULL.
for(i = 0; i < block; i++)
{
pMem[i] = (char*)malloc(cell); // eat...
if(NULL == pMem[i]) // failed to eat.
{
printf("Insufficient memory avalible ,Cell %d Failure\n", i);
break;
}
memset(pMem[i], 0, cell);
printf("[%d]%d Bytes.\n", i, cell);
fflush(stdout);
sleep(1);
}
//Read&Write 100 次, 每次40秒
int nTimes = 0;
for(nTimes = 0; nTimes < 100; nTimes++)
{
for(i=0; i<block; i++)
{
printf("Read&Write [%d] cell.\n", i);
if(NULL == pMem[i])
{
continue;
}
char ch=0;
int j=0;
for(j=0; j<cell; j+=1024)
{
ch = pMem[i][j];
pMem[i][j] = 'a';
}
memset(pMem[i], 0, cell);
fflush(stdout);
sleep(5);
}
sleep(5);
}
printf("Done! Start to release memory.\n");
//释放内存核心代码:
for(i = 0; i < block; i++)
{
printf("free[%d]\n", i);
if(NULL != pMem[i])
{
free(pMem[i]);
pMem[i] = NULL;
}
fflush(stdout);
sleep(2);
}
printf("Operation successfully!\n");
fflush(stdout);
}
int main(int argc,char * args[])
{
eatMem();
}
释放消耗的内存:
1)查询进程操作# jobs
[1]+ Stopped ./test_eatMem
2)关闭进程操作# kill -9 % 1
3)观察Memory数据# free -g
4)释放内存# for i in `seq 1 100`; do echo 3 > /proc/sys/vm/drop_caches & done &