메모리 부족은 일반적인 문제이며 공식 OOM은 효율적이지 않습니다. 살상 작업을 더 빨리 완료하기 위해 몇 가지 다른 프로그램이 도입되었습니다.
왜 죽이는 대신 스왑을 만드는 방법이 없는지 궁금합니다. 스왑이 없는 시스템을 고려하면 OOM 프로그램은 프로세스를 종료하는 대신 트리거될 수 있습니다 sudo swapon /swapfile
(존재한다고 가정 ).swapfile
이 아이디어를 구현하는 데 기술적 한계가 있나요?
답변1
이를 수행하기 위한 프로그램이 존재합니다. 동적 교환 데몬예를 들어.
스왑이 필요하기 직전에 일찍 조치를 취해야 합니다. 스왑 파일 생성, 활성화 및 비활성화는 모두 메모리를 사용하는 작업(다른 작업과 마찬가지로)이고 이미 작업 중일 때는 그렇게 하고 싶지 않기 때문입니다. 메모리 부족 상황.
필요에 따라 RAM 사용량을 모니터링하는 모든 프로그램은 메모리도 사용합니다(RAM을 잠그려면 비슷한 방법을 사용해야 함).메모리 잠금이렇게 하면 필요할 때 교체되지 않습니다.)
IMO, 스왑 파일이나 파티션을 생성하고 활성화한 다음 잊어버리는 것과 비교하면 이와 같은 것을 사용하는 데는 실질적인 이점이 없습니다. 이론적으로는 훌륭해 보이지만 실제로는 쓸모가 없습니다.
답변2
이 아이디어를 구현하는 데 기술적 한계가 있나요?
아니요, 비슷한 프로그램을 계속해서 작성할 수 있습니다. 스와핑의 문제는 매우 느리고 예측할 수 없으며 대기 시간이 추가되고 일반적인 IO 작업을 방해하며 어떤 경우에는 RSS가 실행되는 애플리케이션이 있는 경우 득보다 실이 더 클 수 있다는 것입니다. 차단된 성장 제어: 요구 사항을 충족하기 위해 스왑을 생성하려고 하면 커널이 실제로 사용하는 모든 것을 스왑하고 시스템이 정지됩니다.
내 조언은 항상 RAM을 추가하고 스왑을 사용하지 않는 것입니다. 물리적(사용 가능한 슬롯이 없는 노트북) 또는 재정적(공유 호스팅) 제한을 벗어나 RAM을 추가할 수 없는 경우에만 스왑을 사용해야 합니다.
Linux에서는 스왑 영역을 최대 절전 모드로 사용할 수 있지만 그게 전부입니다. 저는 더 이상 최대 절전 모드를 믿지 않습니다. 그 기술은 매우 느린 임의 IO 속도를 가진 HDD 디스크용으로 만들어졌기 때문입니다. 오늘날의 SSD에서는 최대 절전 모드를 사용할 이유가 거의 없습니다.
답변3
그냥 사용하세요zram
이는 페이지의 압축된 저장소입니다. 다양한 Linux 배포판(예:루분투,페도라 모자) 및 ChromeOS와 Android는 수년 동안 기본적으로 zram을 활성화했습니다. Android에는 기본 레거시 스왑 기능조차 없습니다. 심지어윈도우그리고애플 시스템지금 사용가상 메모리 압축교환을 하기 전에
기본적으로 zram은 메모리를 거의 소비하지 않으며 데이터가 페이징된 후에만 압축된 크기를 사용하므로 메모리가 부족하지 않은 경우 일반 스왑을 사용할 때와 마찬가지로 zram이 무료로 제공됩니다. 그러나 메모리가 제한되면 zram이 사용되며 CPU가 HDD나 SSD에서 데이터를 읽는 것보다 훨씬 빠르게 데이터 압축을 풀 수 있기 때문에 스왑보다 훨씬 빠릅니다. 당신은 확인할 수 있습니다벤치마크 결과는 여기에 있습니다.기본 lzo 알고리즘을 사용하는 zram은 이전 SSD보다 여전히 빠릅니다. 당신은 쉽게 변경할 수 있습니다lz4 알고리즘이것은lzo보다 거의 5배 빠릅니다.압축률은 약간 낮습니다. 이제는 단지Zstd로 전환속도는 당신을 놀라게 할 것입니다
게다가zswap
다른 메커니즘을 사용하지만 여전히 압축된 데이터를 RAM에 저장합니다.
추가 읽기
- 긴급 상황에서만 스왑 공간을 사용하는 방법은 무엇입니까?
- https://wiki.debian.org/ZRam
- https://wiki.archlinux.org/index.php/improving_performance#RAM_and_swap
- zram, zswap, zcache 최종 가이드: 언제 어느 것을 사용할지
- Linux, SSD 및 스왑
- ZRAM과 ZSWAP의 차이점
- https://www.kernel.org/doc/Documentation/blockdev/zram.txt
- https://wiki.gentoo.org/wiki/Zram