日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何一条命令,榨干机器的所有内存?

發布時間:2024/9/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何一条命令,榨干机器的所有内存? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在驗證一些機器的內存分配規律的時候,學習到了一些技能,跟大家分享一下。

大家可能有遇到類似的場景,想要對機器進行壓測模擬 OOM 的場景,但是無奈機器的規格實在太高,若用代碼去實現,大家可以想象一下如何實現?個人感覺還是有點麻煩的。

那么有沒有好有的辦法,不用寫代碼,用幾個簡單的命令直接就可以向機器申請內存呢?或者更極端點,直接把機器的內存給榨干了。。

若你經常使用 linux,你會發現 df -Th 后,一定會有 tmpfs 類型的文件系統掛載在 /dev/shm 下面,雖然你大概率不會關注到它。

$?df?-Th Filesystem?????Type??????Size??Used?Avail?Use%?Mounted?on devtmpfs???????devtmpfs??910M?????0??910M???0%?/dev tmpfs??????????tmpfs?????919M?????0??919M???0%?/dev/shm tmpfs??????????tmpfs?????919M??896K??918M???1%?/run tmpfs??????????tmpfs?????919M?????0??919M???0%?/sys/fs/cgroup /dev/vda1??????ext4???????40G???11G???27G??28%?/ tmpfs??????????tmpfs?????184M?????0??184M???0%?/run/user/0

而這個 tmpfs 就是明哥今天要介紹的主角。

tmpfs,顧名思義,是臨時文件系統,是一種基于內存的文件系統。

它和虛擬磁盤 ramdisk比較類似像,但不完全相同,和ramdisk一樣,tmpfs可以使用RAM,但它也可以使用swap分區來存儲,而且傳統的ramdisk是個塊設備,要用mkfs來格式化它,才能真正地使用它;而tmpfs是一個文件系統,并不是塊設備,只是安裝它,就可以使用了。tmpfs是最好的基于RAM的文件系統。

這意味著,你往掛載了 tmpfs 的目錄下寫入的文件,都會直接寫入內存中。

假如你想占用機器 10G 的內存,那我只要先創建一個臨時目錄 /tmp/memory ,并指定 tmpfs 的文件系統類型及大小 10240M 掛載到該目錄下。

$?mount?-t?tmpfs?-o?size=10240M?tmpfs?/tmp/memory

接著咱使用 dd 命令,往該目錄下寫入多少內容,就會占用多少內存,由于我們的目的是占用內存,因此 if 直接使用 /dev/zero

$?dd?if=/dev/zero?of=/tmp/memory/block

當 dd 寫入完成后,你再使用 free 去查看可用內存,會發現剩余的內存可分配的內存少了 10G。

如果你想用完機器的所有內存,完全可以在 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 的內存。

這么簡單,你學會了嗎?

各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)

推薦閱讀

牛逼!Python常用數據類型的基本操作(長文系列第①篇)

牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)

牛逼!Python函數和文件操作(長文系列第③篇)

牛逼!Python錯誤、異常和模塊(長文系列第④篇)

總結

以上是生活随笔為你收集整理的如何一条命令,榨干机器的所有内存?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。