gpt4 book ai didi

java - 创建占用特定数量 CPU 和 RAM 的任务

转载 作者:行者123 更新时间:2023-11-28 06:45:34 25 4
gpt4 key购买 nike

我正在测试我公司的软件项目,想看看它在重负载条件下如何工作。无论如何创建一个占用大量 CPU 并且只有在我告诉它时才会停止的任务?如果无法以编程方式实现,还有哪些其他选择?例如。有什么软件和输入可以快速帮助我创造这样的条件?提前致谢。

最佳答案

这可以通过程序来完成。

消耗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消耗一定数量的内存。

关于java - 创建占用特定数量 CPU 和 RAM 的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25073130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com