메모리 집약적 인 작업을 위해 64GB RAM 컴퓨터에서 파티션 크기 교체


36

컴퓨터에 64GB RAM과 240GB SSD 가 있는데 메모리 사용량이 많은 계산 (머신 러닝, 데이터 마이닝 등)에 사용할 것입니다. 인터넷에서 찾은 대부분의 조언은 약 2-4-8GB RAM 컴퓨터이며 RAM 스왑 파티션 크기의 2 배 (128GB)를 권장합니다.

128GB 스왑 파티션을 만드는 것이 합리적입니까? 거대한 스왑 파티션을 만들면 어떤 이점이 있습니까?

실제 RAM이 부족한 경우 올바르게 이해하고 있습니까?

  1. 스왑이 없으면 '메모리 부족'오류가 발생합니다.
  2. 스왑이 있으면 일부 RAM 페이지가 스왑 파티션으로 복사되고 프로그램은 계속 실행됩니다 (더 느리지 만).

일부 사람들은 읽기 / 쓰기주기가 제한되어 있기 때문에 SSD를 교체하는 것이 좋지 않다고 말합니다. 스왑을 사용하면 SSD 읽기 / 쓰기주기를 얼마나 빨리 소모 할 수 있습니까 (내가 아는 한, 쓰기 IOPS는 약 50000입니다)?

Linux를 사용하고 있습니다 ( Ubuntu 14.04 (Trusty Tahr)).

16GB 스왑을 설정하면 충분할 것이므로 (예 : RedHat에서 4GB를 제안) 16GB의 디스크 공간은 실제로 큰 문제가 아닙니다.


1
스왑에 명시 적으로 의존하는 대신, 작업 설정의 크기를 미리 알고 있거나 조금 더 낮은 수준의 메모리 관리를 원한다면 mmap작업 세트 페이지를 할당 하는 것을 고려 하십시오. 그러면 스왑 금액은 프로세스에 필요한 금액이됩니다.
푹신한

5
컴퓨터에 RAM이 거의없는 "RAM 양의 2 배"를 권장하는 조언은 옛날부터 시작되었습니다. 여러 문서에 따르면 RAM이 2GB 미만인 컴퓨터에 주로 적용 할 수 있다고합니다. 위의 스왑 크기는 주로 컴퓨터에서 수행하는 작업과 관련이 있습니다.
John WH Smith

서버 결함 Q & A 도 참조하십시오. Java (및 기타 앱)를 실행중인 경우 메모리 할당을 늘리기 위해 스왑이 충분한 지 확인하십시오. 나는 개인적으로 내 스왑 파티션 RAM + 2의 RHEL 표준 고수
워렌

2
여기에있는 대부분의 의견이 제거 된 것은 부끄러운 일입니다. 다시 추가 : 우연히도 커널이 지원한다면 스왑 파티션을 discardSSD에 마운트하고 싶을 수도 있습니다 . 또한 (아래 답변에 언급되어 있음) 잠재적으로 더 쉬운 관리를 위해 파티션 대신 파일을 사용할 수 있습니다 (예 : 조각화로 인해 SSD에 성능 저하가 없음)를 잊지 마십시오.
Jason C

1
SVM 학습과 같이 메모리를 많이 사용하는 응용 프로그램이 있고 램이 부족하고 스와핑을 시작하면 모든 것이 복구하기에 너무 느려질 수 있으며 유일하게 사용할 수있는 이동은 플러그를 당기는 것입니다 (몇 시간 동안 나에게 발생했습니다) . 스왑을 시작하면 프로세스를 OOM으로 강제 종료하여 최소한 항목을 변경하고 다시 시작할 수 있기를 원할 것입니다. SSD 드라이브의 경우 그렇게 나쁘지는 않습니다. OOMK 설정도 확인하겠습니다. 우분투에서 나에게 일어났습니다. 적극적으로 할당했기 때문에 여전히 많은 램이 남아있을 때 프로세스가 OOM-killed
되었음

답변:


36

적은 양의 스왑 만 필요할 것입니다. 컴퓨터의 일반적인 작업 세트에 충분한 RAM이 있으면 확실하게 두 가지만 교환하면됩니다.

  1. 디스크 캐시를위한 더 많은 공간을 확보하기 위해 RAM에서 액세스 할 수없는 정보를 얻으려면 스왑이 필요합니다. 많은 응용 프로그램은 시스템 시작시 실행되며 다시 액세스하지 않습니다. 더러워진 페이지가 RAM에 영원히 갇히는 것을 원하지 않습니다. 그래서 당신은 그들을 잡기 위해 스왑이 필요합니다.

  2. 채워지지 않을 할당을 처리하려면 스왑이 필요합니다. 이 공간은 사용되지 않더라도 사용 가능해야합니다. 이를 사용하지 않으면 시스템에 사용 가능한 실제 RAM이 많이있는 경우에도 모든 할당을 한 번에 사용할 수있는 백업 저장소가 충분하지 않기 때문에 메모리 할당을 거부해야합니다.

둘 다 많은 양의 스왑이 필요하지 않습니다. 예를 들어 16GB 이상이면 충분합니다. 그 목적은 더 빠른 작업 비용으로 더 큰 작업 세트를 실행할 수 있도록하는 것이 아닙니다. 64GB를 효과적으로 사용하고 정크로 막히거나 절대 발생하지 않는 에지 케이스를 예약하지 않아도됩니다.

(4GB면 충분하다고 Bert에 동의합니다.)


2
@wrwt 스왑 파티션을 드라이브의 끝 부분 (또는 적어도 데이터 파티션 이후)에두면, 조정을 선택해야하는 경우보다 빠르고 쓰기 집약적으로 크기를 조정할 수 있습니다 (특히 데이터 파티션의 크기를 조정합니다) 시작을 이동할 필요가 없으므로 더 간단하게 수용 할 수 있습니다. 때로는 기계식 드라이브에 있기 때문에 SSD의 위치와 성능 사이에는 링크가 없습니다.
Jason C

이 답변은 대부분의 애호가에게는 충분하지만 실제 서버에는 좋지 않은 조언입니다. 스왑 공간이 부족하면 메모리 부족 킬러가 시작되어 종료되기 때문에 응용 프로그램 작성 방법에 따라 대답이 달라집니다 무작위로 처리 (예 당신은 그 권리를 읽고; "무작위")
Soren

3
@Soren 이것은 serverfault가 아닌 수퍼 유저입니다. ;) 스왑 공간을 설정하는 것이 "실제 서버"에 대해 결정해야하는 유일한 결정은 아니라는 것은 사실입니다. 또한 초과 커밋과 같은 사항을 결정하고 OOM 킬러 등을 조정해야 할 수도 있습니다. (작업 집합이 실제 RAM을 초과 할 것으로 예상하면 답변이 훨씬 더 복잡해집니다. 그러나 아무도 더 이상 그런 식으로 기계를 작동하지 않습니다.)
David Schwartz

5
스왑이 활성화되지 않은 경우에도 Linux는 메모리를 초과 커밋합니다. 너무 많은 메모리가 실제로 사용될 때 OOMK 프로세스 만 수행합니다. 따라서 대답의 두 번째 요점이 잘못되었습니다.
Ruslan

1
@MaciejPiechotka 또는 파일을 사용하십시오.
Jason C

29

RedHat 은 64GB 시스템에서 4GB를 권장 합니다.

그러나 사이징 스왑은 과학보다 예술에 가깝습니다. 머신의 용도, 디스크 공간 및 메모리 용량 및 기타 요인에 따라 다릅니다. 기억, 당신은 항상 나중에 스왑을 추가 할 수 있습니다.

2X 실제 메모리 규칙 사용은 요즘의 메모리 시스템 양에 따라 구식입니다. 그러나 수행중인 작업을 알지 못하면 제로 스왑으로 실행하지 않는 것이 좋습니다. 4GB를 권장하는 것이 좋은 출발점입니다.


12
마지막 단락에 +1 2x 권장 사항은 대부분의 컴퓨터에 정상적인 사용시 스왑을 피할 수있는 충분한 램이없는 시점으로 거슬러 올라갑니다. 주관적으로 컴퓨터를 사용한 이후 2 배 한도는 스왑을 실행하기 전에 컴퓨터를 사용할 수 없을 정도로 느려질 정도로 충분히 큰 것으로 선택되었습니다.
Dan Neely

1
시스템에 4GB / 8GB의 RAM과 수백 기가 바이트의 디스크 공간이있는 경우에도 2X가 제대로 작동했습니다. 물론 필요한 것 이상일 수 있지만 그로 인한 피해는 무엇입니까? 그러나 이제 시스템에는 16GB / 64GB의 RAM과 128GB / 256GB SSD가 있으므로 피해는 분명합니다.
David Schwartz

12

Linux에서는 사용 가능한 총 가상 메모리 (RAM + SWAP)가 한 번에 실행하려는 모든 프로세스 및 최대 가상 풋 프린트에 충분하도록 충분한 스왑이 필요합니다.

이보다 스왑이 적거나 전혀 스왑이없는 경우 다음 상황이 발생합니다. 시스템에 페이지를 할당하려는 메모리가 부족합니다. 그러나 스왑이 없어도 시스템에 여유 공간을 만들기 위해 제거 할 수있는 "피해자"페이지가 많이 있기 때문에 이는 여전히 소프트 실패입니다. 즉, 실행 파일과 같은 모든 파일 백업 메모리 맵핑의 페이지 공유 라이브러리!

시스템이 점점 더 많은 데이터 공간 (스왑 아웃 할 수 없음)을 요구함에 따라, 실행 코드 (공유 라이브러리 및 실행 파일)가 점차 대피되어 작업 세트가보다 단단하고 강화 된 페이지.

스왑 공간은 익명 (파일 매핑되지 않음) 페이지를 스왑 아웃 할 수있는 공간을 제공하여이 문제를 완화합니다. 메모리 할당에 사용되는 페이지로, 실행 코드가 메모리에 남아있을 수 있습니다.

그럼에도 불구하고 메모리를 많이 사용하는 작업을 자주 실행하지 않으면 대부분의 시간 동안 스왑리스를 실행하지 않아도되고 스왑 파일 (전용 파티션 대신)을 필요할 때 수동으로 구성 할 수 있습니다. 스왑 파일을 즉석에서 만들려면 루트가되어 다음을 수행하십시오.

dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768  # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile

더 이상 필요하지 않은 경우 :

swapoff /path/to/swapfile
rm /path/to/swapfile

노트:

  1. RAM이있는만큼 스왑을 구성 할 필요는 없습니다. 이 경험 법칙은 스와핑이 설계되는 방식으로 인해 어려운 요구 사항이었던 운영 체제로 거슬러 올라갑니다.

  2. 사용 가능한 메모리가 없을 때, 즉 다음 sysctl 항목의 값을 조작하여 Linux에 장애를 발생시키는 방법이 있습니다.

    vm.overcommit_memory
    vm.overcommit_ratio
    

2
실제로 커널 구성 매개 변수로 다스 려 +1 - 핵심은 문제의 일부에 If I have no swap, I get an 'out of memory' error있다 - false- 사실은 스왑 공간이 부족하면 메모리 부족 - 살인자와 살인에 찰 것입니다 공간을 확보하기위한 임의의 프로세스-필요한 스왑 공간의 양은 응용 프로그램 작성 방법에 따라 다릅니다.
Soren

@Soren 대부분의 RAM은 실제 데이터로 채워질 것이므로 메모리 부족 킬러는 큰 차이를 만들지 않습니다. 어쨌든 '진실'을위한 Thx.
wrwt

3

더 고려해야 할 사항이 있습니다. 작업을 일시 중단 해야하는 경우 적어도 RAM 크기가 필요하고 일부는 필요합니다. 그러나 주로 계산 작업 말을 만드는 것처럼 보이면 필요할 것 같지 않습니다.

이 경우 파티션 대신 스왑 파일을 사용해보십시오. 크기 조정에 대해 걱정할 필요가 없으며 나중에 제거하거나 나중에 추가해도 파티션을 다시 나눌 필요가 없습니다. 파티션을 통해 파일을 사용하면 눈에 띄는 성능 저하가 없습니다. 당신이 그것을 필요로한다면, 크기를 보아라. 그러면 이것은 또한 당신에게 좋은 힌트를 줄 것이다.


1
@ Kaz 당신이 kaste가 아닌 다른 것에 대해 이야기하고 있다고 생각합니다. kaste는 컴퓨터를 일시 중지 / 최대 절전 모드로 전환하고 끄고 나중에 중단 한 부분을 가져 오려면 모든 RAM을 저장할 수있는 충분한 스왑 공간이 필요하다고 말합니다.
amalloy

@amalloy 스왑 공간에 RAM을 저장 한 경우 스왑은 어디로갑니다 (스왑이 메모리로 취급된다는 것을 기억하십시오-손실 된 경우 RAM을 잃는 것과 동일 함).
NPSF3000

2

머신에 적용하려는 워크로드에는 일정량의 메모리가 실행되어야하며 (최대로드를 처리하기 위해 방정식에 충분히 추가해야 함) 최소한 그 정도의 컴퓨터를 구성해야합니다.

최신 운영 체제는 실제 메모리와 스왑 공간의 조합으로 가상 메모리를 제공하므로 시스템에서 사용할 수있는 것보다 더 많은 메모리가 필요한 경우 간격을 채우기에 충분한 스왑 공간을 추가 해야합니다 . 즉, 최대 80GB가 필요하고 시스템에 64GB가 있으면 16GB 스왑이 필요합니다.

일반적으로 운영 체제 설치 프로그램은 초기 스왑 영역을 작성하도록 요청합니다 (이것은 가장 단순하고 작은 컴퓨터도 설치할 수 있기 때문에). 일반적인 Unix 작업에 대한 경험 법칙은 가상 메모리 크기를 갖는 것입니다. 실제 메모리의 3 배이므로 일반적으로 권장됩니다. 그러나 사용 패턴에 대해 더 잘 알고 있으므로이를 적절하게 변경할 수 있습니다.

메모리 부족이 항상 적은 경우 스왑 공간없이 작업해도 아무런 문제가 없습니다. Linux는 사용되지 않은 메모리를 디스크 캐시로 투명하게 사용합니다.


2

"많은 교체"를하는 것보다 훨씬 더 좋은 아이디어는 작업 세트를 메모리에 맞도록 작업을 재구성 한 다음 파일 시스템을 사용하여 작업을 저장하고 검색하는 것입니다. 즉, OS에서 메모리 사용 패턴을 추측하도록하는 대신 문제에 대해 알고있는 것을 사용하여 메모리 사용 패턴을 제어하십시오.

올 여름에 나에게 즉시 관련된 임의의 예로서 ... 2 차 체를 구현할 때, 마크 업하기 위해 (명확하게) 큰 연속 배열이 필요합니다 (세부 사항은 실제로이 예제와 관련이없는 복잡한 알고리즘으로). 어레이는 ~ 100 기가 항목이어야하므로 1TB 범위에서 쉽게 사용할 수 있습니다. 나는 그것을 할당하는 척하고 OS가 어레이를 통한 모든 순차적 쓰기를 지원하기 위해 RAM에 페이지를 가져 오기 위해 엄청난 양의 비효율적 인 스와핑을 할 수있게했습니다. 뼈대가 달린 무언가를하는 대신 메모리에 정확히 맞는 훨씬 작은 배열을 할당 한 다음 작은 배열을 재사용하여 나머지 큰 배열을 반복적으로 덮습니다. 또한 OS를 제거하고 실행중인 서비스 세트를 제거하고 쉘을 교체했습니다.

SSD는 빠를 수 있지만 스왑을 멈추지 않고 동일한 작업을 수행하도록 계산을 구성하는 것만 큼 빠르지는 않습니다.


1

다른 사람들이 언급했듯이 스왑 파티션은 RAM이 많더라도 좋은 생각입니다. SSD에 넣는 것은 좋지 않습니다. 스왑 파티션을 자주 쓰면 결국 드라이브가 마모됩니다.

여분의 USB 3.0 포트가있는 경우 스왑 공간에 플래시 드라이브를 사용하는 것이 좋습니다. SSD만큼 빠르지 만 고장이 나면 교체하기에 충분히 저렴한 고속 플래시 드라이브가 많이 있습니다. 아마존에서 빠른 검색을 통해 20 달러 미만의 저렴한 16GB USB 3.0 플래시 드라이브와 60 달러 미만의 일부 64GB 드라이브가 있음을 알 수 있습니다.

전체 플래시 드라이브를 스왑 공간으로 분할하면 필요할 때 스왑 공간을 확보 할 수 있으며 반복해서 작성되는 메모리를 쉽게 (그리고 저렴하게) 교체 할 수 있다는 것을 알고 안심할 수 있습니다.


3
SSD로 교체하지 않을 경우 +1, 이와 같이 사용할 경우 수명이 매우 짧은 구성 요소로 교체 할 경우 -1.
Aviator45003

1
@TC가 맞습니다. ArmanX-플래시 (SSD)를 사용하지 않으려는 경우 USB에서 플래시를 사용하는 이유는 무엇입니까? 비이성적입니다.
warren

2
@TC : 매체의 마모로 인해 스왑에 SSD를 사용하지 않는 것은 정당하지 않은 도시의 전설입니다. 스와핑은 "항상"발생하지 않지만 거의 발생하지 않습니다. 또한 이것은 Win7 릴리스 이후 Microsoft에서 광범위하게 연구 된 것으로 스왑의 일반적인 액세스 패턴은 SSD에 적합합니다 (우분투가 아닌 Windows이지만 Linux는 훨씬 성능이 떨어질 수 있음). 아무도 읽지 않는 어리석은 로그 파일 (일반적으로 모든 회선을 동기화)로 인해 SSD를 닳아 버리는 쓰기 작업이 수백 (또는 수천 배) 더 많습니다.
데이먼

논리가 잘못되었습니다. 썸 드라이브가 실제로 SSD만큼 빠르면 왜 더 저렴한가요?
Agent_L

균형입니다. 한편으로 스왑 파일을 갖는 것이 좋습니다. 반면에, 스왑 파일이 SSD를 닳게되면 (아마도 문제가되지 않을 것입니다), 저렴한 교체품을 사용하는 것이 좋습니다. 그리고 $ 20의 플래시 드라이브는 훨씬 더 좋습니다 100 달러 이상의 SSD.
ArmanX

1

1GiB (그리고 아마도 더 적은)의 스왑으로도 괜찮습니다. 업무용 컴퓨터는 일반적으로 140-150 MiB 이하를 사용합니다. 기가 바이트는이를위한 과도한 프로비저닝입니다.
당신은 기가 바이트의 수백에서 데이터 세트를 필요로 계산 작업을 수행하지 않는 한 (이 중요하다!) 데이터에 액세스 할을 어느 정도 접근하면 패션, 당신은 그것보다 훨씬 더 큰 스왑을 갖고 싶어하지 않습니다. 그러나 데이터 파일을 단순히 메모리로 매핑하면 해당 응용 프로그램에서 동일하게 작동합니다.

하지만 더 많은 스왑이 더 많은 것을 도와줍니다. 더 많은 것이 항상 좋습니다!

예를 들어 16GiB의 스왑이 어떤 차이를 만들지 (또는 64GiB를 생각할 것인지) 고려하십시오. 이 16GiB를 사용하지 않으면 처음부터 따로 보관할 수 없습니다. 그러나 당신이 그들을 사용하면 어떻게됩니까? 주 메모리와 비교할 때 디스크 속도가 너무 느립니다. SATA-600 SSD를 사용하더라도 16GiB 전송에는 다른 구성에서 30 ~ 40 초가 걸리며 2 ~ 4 배가 걸립니다.
이제 누군가가 한 번에 16GiB가 아니라 12KiB 정도의 페이지를 페이징 및 페이징하고 있다는 사실을 필연적으로 반대 할 것입니다. 그럼에도 불구하고 요점은 의미합니다. 몇 페이지 만 스왑 인 / 아웃해야하는 경우 16GiB 스왑이 필요하지 않지만 16GiB 스왑이 필요한 경우 해당 페이지도 한 방향 또는 다른 방식으로 전송할 수 있습니다.

이론적으로, 모든 사용자의 99.9 %는 스왑없이 64GiB 머신 (또는 8 + GiB 머신)을 사용할 수 있으며, 어떤 것도 빠진 것을 눈치 채지 못할 것입니다. 그러나 이것은 권장되지 않습니다.
첫째, 운영 체제가 실제 메모리가 부족할 때 버릴 수있는 항목에 대한 선택이 적기 때문에 차선책입니다. 사용할 수없는 두 가지가 있습니다. 사용되지 않는 것을 스왑하거나 버퍼 캐시에서 페이지를 버립니다. 스왑이 없으면 할 수있는 일이 한 가지뿐입니다. 버퍼 캐시에서 페이지를 버리는 것은 무해하지만 성능에 눈에 띄게 영향을 줄 수 있습니다.
둘째, 스왑이 없으면 개인 익명 매핑이 실패 할 수 있습니다. 일반적으로 발생하지는 않지만 결국 모든 메모리를 만족시킬 수있는 물리적 메모리가 충분하지 않고 스왑이없는 경우 운영 체제에는 다음 중 하나만 선택할 수 있습니다.
셋째, 두려운 OOM 킬러는 이는 다소 임의의 프로세스가 종료되는 것을 의미합니다. 아니요 괜찮습니다. 이것은 당신이 일어나고 싶은 것이 아닙니다.

그 말에 따르면, 설치된 RAM의 양의 X 배로 교체 해야하는 것과 같은 조언은 수십 년 동안들은 것을 반복하고 (그리고 이해하지 못했습니다!) 무언가를 반복 한 사람들로부터 온 것입니다. 전에.
"RAM 2 배 사용"규칙은 1980 년대와 1990 년대의 경험을 기억하기 쉬웠으며 결코 "황금 진실"(대부분의 사용자에게 잘 작동하는 것)이 아니 었으며 오늘날에는 적용되지 않습니다. .

당신은 쉽게 감당할 수 있는 합리적인 양의 스왑을 가져야합니다 (예를 들어, 기가 바이트). 그래서 OS는 오래된 것들을 페이징 아웃 할 수 있고, 한번 더 많은 메모리를 요구할 때 세상은 즉시 끝나지 않습니다. 하지만 그게 다야.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.