다음을 정의한다고 가정하자/etc/fstab
tmpfs /data tmpfs size=90% 0 0
그럼 우리는
mount -a
이제 /data
그것은tmpfs
다음 시나리오에서는 어떤 일이 일어날 수 있나요?
/data
RAM 메모리 도달 90%
(90% 도달) 상황은 tmpfs
이 경우 90%
스왑 메모리가 사용된다는 의미입니까?
답변1
짧은 답변: 실제 메모리가 백분율 부분(90%)을 충족할 수 없으면 결국 스왑이 사용됩니다. IO가 지정된 비율보다 크면 IO 오류가 발생합니다.
긴 답변: 이 백분율은 메모리 부분(물리적 메모리 + 스왑 파티션 또는 스왑 파일)을 나타냅니다. 1TiB DIMM(RAM)이 있고 Redhat의 권장 스왑 100GiB 설정을 따른다고 가정하면 이론적으로 0.989TiB를 초과하는 /data에 대한 모든 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
아래 스크립트를 사용하여 /data 마운트 경로의 90%를 초과하는 IO를 생성했습니다.
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