我想在一定时间内对内存进行压力测试。我正在vmstat -s
使用tail /dev/zero
命令检查内存使用情况,但tail /dev/zero
大约 60 秒后超时,并且内存随机填满。我想在 180 秒内有 5% 的可用内存。
答案1
可以使用内核跟踪缓冲区来减少系统和/或用户的可用内存。例如,使用我的系统(16 GB 和 8 个 CPU):
首先刷新内存,给出我们的起点(请注意,我以 root 身份运行):
root@s15:/home/doug/temp-k-git/linux# sync
root@s15:/home/doug/temp-k-git/linux# echo 3 > /proc/sys/vm/drop_caches
root@s15:/home/doug/temp-k-git/linux# free -m
total used free shared buff/cache available
Mem: 15719 88 15472 1 159 15343
Swap: 16085 35 16050
现在,计算并分配内存给内核跟踪缓冲区:15719 兆字节的 5% 是 786 兆字节。从 15472 兆字节开始,需要使用 14686 兆字节。内核跟踪缓冲区是按每个 CPU 分配的,在我的情况下是 8 个 CPU,因此每个 CPU 有 1835 兆字节。分配:
root@s15:/home/doug/temp-k-git/linux# echo 1835000 > /sys/kernel/debug/tracing/buffer_size_kb
并检查一下:
root@s15:/home/doug/temp-k-git/linux# free -m
total used free shared buff/cache available
Mem: 15719 14476 858 1 385 730
Swap: 16085 35 16050
您可以观察到,这导致仍有 5.46% 的内存可用(如果需要,可以调整分配)。完成任何测试后,您可以使用以下命令取消分配内核跟踪缓冲区(0 不起作用):
root@s15:/home/doug/temp-k-git/linux# echo 1 > /sys/kernel/debug/tracing/buffer_size_kb
并检查一下:
root@s15:/home/doug/temp-k-git/linux# free -m
total used free shared buff/cache available
Mem: 15719 88 15470 1 160 15342
Swap: 16085 35 16050
如果您希望时间为 180 秒,则将上述内容捆绑到具有 180 秒休眠时间的脚本中。但是,您仍然需要检查可用数字作为起点。