创建一个占用特定CPU和RAM数量的任务

本文关键字:RAM CPU 任务 一个 创建 | 更新日期: 2023-09-27 18:15:51

我正在测试我公司的软件项目,想看看它在重载条件下是如何工作的。有没有办法创建一个占用大量CPU的任务,只有在我告诉它停止时才会停止?如果在编程上不可行,还有其他选择吗?例如,有什么软件和输入可以快速帮助我创建这样的条件?

创建一个占用特定CPU和RAM数量的任务

这可以通过程序来完成。

占用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过载消耗一定数量的内核和MemAlloc消耗一定数量的内存。

任何简单的循环都会消耗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;
    }
 }

c#中:
为RAM

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

基本上试着看看你需要多少物体占用你想要的空间。

For CPU

while(true)
    ;

这是一个即时的100% CPU
如果你想少一点

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

使用一些数字,您可以在中断前调整疯狂循环的数量
=>调整CPU使用的平均值

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

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

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