스왑은 비 동기화입니까? swap enabled,

나는 꽤 오랫동안 유닉스를 사용해 왔으며 지난 몇 년 동안 스왑은 시대에 뒤 떨어진 것처럼 느껴졌지만 다른 사람들이 어떻게 생각하는지 궁금합니다.

내 주장은 대략 이것입니다 (글로벌 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 )이지만 LinuxFreeBSD는 구체적이며 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에서 무의식적입니다’라는 진술 뒤에 서 있습니다.



답변

스왑 (디스크 영역)과 스왑 (메모리 페이지를 RAM에서 디스크로 이동하는 방법과 혼동하지 마십시오)을 혼동하지 마십시오.

과도한 스와핑은 성능상의 이유로 피해야하지만 스왑 영역이 반드시 문제가되는 것은 아닙니다.

Linux와 같이 메모리를 초과 커밋하는 프로세스, 즉 프로세스가 사용 가능한 것보다 많은 메모리를 할당 할 수 있도록하므로 상황을 처리하기에 스왑이 충분하지 않은 RAM이 부족하면 OOM 킬러가 트리거됩니다. 종료 할 “올바른”프로세스를 선택하는 데 사용 된 알고리즘을 신뢰하고 제대로 종료 할 수있는 기회를주지 않고 종료 될 하나 이상의 프로세스를 승인해야합니다. 다음은 왜 OOM 킬러가 좋은 아이디어가 아닌지 설명 하는 유명한 비유 입니다.

Solaris와 같이 메모리를 과다 커밋하지 않는 시스템, 즉 RAM에서든 디스크에서든 메모리 예약이 항상 가상 메모리에 의해 항상 백업되도록하려면 충분한 스왑 영역이 있어야합니다. 그렇지 않으면 RAM의 잠재적으로 중요한 부분이됩니다. 지나간.


답변

나는 스왑을 유지 해야하는 한 가지 이유를 알고 있습니다. 시스템에 구성 할 수있는만큼의 메모리를 차지하는 앱이 있습니다. 처리의 한 부분에서 포크와 exec를 수행하여 단일 유닉스 명령을 실행합니다 ( “uname”또는 “user”또는 Java와 동등한 것을 찾을 수없는 것으로 생각합니다). java는 원시 응용 프로그램처럼 쓰기 시맨틱에 복사를 사용하여 vfork를 수행하지 않는 것으로 보입니다. 4Gb의 RAM을 사용하여 앱을 시작하면 포크는 다른 4Gb의 RAM을 사용하지만 신속하게 해제합니다. 해당 하둡으로 교체 할 4Gb 스왑이 없다면 내 앱에 4Gb를 지불하기 위해 8Gb의 RAM 비용을 지불해야합니다.


답변

기술적으로 토론에 추가 할 수는 없지만 몇 가지 예를들 수 있습니다. 예전 노트북 (2GB RAM kunbuntu lucid)은 일반적으로 0에서 스왑으로 실행됩니다. 총 100 개의 연결을 사용할 수있는 토렌트가 많은 전송 (비트 토렌트 클라이언트)을 실행하면 스왑이 진행될 수 있습니다. 1GB 실제 메모리를 사용하는 XP vm을 실행하면 더욱 악화됩니다.

다른 사람들은 그래픽 렌더링과 같은 메모리 집약적 프로세스도 스왑으로 떨어질 수 있다고 언급했습니다. 가끔 만 그렇게해도 문제가되지 않습니다.

OOM 문제에 관한 한, 스왑은 문제를 식별하는 것과 남쪽으로가는 것 사이의 시간을 사기 때문에 실제로 생명의 은인이 될 수 있습니다. 많은 것들이 거의 모든 메모리를 사용하므로주의를 기울이지 않지만 스왑이 시작되면 그 사실을 발견하고 문제를 찾기 시작합니다.


답변

스왑 공간에 대한 매우 유용한 응용 프로그램이 하나 있습니다. RAM을 사용하는 저장 장치에 스왑 공간을 배치하여 설치 가능한 시스템 RAM의 한계를 극복하여 RAM 확장

http://techreport.com/articles.x/16255를 살펴보십시오.
기본적으로 S-ATA에서 DDR2-RAM으로의 인터페이스입니다. 여기에는 최대 64GB의 RAM을 넣을 수 있습니다. 그중 하나에 스왑 공간을두면 상당한 추가 RAM이 생깁니다. 물론 일반 시스템 RAM만큼 빠르지는 않습니다. 그러나 시스템 RAM을 일종의 추가 캐시 계층으로 바꿉니다.


답변

4Gb 이상의 노트북 / 데스크톱에서 스왑 ( Windows 파일 이름의 페이징 파일)없이 Linux 및 Windows 를 실행했습니다 . 메모리 소진이 발생하는 경우가 있습니다. 시스템이 이보다 더 빠르다고 생각합니다. 내 작업에 특별한 요구 사항은 없습니다.

내가 배운 것들 :

  • Windows는 시간이 지남에 따라 메모리를 “손실”합니다. 약 20-30 일의 가동 시간으로 재부팅을 원하는 시점에 도달합니다. 왜 이런 일이 발생하는지 모르겠습니다. 일부 드라이버에서 누수되거나 안티 바이러스 일 수 있습니다. 페이징 파일이 있으면이 누수 된 메모리를 페이징 파일에 넣을 수 있다고 생각하므로 일반 Windows 시스템 에서이 문제를 확인하기가 더 어렵습니다.
  • Firefox는 Chrome보다 적은 메모리로 더 잘 처리합니다. Firefox가 경고하고 Chrome이 계속 작동합니다.

답변

귀하의 주장은 성능이 중요한 서버에 매우 유효하며 다음에 어떤 앱이 다음에 작동하는지 아는 것은 예측할 수 없습니다.

A의 바탕 화면 그러나, 나는 스왑 내가 밀어 작업을 진열하고 경우에 유용을 찾을 수 있습니다.

예를 들어, 앱을 사용하여 작업을하고 있는데 어떤 작업 (하위 작업 또는 중단)에 A앱을 사용해야한다는 것을 알게 B되면 작업 A하는 동안 디스크 로 쉽게 전환 할 수 있습니다. 에 B이상은 닫습니다 A후 나중에 다시 시작해야합니다.

이것은 A다시 시작할 때 복원되지 않은 저장되지 않은 상태를 유지하는 경우에 특히 그렇습니다 .

A스왑 으로 푸시 / 풀 에서 빠르거나 빠르 거나 다시 시작 하는 것이 더 빠른지 여부 는 앱에 따라 다릅니다. (일부는 스타트 업이 느리지 만 주거 규모는 작습니다.)

그러나 생산성 향상을위한 더 나은 솔루션은 추가 RAM을 설치하는 것입니다.


답변

내 시스템에서 / tmp가 너무 많은 RAM을 사용하면 스왑을 위해 유출됩니다.

이것은 / tmp에 실제 파일 시스템을 사용하는 것보다 훨씬 빠릅니다.