나는 꽤 오랫동안 유닉스를 사용해 왔으며 지난 몇 년 동안 스왑은 시대에 뒤 떨어진 것처럼 느껴졌지만 다른 사람들이 어떻게 생각하는지 궁금합니다.
내 주장은 대략 이것입니다 (글로벌 ulimit 또는 OOM 설정의 twiddling이 없다고 가정) :
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
성능을 위해 조정 된 서비스의 경우, 자원 사용의 상한을 이해하는 것이 처음에이를 조정하는 데 중요 할 것으로 생각되며,이 경우 필요한 양을 알고 있습니다.
나는 당신이 실행중인 프로세스를 중단하고 다른 것들을위한 공간을 만들기 위해 교환 할 수있는 많은 상황 (일부는 아니지만 많지 않은)을 상상할 수는 없지만 그렇게하면 여전히 소켓을 잃을 것입니다. gcc를 통한 코어 덤프 또는 메모리를 직접 복사하는 것은 기능적으로 동일합니다.
램이 부족한 경우 임베디드 시스템에서 스왑을 원하지 않을 것입니다. 램이 부족하면 백만 개의 섹터 당 쓰기 플래시 메모리를 찢는 것보다 프로세스 다이를 원할 것입니다 주말 동안 마모 수준까지웨어 레벨링하여 운전하십시오.
유닉스 수염을 가진 사람들은 스왑을 유지해야 할 강력한 이유가 있습니까?
답변 및 분석 업데이트 :
확인 되었습니까? -fork ()는 자식 프로세스를 위해 부모와 같은 양의 메모리를 요구합니다
현대 포크 ()는 POSIX (일반적으로)의 어린이를위한 COW ( Copy-On-Write )이지만 Linux 와 FreeBSD는 구체적이며 OSX를 외삽 법으로 가정합니다. 나는 스왑이 가지고있는 항문 수하물 의이 부분을 고려합니다.
흥미롭게도이 Solaris 기사에서는 Solaris가 fork ()와 함께 Copy-on-Write를 사용하더라도 사용 가능한 가상 메모리에 2x (!) 이상의 부모 프로세스 크기가 있어야합니다. 가운데. 솔라리스 요소 는 스왑이 시대적이라는 주장을 다소 분열시키는 반면, 충분한 운영 체제는 CoW를 올바르게 구현하여 스왑에 대한 추가 정당화로 표시하는 것보다 신화를 없애는 것이 더 중요하다고 생각합니다. 이후. 현실을 직시하자. 이 시점에서 실제로 Solaris를 사용하는 사람들은 아마도 Oracle 사람 일 것입니다. 공격적인 솔라리스!
확인 -tmpfs / ramfs가 채워질 때 tmpfs / ramfs 파일이 편의로 스왑으로 이동할 수 있음
무제한 tmpfs / ramfs를 사용하지 마십시오! tmpfs / ramfs에서 사용할 램의 양을 항상 명시 적으로 정의하십시오.
그럴듯한 - '경우에 따라'약간의 교환
예전의 상사 중 한 명이 '알지 못하는 것을 모른다'는 말을 했었습니다. 본질적으로 아직 모르는 정보를 바탕으로 결정을 내릴 수는 없습니다. 그러나 이것은 나에게 스왑에 대한 그럴듯한 주장입니다. 응용 프로그램이 스왑 아웃되는지 여부를 감지하기 위해 수행해야 할 작업 유형이 malloc ()이 성공했는지 또는 예외를 잡는지를 확인하는 것보다 무거울 것입니다. 실패한 new ().
이것은 데스크탑을 실행 중이고 임의의 일이 많이 발생하는 경우에 유용 할 수 있지만 여전히 누군가가지나 가면 스왑 지옥으로 뛰어 들기보다는 OOM이 될 것입니다. 그저 나야
파산! -에 솔라리스 , 스왑 입니다 몇 가지 이유로 중요
tmpfs -states tmpfs에 사용 가능한 여유 공간의 양은 시스템에서 할당되지 않은 스왑 공간의 양에 따라 다릅니다. tmpfs 파일 시스템의 크기는 작성된 파일을 수용하기 위해 커지지 만 tmpfs를 많이 사용하는 사용자에게는 몇 가지 고유 한 상충 관계가 있습니다. Tmpfs는 실행 프로그램의 데이터 및 스택 세그먼트와 리소스를 공유합니다. tmpfs 파일 시스템이 최대 허용 크기에 가까우면 매우 큰 프로그램의 실행에 영향을 줄 수 있습니다. Tmpfs는 4MB의 시스템 스왑 공간을 제외한 모든 공간을 자유롭게 할당 할 수 있습니다.
스왑 상태 에 대한 Solaris 사실과 신화 오늘날 가상 메모리는 총 실제 RAM과 디스크의 스왑 공간의 총합으로 구성됩니다. Solaris는 스왑 공간을 전혀 구성 할 필요가 없습니다. 이 옵션을 선택하면 RAM이 가득 차면 새 프로세스를 시작할 수 없습니다. .
이것이 생성 할 수있는 최대 가상 맵이 ram + swap인지 , 또는 ram보다 큰 파일 인 mmap ()과 같은 작업을 수행 할 수 있고 mmap ()의 게으른 초기화에 의존 할 수 있는지 확실 하지 않습니다. 아마도 스왑없이 요즘 Solaris를 잘 실행할 수 있습니다. 다른 POSIXy 운영 체제보다 친숙하지 않은 것 같습니다.
파산! 인기있는 Linux 최대 절전 모드 도구는 스왑에 의존하는 것으로 보입니다
기본적으로 TuxOnIce 는 다른 백엔드가 존재하지만 최대 절전 모드의 스왑을 사용하는 것처럼 보입니다. 그러나 최대 절전 모드가 필요한 상자를 실행하지 않는 경우 여전히 '스왑은 Linux에서 무의식적입니다'라는 진술 뒤에 서 있습니다.