创建占用特定CPU和RAM的任务

时间:2014-08-01 05:00:44

标签: java c# python c++ windows

我正在测试我的公司软件项目,并希望了解它在重负载条件下的工作原理。 反正有没有创建一个占用大量CPU的任务,只有在我告诉它时才会停止? 如果它不是以编程方式可能的,还有什么其他选择?例如。什么软件和输入可以快速帮助我创造这样的条件? 提前谢谢。

4 个答案:

答案 0 :(得分:1)

这可以通过程序来完成。

消耗CPU:

一个简单的死循环不会占用所有的CPU,因为你的CPU可能有多个逻辑核心,所以你需要创建多个线程来完成它。这是代码:

DWORD WINAPI ConsumeSingleCore(LPVOID lpThreadParameter)
{
    DWORD_PTR mask = 1 << (int) lpThreadParameter;
    ::SetThreadAffinityMask(::GetCurrentThread(), mask);
    for (;;) {}
}

void ConsumeAllCores()
{
    SYSTEM_INFO systemInfo = { 0 };
    ::GetSystemInfo(&systemInfo);

    for (DWORD i = 0; i < systemInfo.dwNumberOfProcessors; ++i)
    {
        ::CreateThread(NULL, 0, ConsumeSingleCore, (LPVOID)i, 0, NULL);
    }
}

消耗记忆:

在堆上分配足够的对象会有所帮助,虽然它不是很准确,因为系统中的内部结构(如堆)会产生一些开销。如果您需要准确的号码。我认为直接使用虚拟内存将是一个不错的选择。这是代码:

void ConsumeRAM()
{
    SYSTEM_INFO systemInfo = { 0 };
    ::GetSystemInfo(&systemInfo);

    DWORD memSize = 1024 * 1024 * 1024;
    char *buffer = (char *)::VirtualAlloc(NULL, memSize, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);

    // Touch all the pages, so system will try to allocate physical memory for them.
    for (DWORD memAddrOffset = 0; memAddrOffset < memSize; memAddrOffset += systemInfo.dwPageSize)
    {
        buffer[memAddrOffset] = 0;
    }

    return;
}

如果您只需要一些工具进行测试,可以尝试CPU overload消耗一定数量的内核,MemAlloc消耗一定数量的内存。

答案 1 :(得分:0)

任何简单的循环都会占用CPU,通常在等待操作系统执行某些操作时处理产量,读取磁盘,访问网络,分配内存。

 int quiteBig = 20000;
 int a[quiteBig] ;

 while ( true ) {  // or check for a terminating condition

    for ( long  i = 0; i < quiteBig ; i++ ) {
           a[i] = i;
    }

 }

答案 2 :(得分:0)

在C#中:
对于RAM

List<anyObject> hogger = new List<anyObject>();
for(long i = 0; i < someHugeNumber; i++)
    hogger.Add(new anyObject());

基本上尝试查看占用所需空间所需的对象数量。

对于CPU

while(true)
    ;

即时100%CPU
如果你想少一点

while(true)
{
    for(long i = 0; i < someNumber; i++)
    {
        ;
    }
    Thread.Sleep(1);
}

有一些数字你可以调整休息前的疯狂周期数 =&GT;摆弄CPU使用率平均值的数字

作为while - 循环的终止,您可以使用表单上的按钮或键组合等。

答案 3 :(得分:0)

是的,它是以编程方式实现的,因为其他人已经展示了如何加载CPU的示例。请注意,CPU负载通常只需要一个核心,因此您需要为每个核心运行一个程序副本(为每个核心分配一个脚本并指定它将运行的核心)

您还可以查看https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing