Linux
如果 tmpfs 達到以百分比定義的限制會發生什麼
假設我們在
/etc/fstab
tmpfs /data tmpfs size=90% 0 0
然後我們
mount -a
現在
/data
是與tmpfs
在以下情況下可能會發生什麼
/data
達到90%
RAM記憶體(達到90%)的情況tmpfs
是否意味著在這種情況下90%
將使用交換記憶體?
簡短回答: 如果您的物理記憶體無法提供百分比部分(90%),最終將使用交換。當 IO 大於指定百分比時發生 IO 錯誤。
長答案: 百分比代表你的記憶體部分(物理記憶體+交換分區或交換文件}。假設你有 1TiB DIMM(RAM)並根據 Redhat 的建議設置交換 100GiB,理論上講任何 IO 到 /data 高於 0.989 TiB 會像所有其他文件系統一樣發生 IO 錯誤。在實踐中,由於所有其他東西都在使用記憶體和交換空間,所以要注意OOM 導致的死鎖將無法在過度增長的情況下清除記憶體。
這是我在筆記型電腦上執行的關於我在說什麼的證明:
- 寫入 IO 之前的系統狀態。
ceto@dell:~$ free total used free shared buff/cache available Mem: 8041716 2110100 3461592 208904 2470024 5464012 Swap: 2097148 0 2097148 ceto@dell:~$ cat /etc/fstab | grep data tmpfs /data tmpfs rw,nodev,nosuid,size=90% 0 0 ceto@dell:~$ mv rh/rhel-8.1-x86_64-dvd.iso /var/lib/libvirt/images/^C ceto@dell:~$ findmnt /data TARGET SOURCE FSTYPE OPTIONS /data tmpfs tmpfs rw,nosuid,nodev,relatime,size=7237548k ceto@dell:~$ df /data Filesystem 1K-blocks Used Available Use% Mounted on tmpfs 7237548 0 7237548 0% /data
- 我使用下面的腳本來生成 IO,它位於 /data 掛載路徑的 90% 以上。
ceto@dell:~$ cat deadlock.sh dd if=/dev/urandom of=/data/test.img bs=16M count=454 > deadlock.txt 2>&1 df /data >> deadlock.txt free >> deadlock.txt sleep 1 rm -rf /data/test.img sync /data
- 讓我們生成 IO 看看會發生什麼
ceto@dell:~$ sudo sh deadlock.sh
- 在輸出文件中,我們看到發生 IO 錯誤並且系統變得草率
ceto@dell:~$ cat deadlock.txt dd: error writing '/data/test.img': No space left on device 442+0 records in 441+0 records out 7411249152 bytes (7.4 GB, 6.9 GiB) copied, 39.6605 s, 187 MB/s Filesystem 1K-blocks Used Available Use% Mounted on tmpfs 7237548 7237548 0 100% /data total used free shared buff/cache available Mem: 8041716 2284836 126108 5358092 5630772 139840 Swap: 2097148 2097084 64