加入收藏 | 设为首页 | 会员中心 | 我要投稿 沧州站长网 (https://www.0317zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

怎样一条命令,榨干机器的所有内存?

发布时间:2021-12-14 11:53:45 所属栏目:Linux 来源:互联网
导读:最近在验证一些机器的内存分配规律的时候,学习到了一些技能,趁着周末有时候写点东西,跟大家分享一下。 大家可能有遇到类似的场景,想要对机器进行压测模拟 OOM 的场景,但是无奈机器的规格实在太高,若用代码去实现,大家可以想象一下如何实现?个人感觉
最近在验证一些机器的内存分配规律的时候,学习到了一些技能,趁着周末有时候写点东西,跟大家分享一下。
 
大家可能有遇到类似的场景,想要对机器进行压测模拟 OOM 的场景,但是无奈机器的规格实在太高,若用代码去实现,大家可以想象一下如何实现?个人感觉还是有点麻烦的。
 
那么有没有好有的办法,不用写代码,用几个简单的命令直接就可以向机器申请内存呢?或者更极端点,直接把机器的内存给榨干了。。
 
若你经常使用 linux,你会发现 df -Th 后,一定会有 tmpfs 类型的文件系统挂载在 /dev/shm 下面,虽然你大概率不会关注到它。
如果你想用完机器的所有内存,完全可以在 mount 的时候,指定 size 为机器的内存大小,但你要清楚你在做什么,否则执行完 dd ,你的机器可能就挂了。
 
利用上面这个方法,其实还可以做更多的事情,比如你在机器你有两个 NUMA Node ,但你只想占用 NUMA Node 0 的内存,那就可以指定 NUMA Node 0 的内存,怎么办呢?
 
首先利用 lscpu 找到 NUMA Node 0 上的所有 cpu 核
 
$ node0_cpus=$(lscpu | grep "NUMA node0" | awk '{print $NF}')
然后使用 taskset 工具加 -c 参数来指定对应的 cpu 核来执行创建 tmpfs 目录和 dd  的过程
 
$ cat > /root/mem_alloc.sh <<EOF  
#!/bin/bash  
tmpdir=`mktemp`  
mount -t tmpfs -o size=1024M tmpfs ${tmpdir}  
dd if=/dev/zero of=${tmpdir}/block  
EOF  
$ taskset -c "${node0_cpus}" sh /root/mem_alloc.sh  
执行完成后,如果你所占用的内存,没有超过 NUMA Node 0 的本地内存,那么你使用 numactl 就会发现上面命令都只占用了 NUMA Node0 的内存。

(编辑:沧州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!