偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

如何一條命令,榨干機(jī)器的所有內(nèi)存?

系統(tǒng) Linux
最近在驗(yàn)證一些機(jī)器的內(nèi)存分配規(guī)律的時(shí)候,學(xué)習(xí)到了一些技能,趁著周末有時(shí)候?qū)扅c(diǎn)東西,跟大家分享一下。

 [[438184]]

最近在驗(yàn)證一些機(jī)器的內(nèi)存分配規(guī)律的時(shí)候,學(xué)習(xí)到了一些技能,趁著周末有時(shí)候?qū)扅c(diǎn)東西,跟大家分享一下。

大家可能有遇到類(lèi)似的場(chǎng)景,想要對(duì)機(jī)器進(jìn)行壓測(cè)模擬 OOM 的場(chǎng)景,但是無(wú)奈機(jī)器的規(guī)格實(shí)在太高,若用代碼去實(shí)現(xiàn),大家可以想象一下如何實(shí)現(xiàn)?個(gè)人感覺(jué)還是有點(diǎn)麻煩的。

那么有沒(méi)有好有的辦法,不用寫(xiě)代碼,用幾個(gè)簡(jiǎn)單的命令直接就可以向機(jī)器申請(qǐng)內(nèi)存呢?或者更極端點(diǎn),直接把機(jī)器的內(nèi)存給榨干了。。

若你經(jīng)常使用 linux,你會(huì)發(fā)現(xiàn) df -Th 后,一定會(huì)有 tmpfs 類(lèi)型的文件系統(tǒng)掛載在 /dev/shm 下面,雖然你大概率不會(huì)關(guān)注到它。 

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

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

tmpfs,顧名思義,是臨時(shí)文件系統(tǒng),是一種基于內(nèi)存的文件系統(tǒng)。

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

這意味著,你往掛載了 tmpfs 的目錄下寫(xiě)入的文件,都會(huì)直接寫(xiě)入內(nèi)存中。

假如你想占用機(jī)器 10G 的內(nèi)存,那我只要先創(chuàng)建一個(gè)臨時(shí)目錄 /tmp/memory ,并指定 tmpfs 的文件系統(tǒng)類(lèi)型及大小 10240M 掛載到該目錄下。 

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

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

  1. $ dd if=/dev/zero of=/tmp/memory/block 

當(dāng) dd 寫(xiě)入完成后,你再使用 free 去查看可用內(nèi)存,會(huì)發(fā)現(xiàn)剩余的內(nèi)存可分配的內(nèi)存少了 10G。

如果你想用完機(jī)器的所有內(nèi)存,完全可以在 mount 的時(shí)候,指定 size 為機(jī)器的內(nèi)存大小,但你要清楚你在做什么,否則執(zhí)行完 dd ,你的機(jī)器可能就掛了。

利用上面這個(gè)方法,其實(shí)還可以做更多的事情,比如你在機(jī)器你有兩個(gè) NUMA Node ,但你只想占用 NUMA Node 0 的內(nèi)存,那就可以指定 NUMA Node 0 的內(nèi)存,怎么辦呢?

首先利用 lscpu 找到 NUMA Node 0 上的所有 cpu 核 

  1. node0_cpus=$(lscpu | grep "NUMA node0" | awk '{print $NF}') 

然后使用 taskset 工具加 -c 參數(shù)來(lái)指定對(duì)應(yīng)的 cpu 核來(lái)執(zhí)行創(chuàng)建 tmpfs 目錄和 dd  的過(guò)程 

  1. $ cat > /root/mem_alloc.sh <<EOF  
  2. #!/bin/bash  
  3. tmpdir=`mktemp`  
  4. mount -t tmpfs -o size=1024M tmpfs ${tmpdir}  
  5. dd if=/dev/zero of=${tmpdir}/block  
  6. EOF  
  7. $ taskset -c "${node0_cpus}" sh /root/mem_alloc.sh  

執(zhí)行完成后,如果你所占用的內(nèi)存,沒(méi)有超過(guò) NUMA Node 0 的本地內(nèi)存,那么你使用 numactl 就會(huì)發(fā)現(xiàn)上面命令都只占用了 NUMA Node0 的內(nèi)存。

這么簡(jiǎn)單,你學(xué)會(huì)了嗎? 

 

責(zé)任編輯:龐桂玉 來(lái)源: 良許Linux
相關(guān)推薦

2009-12-22 13:21:21

服務(wù)器

2019-03-28 10:09:49

內(nèi)存CPU硬盤(pán)

2021-09-15 06:21:36

Update語(yǔ)句數(shù)據(jù)庫(kù)

2020-05-26 09:08:23

命令循環(huán)Linux

2011-03-21 17:19:12

LAMPUbuntu

2024-06-12 13:36:24

2011-04-28 15:25:35

噴墨打印機(jī)墨盒

2024-02-20 13:43:12

2021-03-12 15:08:23

服務(wù)器性能優(yōu)化

2025-05-20 00:00:00

2022-01-01 18:26:21

nginx

2025-05-12 08:27:25

2020-02-19 19:15:27

UbuntuLinux媒體編解碼器

2024-02-01 18:07:37

2022-02-11 14:43:53

SQL語(yǔ)句C/S架構(gòu)

2009-07-21 09:32:16

虛擬化投資回報(bào)

2015-07-28 11:06:28

日志記錄Linux命令

2024-04-19 07:31:58

MySQL數(shù)據(jù)庫(kù)

2024-12-17 06:20:00

MySQLSQL語(yǔ)句數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)