
假設我們定義了以下內容/etc/fstab
tmpfs /data tmpfs size=90% 0 0
然後我們
mount -a
現在/data
是與tmpfs
以下場景可能會發生什麼
/data
達到90%
RAM 記憶體(達到 90%)的情況tmpfs
是否意味著在這種情況下90%
將使用交換記憶體?
答案1
簡短回答: 如果您的實體記憶體無法滿足百分比部分(90%),最終將使用交換。當IO大於指定百分比時發生IO錯誤。
長答案: 此百分比代表您的記憶體部分(實體記憶體 + 交換分割區或交換檔案}。假設您有 1TiB DIMM (RAM) 並依照 Redhat 的建議設定交換 100GiB,理論上講任何對 /data 超過 0.989 TiB 的 IO 都會發生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,該 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