tft每日頭條

 > 生活

 > 如何把手機運行内存提高

如何把手機運行内存提高

生活 更新时间:2024-07-03 13:48:44

如何把手機運行内存提高(榨幹機器的所有内存)1

最近在驗證一些機器的内存分配規律的時候,學習到了一些技能,趁着周末有時候寫點東西,跟大家分享一下。

大家可能有遇到類似的場景,想要對機器進行壓測模拟 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 的内存。

這麼簡單,你學會了嗎?

感謝你的閱讀。若文章對你有幫助,不如點個贊轉發一下,這是對我的最大支持。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved