我正在尝试在特定工作负载下测试服务器。我正在使用stress-ng来模拟ax%cpu负载:stress-ng -c 1 -l x
我还尝试使用stress-ng来模拟x兆字节的内存负载:stress-ng -vm 1 --vm-bytes xM
。此命令创建一个vm压力源,分配大致为请求的内存量。但是,它也会产生100%的CPU利用率。我猜这是由于压力源不断访问分配的内存以强制将其映射到实际内存。
有没有什么方法可以限制内存压力源使用的 CPU 数量?
答案1
stress-ng
总是对系统造成严重影响。例如,该--cpu-method
选项有关于“使 CPU 发热”的最佳方法的文档。“它旨在锻炼计算机的各种物理子系统以及各种操作系统内核接口。”
如果您好奇,可以分析它到底做了什么。在 Linux 上很容易,然后安装调试符号perf top
是一个好的开始。无论是在压力测试还是其他应用程序上。
关于-vm
,,mmap()
触摸页面,并munmap()
处于紧密循环中,将对虚拟内存系统造成严重影响,并且内存瓶颈。每时钟指令数可能会很糟糕,并且无法显示 CPU 在不断输入数据时可以做什么。主机指标级别的症状将包括非常大比例的系统 CPU 时间。
stress-ng -vm 1 --vm-hang 0
接触内存后将无限期地休眠虚拟内存 (VM) 工作程序。如果您想分配一个较大的匿名内存区域,但不对其执行任何操作,请尝试此方法。我怀疑这个实用性值得怀疑,但您可以这样做。
这不会像实际应用程序那样执行:
stress-ng
没有做有用的工作;这不是一个基准。- 内存或 CPU 工作者不会因为等待慢速磁盘或网络而受到 I/O 限制。
- CPU 方法算法虽然多种多样且存在于现实世界,但并不是您在事务数据库中所看到的算法。
- 如果与此应用程序相关,则没有文件 I/O。
stress-ng
有文件压力源,但毫不奇怪,它们会严重打击系统。
仍然有用,以确保主机不会因压力而崩溃。
答案2
一般来说,可以限制 CPU 的使用率,-l <percent>
因此如果它应该使用 6 个核心,使用率为 50%,我会这样做:
stress-ng -c 6 -l 50
应该提到的是,文档指出:“此选项仅适用于--cpu 压力源选项,而不适用于所有 cpu 类压力源。”手册页