如何在特定时间段内将可用内存减少到一定数量

如何在特定时间段内将可用内存减少到一定数量

我想在一定时间内对内存进行压力测试。我正在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 秒休眠时间的脚本中。但是,您仍然需要检查可用数字作为起点。

相关内容