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