나는 한동안 유닉스를 사용해왔고, 지난 몇 년 동안 스왑이 시대에 뒤떨어진 것 같은 느낌을 받았는데, 다른 사람들은 어떻게 생각하는지 궁금합니다.
내 주장은 다음과 같습니다(전역 ulimit 또는 OOM 설정이 없다고 가정).
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를 사용하는 어린이의 경우(일반적으로)리눅스그리고FreeBSD특히 추론을 통해 OSX를 가정하고 있습니다. 나는 이것이 교환이 가지고 다니는 유행에 뒤떨어진 수하물이라고 생각합니다.
이상한 점은,이 솔라리스 기사Solaris가 fork()와 함께 Copy-on-Write를 사용하더라도 최소한 다음이 있어야 한다고 주장합니다.2배(!)fork()가 중간에 충돌하지 않도록 사용 가능한 가상 메모리의 상위 프로세스 크기입니다. 솔라리스 요소일부스왑이 시대착오적이라는 주장을 깨뜨립니다. 저는 충분한 운영 체제가 CoW를 이러한 방식으로 올바르게 구현하므로 이 신화를 없애는 것이 스왑이라는 라벨을 붙일 추가 이유보다 더 중요하다고 생각합니다. 부터. 현실을 직시하자. 현재 실제로 Solaris를 사용하는 유일한 사람은 아마도 Oracle 직원일 것입니다. 솔라리스에 대한 공격은 없습니다!
확인됨- tmpfs/ramfs가 가득 차면 tmpfs/ramfs 파일을 쉽게 교체할 수 있습니다.
무제한 tmpfs/ramfs를 사용하지 마십시오! tmpfs/ramfs가 사용할 RAM의 양을 항상 명확하게 정의하십시오.
합리적인- "만일의 경우" 약간의 교환을 수행하십시오.
예전에 제 상사가 "당신은 당신이 모르는 것을 모른다"라는 유명한 말을 한 적이 있습니다. 본질적으로, 당신은 아직 모르는 정보를 바탕으로 결정을 내릴 수 없습니다. 그러나 나에게 이것은 스와핑에 대한 합리적인 주장입니다. 응용 프로그램이 스와핑되는지 여부를 감지하기 위해 수행하는 작업 유형이 malloc() 성공 여부를 확인하거나 new() 실패 시 예외를 포착하는 것보다 더 무거운 것으로 의심됩니다.
이는 데스크탑을 실행 중이고 무작위로 여러 가지 일이 발생할 때 유용할 수 있지만, 그래도 뭔가 잘못되면 스왑 지옥에 갇히기보다는 OOM 수확을 받는 편이 낫습니다. 나야.
체포됐다!- 존재하다솔라리스, 교환예여러 가지 이유로 중요합니다.
임시 파일 시스템- 상태tmpfs에 사용 가능한 여유 공간의 양은 시스템의 할당되지 않은 스왑 공간의 양에 따라 다릅니다. tmpfs 파일 시스템의 크기는 기록된 파일을 수용할 수 있도록 커지지만, tmpfs 사용자 수가 많은 경우에는 몇 가지 본질적인 절충점이 있습니다. Tmpfs는 실행기의 데이터 세그먼트 및 스택 세그먼트와 리소스를 공유합니다. tmpfs 파일 시스템이 허용되는 최대 크기에 접근하면 매우 큰 프로그램의 실행이 영향을 받을 수 있습니다. Tmpfs는 4MB의 시스템 스왑 공간을 제외한 모든 공간을 자유롭게 할당할 수 있습니다.
스와핑에 대한 솔라리스의 사실과 오해- 상태오늘날의 가상 메모리는 물리적 RAM과 디스크의 스왑 공간의 합으로 구성됩니다. Solaris에서는 스왑 공간을 구성할 필요가 전혀 없습니다. 이 옵션을 선택하면 RAM이 가득 차면 새 프로세스를 시작할 수 없습니다..
이것이 생성할 수 있는 가장 큰 가상 지도가 다음과 같다는 것을 의미하는지 잘 모르겠습니다.메모리+스왑, 또는 ram보다 큰 파일에 대해 mmap()과 같은 작업을 수행할 수 있고 mmap()의 지연 초기화에 의존할 수 있는 경우. 이제 스왑 없이도 Solaris를 실행할 수 있지만 다른 POSIXy 운영 체제에 비해 사용자 친화적이지 않은 것 같습니다.
체포됐다!인기 있는 Linux 최대 절전 모드 도구는 스왑에 의존하는 것 같습니다.
기본적으로,얼음 턱시도다른 백엔드가 존재하지만 최대 절전 모드 스왑에 의존하는 것 같습니다. 그러나 최대 절전 모드가 필요한 시스템을 실행하지 않는 경우에도 Linux에서 스와핑은 시대착오적이라는 주장을 고수합니다.
답변1
스와핑(디스크 영역)과 스와핑(RAM에서 디스크로, 그리고 다시 서로 메모리 페이지를 이동하는 방법)을 혼동하지 마십시오.
성능상의 이유로 과도한 스왑을 피해야 하지만 스왑 영역을 갖는 것이 반드시 문제가 되는 것은 아닙니다.
Linux와 같은 시스템에서 메모리 오버커밋, 즉 프로세스가 사용 가능한 것보다 더 많은 메모리를 할당하도록 허용하고 RAM이 부족하며 이 상황을 처리할 충분한 스왑 공간이 없으면 OOM 킬러가 트리거됩니다. 종료할 "올바른" 프로세스를 선택하는 데 사용되는 알고리즘을 신뢰해야 하며, 제대로 종료할 기회도 없이 하나 이상의 프로세스가 종료된다는 사실을 받아들여야 합니다. 여기 유명한 곳이 있어요직유이는 OOM 킬러가 전혀 좋은 생각이 아닌 이유를 설명합니다.
Solaris와 같은 시스템에서 메모리를 오버커밋하지 않으려면, 즉 RAM에서든 디스크에서든 메모리 예약이 항상 가상 메모리에 의해 뒷받침되는지 확인하려면 충분한 스왑 영역이 있어야 합니다. 그렇지 않으면 RAM이 잠재적으로 중요합니다. 바쁘다. 지나간.
답변2
기술적으로 토론에 추가할 수는 없지만 몇 가지 예를 들 수 있습니다. 내 오래된 노트북(2GB RAM kunbuntu lucid)은 일반적으로 스왑이 0인 상태로 실행되었습니다. 전송(비트토렌트 클라이언트)을 실행하고 여러 토렌트(총 100개 연결 가능)를 사용하면 교환량이 크게 늘어날 수 있습니다. 실제 메모리가 1GB인 XP 가상 머신을 실행하면 상황이 더욱 악화됩니다.
그래픽 렌더링과 같이 메모리 집약적인 프로세스도 스왑 공간을 차지할 수 있다는 의견을 본 사람들이 있습니다. 가끔씩만 한다면 문제가 되지 않습니다.
스와핑은 문제를 식별하고 발생하는 시점 사이에 시간을 벌어주기 때문에 OOM 문제와 관련하여 실제로 생명의 은인이 될 수 있습니다. 많은 것들이 내 메모리를 거의 전부 사용하고 있었기 때문에 나는 그것을 알아차리지 못했습니다. 그러나 스왑이 실행되기 시작했을 때 나는 그것을 알아차리고 문제를 찾기 시작했습니다.
답변3
스왑 공간은 아주 좋은 용도로 사용됩니다. RAM 확장, RAM을 사용하는 저장 장치에 스왑 공간을 배치하여 설치 가능한 시스템 RAM의 한계를 극복합니다.
이 장치 좀 봐http://techreport.com/articles.x/16255 기본적으로 S-ATA에서 DDR2-RAM으로의 인터페이스입니다. 최대 64GB의 RAM을 장착할 수 있습니다. 이들 중 하나에 스왑 공간을 배치하면 상당한 추가 RAM을 얻을 수 있습니다. 물론 일반 시스템 RAM만큼 빠르지는 않습니다. 하지만 이는 시스템 RAM을 추가 캐싱 계층으로 바꾸는 것과 같습니다.
답변4
내 시스템에서 /tmp가 RAM을 너무 많이 차지하면 스왑 시 오버플로됩니다.
이는 /tmp를 사용하는 실제 파일 시스템보다 훨씬 빠릅니다.