Linux 웹 서버에 대한 스왑을 완전히 해제해야합니까?


22

최근 내 친구는 충분한 메모리가있는 Linux 웹 서버에서 스왑을 끄는 것이 좋습니다. 내 서버의 용량은 12GB이며 현재 최대로드시 4GB (캐시 및 버퍼를 계산하지 않음)를 사용합니다.

그의 주장은 정상적인 상황에서 서버가 모든 RAM을 사용하지 않으므로 OutOfMemory 상황이 발생할 수있는 유일한 방법은 일부 버그 / ddos ​​/ 등으로 인한 것입니다. 따라서 스왑이 해제 되면 시스템에 메모리가 부족하여 결국 프로그램 호기 메모리 (웹 서버 프로세스 일 가능성이 있음)와 다른 프로세스가 충돌하게됩니다. 경우 스왑이 켜져 RAM과 스왑을 모두 사용하게되고 결국 동일한 충돌이 발생하지만 그 전에는 sshd와 같은 중요한 프로세스를 스왑하고 많은 스왑 작업을 시작하여 주요 속도 저하가 발생하기 시작합니다. 이 방법은 ddos ​​시스템에서 거대한 지연으로 인해 완전히 사용할 수없는 상태가 될 수 있으며 웹 서버 프로세스를 로그인하고 종료하거나 모든 수신 트래픽을 거부 할 수 없습니다 (ssh는 제외).

이게 옳은 거니? RAM이 충분하더라도 스왑 파티션이 어떤 식 으로든 유용하다는 사실과 같이 뭔가 빠졌습니까? 꺼야합니까?


6
따라서 모든 대답은 1. 가상 메모리가 많을수록 무조건 적은 것보다 낫고, 2. 스왑이 가능해야한다는 것입니다.
NekojiruSou

2
스왑은 독점적으로 '예약'메모리를위한 것이라고 생각하는 것은 잘못된 지침입니다. 스왑은 사용하지 않는 메모리를 넣을 수 있도록하기위한 것이므로 실제 메모리를보다 효율적으로 사용할 수 있습니다. 항상 스왑이 있어야합니다. 메모리가 부족하면 메모리가 부족합니다. 이것은 용량 관리의 문제이며 스왑 경향이 아닙니다. 가상 메모리 의도를 더 잘 설명하려는 serverfault.com/a/332205/75118 응답이 다소 깁니다 .
Matthew Ife

답변:


27

나는 그것이 당신의 유스 케이스에 달려 있다고 말하고 나머지 답변은 이것을 꽤 잘 다루었습니다. 스왑의 4G는 결국 안전을 살 수있는 저렴한 방법입니다. 그리고 나는이 값이 싸기 때문에 사람들이 그것을 끄고 싶지 않다고 생각합니다.

그러나 수사 학적 질문으로 대답하겠습니다. 돈이 문제가되지 않고 12G RAM과 4G 스왑이있는 시스템과 16G RAM이 있고 스왑이없는 시스템 중 하나를 선택할 수 있습니까? 불행하게도 대부분의 사람들은 여전히 그들이 RAM의 16G를 선택할 거라고 대답 것이며, 여전히 내 지점 누락 스왑의 4G를 추가합니다.

그리고 또 다른 참고로, 나는 개인적으로 스와 피 시스템이 충돌 시스템보다 나쁘다는 것을 발견했다. 충돌 한 시스템은 대기 백업 서버가 훨씬 빨리 작동하도록 트리거합니다. 그리고 액티브-액티브 (또는로드 밸런싱 설정)에서 충돌 한 시스템은 훨씬 빨리 회전에서 벗어날 것입니다. 스왑없는 시스템의 승리.


14

메모리가 충분하더라도 스왑을 해제하지 않는 것이 좋습니다. 서버에 더 많은 메모리가 필요하지만 가져 오지 못하면 충돌이 발생합니다. 그러나 스왑 영역이있는 경우이를 어느 정도 방지 할 수 있습니다.

예, 스왑을 사용하면 서버 성능이 저하되지만 최소한 작동 가능하고 액세스 가능합니다. 그런 다음 서버가 스왑을 사용하기 시작하면 필요할 때 더 많은 메모리를 추가하도록 계획 할 수 있습니다.

나는 발견 이 페이지 스왑에 대해 이야기합니다. 세 번째 섹션을 살펴보십시오.

대신 스왑을 해제, 당신은 제어 할 수 있습니다 swapiness을 .


1
상황에서 스왑과 RAM을 모두 소비 하고 충돌 할 것이라고 설명했습니다 . 몇 달 동안 실행되며 30 % 이상의 메모리를 사용한 적이 없습니다. 따라서 정상 작동 중에 너무 빨리 100 %로 점프 할 가능성은 거의 없습니다. 따라서 일부 프로세스가 미쳐서 8GB를 소비하면 OS가 얻을 수있는만큼 많은 메모리를 소비한다는 의미입니다.
Poma

@Poma, 스왑의 다른 이점도 있습니다. 또한 스왑이있을 때 시스템의 수명을 연장 할 수 있습니다. 저렴한 HD 드라이브를 사용할 수 있으면 스왑이 메모리보다 클 수 있기 때문입니다.
Khaled

6

아니요, 좋은 생각이 아닙니다. '일부 프로세스가 미쳤다'는 것은 사전에 이미 전화를해야한다는 의미입니다.

ulimit -d

프로세스 당 데이터 세그먼트 메모리 당 한계를 설정하기 위해 프로세스 작성 시간 또는 그 이전에-스레드 수에 대한 한계

ulimit -T

프로세스 당. ulimit는 당신의 친구입니다. 스왑을 끄기 전에 메모리 조정 안내서 중 하나를 읽어보십시오. DOS 공격이나 잘못된 프로그램을 처리하기 위해 커널 매개 변수를 변경할 수도 있습니다.

다음과 같이보십시오 : 시스템의 총 메모리는 RAM + 스왑입니다. 12GB의 스왑이있는 경우 스왑을 비활성화하여 시스템 VM 용량을 효과적으로 절반으로 줄입니다. 나쁜 생각. 이것은 논쟁이 아니며, 실제로 다른 사람들이 이전에 나쁜 경험에서 알았던 것을 몇 년 동안 읽는 것입니다. 친구가 독서를해야 할 수도 있습니다.


5

다른 사람들이 말했듯이 "swappiness"매개 변수를 사용하여 절대적으로 필요한 경우를 제외하고는 스왑을 사용하여 서버를 효과적으로 중지 할 수 있습니다. 이것은 커널이 메모리 페이지를 얼마나 적극적으로 스왑 아웃 할지를 제어합니다.

현재 설정되어있는 것을 볼 수 있습니다.

cat /proc/sys/vm/swappiness

(루트로) "실시간"으로 편집 할 수 있습니다 :

# echo "10" > /proc/sys/vm/swappiness

이를 유지하려면 /etc/sysctl.conf에 다음을 추가하십시오.

vm.swappiness=10

2

또 다른 좋은 방법은 zRAM을 사용하여 RAM으로 교체하는 것입니다. 나는 이것이 좋은 생각이라고 생각합니다! 성능을 위해 스왑을 전혀 사용하지 않는 것과 같지만 시스템이 매우 많이로드 될 때 충돌을 방지합니다!

이거 봐요:

http://www.webupd8.org/2011/10/increased-performance-in-linux-with.html

내 경험 : 지금 쓰고있는이 컴퓨터에서 스왑을 비활성화하여 4Gb RAM이 생겼습니다 (2009 년에는 많이되었습니다!). 나는 단지 몇 가지 문제를 겪었고, 그중 하나는 실수로 동시에 127 장의 사진처럼 열리고있었습니다!

그러나 .. 이것은 워크 스테이션이며 중단되면 재부팅 할 수 있습니다. 서버에서 스왑을 사용하는 것이 더 좋으며 RAM 인 스왑이 나에게 좋습니다.


1

이미 충분히 명확하게 되었 듯이 이것은 좋은 생각이 아닙니다. 다른 것이 없다면 스왑은 상황이 정상적이지 않을 때 호흡 공간을 제공합니다. 예를 들어 일반적으로 하루에 몇 명의 방문자 만있는 하나의 시스템에서 잡지에 페이지가 언급되어 트래픽이 급증했습니다. 이로 인해 웹 서버는 커미셔닝 된 이후 처음으로 스왑 공간을 사용하게되었습니다. 스왑 공간이 없다면 상황이 그리 좋지 않을 것입니다.


0

좋은 생각이 아닙니다. 우선 순위가 다른 2 개의 스왑 파일을 정의 할 수 있습니다. 하나는 사용 중이고 다른 하나는 첫 번째가 채워질 때 사용됩니다.

또한 vm.swappiness를 사용하면 디스크 스와핑이 얼마나 적극적으로 수행되는지 제어 할 수 있습니다.


0

vm.swappiness에 0을 설정 한 경우 반드시 시스템이 스왑되지 않음을 의미하지는 않습니다. 커네의 경향이 스왑하는 경향을 결정하는 매개 변수이지만 스왑을 해제하지는 않습니다.

다시 말하지만, 스와핑은 나쁘지 않지만 스 래싱입니다. sysstat 데이터를 살펴보면 꽤 좋은 포인터가 될 것입니다.

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