最近在驗證一些機器的記憶體分配規律的時候,學習到了一些技能,趁著周末有時間寫點東西,跟大家分享一下,
大家可能有遇到類似的場景,想要對機器進行壓測模擬 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 工具來指定對應的 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 的記憶體,
絮叨一下
我在 CSDN 上寫過很多的 Python 相關文章,其中包括 Python 實用工具,Python 高效技巧,PyCharm 使用技巧,很高興得到了很多知乎朋友的認可和支持,
在他們的鼓勵之下,我將過往文章分門別類整理成三本 PDF 電子書
PyCharm 中文指南
《PyCharm 中文指南》使用 300 多張 GIF 動態圖的形式,詳細講解了最貼合實際開發的 105個 PyCharm 高效使用技巧,內容通俗易懂,適合所有 Python 開發者,
在線體驗地址:https://pycharm.iswbm.com

Python 黑魔法指南
《Python黑魔法指南》目前迎來了 v3.0 的版本,囊集了 100 多個開發小技巧,非常適合在閑時進行碎片閱讀,
在線體驗地址:https://magic.iswbm.com

Python 中文指南
學 Python 最好的學習資料永遠是 Python 官方檔案,可惜現在的官方檔案大都是英文,雖然有中文的翻譯版了,但是進度實在堪憂,為了照顧英文不好的同學,我自己寫了一份 面向零基礎的朋友 的在線 Python 檔案 -- 《Python中文指南》
在線體驗地址:https://python.iswbm.com

有幫助的話,記得幫我 @王炳明 點個贊喲~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/335359.html
標籤:其他
上一篇:Linux實操篇 實用指令
