LAMP 서버에 스왑 파티션이 필요합니까?


14

실제로 우분투 서버의 파티션을 LAMP로 교체해야합니까? 나는 그것이 필요하지 않다고 생각하지만, 그것이 예기치 않은 행동을 일으키지 않을지 확실히 아는 것이 좋습니다.
실제로 내 생각은 :

  • 서버가 최대 절전 모드로 전환되지 않습니다
  • 스왑 인 경우로드 밸런싱 / 트래픽 쉐이핑 등에 대해 고려해야합니다.

프로덕션 서버의 스왑을 해제 할 수 있습니까?

감사!

답변:


14

프로덕션 서버의 스왑을 해제 할 수 있습니까?

아니요. 항상 스왑 공간이 있어야합니다.

Wordpress 업데이트 후 PHP는 우리가 설명하는 것보다 훨씬 많은 RAM을 먹기 시작했습니다. RAM이 부족하고 스왑을 활성화하면 상황이 느려질 수 있지만 (경우에 따라 제공되는 내용에 따라 때때로 가끔씩 조금씩) 로그인 할 수 있으며 문제를 찾아 수정하려고합니다. 그것.

RAM이 부족하고 스왑이 없으면 프로세스가 중단되고 작업이 중단되며 유일한 옵션은 재부팅입니다. 그러나 재부팅을 할 때까지 문제가 발생했을 수 있습니다.

내 세상에서 부서지는 것은 느리게하는 것보다 훨씬 나쁘다.

물론 시스템이 지속적으로 많은 양의 스왑을 사용 하고 있는 경우 ( 오래된 캐시 된 항목을 옮기는 방법으로 일부를 사용 하는 경우가 많음 ) 분명히 문제가 있습니다 ( "RAM 삽입"). 안전망이 반드시 권장됩니다.


SpamapS의 의견에 대한 답변 :

"성공한 웹 사이트"세계에서는 핫 페일 오버,로드 밸런싱 및 기타 도구를 사용하여 시스템이 폭발하고 나머지 사이트에 영향을주지 않습니다. 그러나 많은 돈이 필요합니다. 여분의 하드웨어를 갖는 것은 돈을 들여도 대부분의 사이트에서 경제적이지 않습니다.

가동 시간에 대한 귀하의 의견에 전적으로 동의하지 않습니다. 사람들이 귀하의 사이트를 볼 수없는 경우 전통적인 전자 상거래 설정에서는 귀하가 귀하의 사이트를 구입할 수 없습니다 . 이것은 전자 상거래가 아니며, 어떤 종류의 기간 동안이라도 다운되면 모든 온라인 상업 이익이 훨씬 더 많은 결함을 취합니다. 회사를위한 사이트와 서비스를 호스팅하고 자체 사이트를 운영하기 때문에 알고 있습니다. 느림 = 심술지만 다운 = 분노. 한 번에 1 분 동안 만 다운 되더라도 사용자에게 "유지 관리 중단"통지가 두 번 이상 표시되면 사이트를 유지할 수 없다고 가정합니다.

느린 서버는 이상적이지는 않지만 항상 스왑이 실행되는 것은 아니며 문제를 해결하는 동안 계속 실행되도록하는 것이 최후의 수단입니다.

또한 머신에 서비스가 하나만 있다고 가정합니다. 다시 말하지만 모든 것을 분리하기 위해 메가 벅이 있다면 현실 세계에서 상황이 함께 모입니다. 여러 웹 사이트, ssh 데몬, ftp 서버, 전자 메일 서버 등 하나의 프로세스가 스왑으로 누출되면 다른 서비스에도 영향을 미치지 않을 수 있습니다. 스왑이 없으면 모든 것이 즉시 임의 종료 될 수 있습니다. 당신은 그것을 통제 할 수 없습니다.

물론 스왑이 유일한 대답은 아닙니다. 램이 부족할 때 경고하기 위해 모니터링이 필요하지만 플러그를 뽑고 재부팅하는 것만으로는 대부분의 사람들에게 답이 아닙니다. 나는 이것이 당신이 책임지는 다국적 웹 사이트에 효과가 있다고 확신하지만, 대부분의 인터넷을 구성하는 필사자에게는 상업적 자살입니다.


여기에서도 같은 경험이 있었는데 ... 제 생각에는 고의적 인 결정이 아닌 실수였습니다. 스왑이없는 서버는 특히 sshd를 죽이기로 결정한 경우 복구하기가 어렵습니다.
Javier Rivera

나는 약 16Gb RAM을 가지고 있으며, 절반은 빠른 IO를 위해 캐시되고 나머지는 LAMP를 위해 스왑은 항상 무료이거나 몇 메가가 있지만 항상 꺼져 있다고 생각합니다.
Arman

3
성공적인 웹 사이트 세계에서는 응답이없는 것이 깨진 것보다 나쁩니다. 사용자는 실제로 FAST 실패 (자바 스크립트 프론트 엔드 코드가 정상적으로 btw 처리해야 함)에 감사하지만 느리게 싫어할 것입니다. 스왑을 버리고 피할 수없는 것만 지연시킵니다. -1
SpamapS

1
@Oli : N + 1을 실행해도 더 이상 메가 벅 또는 많은 비용이 들지 않습니다. 실제로는 특별한 기술조차 거의 사용하지 않습니다. 서버가 여러 가지 이유로 다운되는 것은 불가피하며, 이것이 문제가되지 않도록 막는 것은 아닙니다. 모든 것을하는 독립형 LAMP 서버가 있다면, 비용이 더 많이 든다. t1.micros 및 EBS 스냅 샷이있는 EC2에서로드 밸런서를 두 개 이상 설정하면 비용이 매우 저렴할 수 있습니까? 구글에서 데이터를 확인 ... 나는 그것의 명확한 생각 bit.ly/hB1AD1
SpamapS

1
실제 서버 사례를 다루는 훌륭한 답변. 여분의 하드웨어, LB, 모니터링, RAM 캐시 등을 추가하는 것은 매우 중요하며 스왑 공간이 부족하여 주변을 둘러 보지 않을 경우이를 설정하고 디버깅 할 시간이 있습니다.
ImaginaryRobots

4

프로덕션 서버에서 스왑하는 데 동의하지 않아야합니다.

내 경험상 회전식 디스크 스왑은 시스템의 예측 가능성을 떨어 뜨리고 전체 시스템 오류를 좌절시키는 경향이 있습니다. 로컬 느린 디스크로 작업을 수행하는로드가 많고 널리 사용되는 서버는 장애 상태보다 훨씬 나쁜 상태로 빠르게 스파이럴됩니다. 응답 시간이 정상 수준의 100 배로 증가하고 콘솔 또는 ssh를 통한 로그인과 같은 간단한 작업에는 몇 분이 걸릴 수 있습니다.

SSD 스왑은 특별한 경우이며 일반적으로 시스템을 강제 종료시키는 탐색 시간을 적어도 제거합니다. 그러나 쓰기 속도는 여전히 느리기 때문에 제어 불능 프로세스에서 복구하기 위해 오랜 시간을 기다리게됩니다.

스왑이 없으면 LAMP 서버는 프로세스를 강제 종료하여 RAM을 확보합니다. 적절한 모니터링은이를 경고하고 중요한 프로세스가 종료 된 경우 프로덕션에서 서버를 제거해야합니다. 최악의 경우 로그인 방법이 모두 종료되어 하드 리셋 / 전원주기를 수행해야합니다. 이 최악의 경우는 여전히 제어 범위를 벗어난 스와핑 머신에서와 비슷하지만 감지하기가 훨씬 어렵습니다.

PHP를 사용하는 경우 메모리 제한을 활성화하고 로그의 오류를 모니터링하십시오. 여기 트릭이 있습니다. 프로덕션 서버보다 dev 서버 에서 한도를 낮게 설정하십시오 . 아파치에서 mod_php를 사용하는 경우 MaxRequestsPerChild를 수천으로 설정하여 시간이 지남에 따라 httpd가 너무 커지기 전에 죽습니다. 무엇보다도 메모리 사용량을 모니터링하십시오! 시간이 지남에 따라 메모리가 소진되는 경우가 종종 있으며 문제를 디버깅하는 동안 누수 된 서비스를 주기적으로 다시 시작하면됩니다.


1
경험을 공유해 주셔서 감사합니다. ssh가 Inf.를 복용했을 때 비슷한 문제를 설명했습니다. 방금 프로세스에 메모리가 제한되도록 강요하여 ssh를 실행하고 버그가있는 스크립트를 수정할 수있었습니다.
Arman

인터넷에서 본 프로덕션의 스왑 공간에 대한 가장 흥미로운 토론 중 하나입니다. (전체 스레드, 장단점)
dpb December

3

스왑 공간은 시스템이 활성 프로세스에 실제 메모리가 필요하다고 결정하고 사용 가능한 미사용 실제 메모리가 충분하지 않은 경우 사용됩니다. 시스템에 더 많은 메모리 자원이나 공간이 필요한 경우 실제 메모리의 비활성 페이지가 스왑 공간으로 이동하여 다른 용도로 해당 실제 메모리를 비 웁니다.

이 상황은 서버에서 여러 번 발생합니다.

ㅏ). 최적화되지 않은 스크립트는 많은 양의 메모리를 소비 할 수 있습니다
. b). 백업과 같은 스크립트는 항상 큰 메모리를 소비합니다
c). 복잡한 교통

따라서 스왑 공간을 확보하는 것이 좋습니다.

자세한 내용은 https://help.ubuntu.com/community/SwapFaq


설명해 주셔서 감사합니다. 하나에 버그가있는 스크립트가있는 경우 어떤 경우에도 서버가 중단되고 시스템 제한이 스크립트를 제어해야합니다. 그렇지 않습니까?
Arman

aneeshep, 트래픽이 많을 때 교환하는 경우 시스템은 평소보다 100 배 느려집니다. 일반적으로 허용되지 않습니다.
SpamapS

2

스왑을 사용하면 서버 불안정에 대한 추가 보호 기능이 제공됩니다. RAM이 부족한 경우와 스왑이없는 서버에서 소프트 크래시가 발생할 수 있습니다.

내가 말할 때 나는, 지금은 소수에 아마있어 여전히 그들이 추천하는 데 사용처럼 메인 메모리를 가지고, 많은 스왑으로 두 번 가지고, 의미가 있습니다. RAM이 96GB 인 시스템에서도 가능합니다.

비용이 많이 들지 않으며 언젠가 필요하다면 기뻐할 것입니다. 스왑을 활성화하는 이유는 매우 간단한 비용-이익 분석입니다. 해! :-)


0

Oli에게 감사의 말씀을 전합니다. 파티셔닝은 항상 친환경적인 주제입니다! Oli의 게시물에 전적으로 동의하며 서버의 스왑 사용량을 모니터링하는 데 사용하는 스크립트를 공유하고 싶습니다.

나는 항상 스왑이 발생하지 않고 작동하도록 서버와 서비스를 구성합니다. 언제라도 무언가 잘못되었거나 기껏해야 초기 계획을 극복하고 있는지 확인하십시오.

프로덕션 환경에서 30 분마다이 스크립트를 crontab합니다. Swap usage! = 0k 인 경우 알림을 보냅니다. 문제 가 실제로 잘못 되기 전에 문제에 대해 신속하게 조사 / 조치를 취할 수 있습니다 .

검사를 수행하지 않고 bash, top, echo, awk 및 working mail 명령이 필요합니다.

희망이 도움이됩니다.

#!/bin/bash
CURRSWAP=$(top -b -n1 |grep Swap |awk '{print $4}')
ECOMM="echo $CURRSWAP means healthy, I wont take any action."
CURRDATE=$(date)
MAILDST="your@email.addr"

case $CURRSWAP in
  [0]k) $ECOMM
        exit 0
        ;;
  *)    echo -e "Server: $HOSTNAME \n Date: $CURRDATE \n Current Swap partition usage: $CURRSWAP" | mail -s "Warning from $HOSTNAME" -- $MAILDST
        exit 0
        ;;
esac
exit 0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.