답변:
프로덕션 서버의 스왑을 해제 할 수 있습니까?
아니요. 항상 스왑 공간이 있어야합니다.
Wordpress 업데이트 후 PHP는 우리가 설명하는 것보다 훨씬 많은 RAM을 먹기 시작했습니다. RAM이 부족하고 스왑을 활성화하면 상황이 느려질 수 있지만 (경우에 따라 제공되는 내용에 따라 때때로 가끔씩 조금씩) 로그인 할 수 있으며 문제를 찾아 수정하려고합니다. 그것.
RAM이 부족하고 스왑이 없으면 프로세스가 중단되고 작업이 중단되며 유일한 옵션은 재부팅입니다. 그러나 재부팅을 할 때까지 문제가 발생했을 수 있습니다.
내 세상에서 부서지는 것은 느리게하는 것보다 훨씬 나쁘다.
물론 시스템이 지속적으로 많은 양의 스왑을 사용 하고 있는 경우 ( 오래된 캐시 된 항목을 옮기는 방법으로 일부를 사용 하는 경우가 많음 ) 분명히 문제가 있습니다 ( "RAM 삽입"). 안전망이 반드시 권장됩니다.
SpamapS의 의견에 대한 답변 :
"성공한 웹 사이트"세계에서는 핫 페일 오버,로드 밸런싱 및 기타 도구를 사용하여 시스템이 폭발하고 나머지 사이트에 영향을주지 않습니다. 그러나 많은 돈이 필요합니다. 여분의 하드웨어를 갖는 것은 돈을 들여도 대부분의 사이트에서 경제적이지 않습니다.
가동 시간에 대한 귀하의 의견에 전적으로 동의하지 않습니다. 사람들이 귀하의 사이트를 볼 수없는 경우 전통적인 전자 상거래 설정에서는 귀하가 귀하의 사이트를 구입할 수 없습니다 . 이것은 전자 상거래가 아니며, 어떤 종류의 기간 동안이라도 다운되면 모든 온라인 상업 이익이 훨씬 더 많은 결함을 취합니다. 회사를위한 사이트와 서비스를 호스팅하고 자체 사이트를 운영하기 때문에 알고 있습니다. 느림 = 심술지만 다운 = 분노. 한 번에 1 분 동안 만 다운 되더라도 사용자에게 "유지 관리 중단"통지가 두 번 이상 표시되면 사이트를 유지할 수 없다고 가정합니다.
느린 서버는 이상적이지는 않지만 항상 스왑이 실행되는 것은 아니며 문제를 해결하는 동안 계속 실행되도록하는 것이 최후의 수단입니다.
또한 머신에 서비스가 하나만 있다고 가정합니다. 다시 말하지만 모든 것을 분리하기 위해 메가 벅이 있다면 현실 세계에서 상황이 함께 모입니다. 여러 웹 사이트, ssh 데몬, ftp 서버, 전자 메일 서버 등 하나의 프로세스가 스왑으로 누출되면 다른 서비스에도 영향을 미치지 않을 수 있습니다. 스왑이 없으면 모든 것이 즉시 임의 종료 될 수 있습니다. 당신은 그것을 통제 할 수 없습니다.
물론 스왑이 유일한 대답은 아닙니다. 램이 부족할 때 경고하기 위해 모니터링이 필요하지만 플러그를 뽑고 재부팅하는 것만으로는 대부분의 사람들에게 답이 아닙니다. 나는 이것이 당신이 책임지는 다국적 웹 사이트에 효과가 있다고 확신하지만, 대부분의 인터넷을 구성하는 필사자에게는 상업적 자살입니다.
프로덕션 서버에서 스왑하는 데 동의하지 않아야합니다.
내 경험상 회전식 디스크 스왑은 시스템의 예측 가능성을 떨어 뜨리고 전체 시스템 오류를 좌절시키는 경향이 있습니다. 로컬 느린 디스크로 작업을 수행하는로드가 많고 널리 사용되는 서버는 장애 상태보다 훨씬 나쁜 상태로 빠르게 스파이럴됩니다. 응답 시간이 정상 수준의 100 배로 증가하고 콘솔 또는 ssh를 통한 로그인과 같은 간단한 작업에는 몇 분이 걸릴 수 있습니다.
SSD 스왑은 특별한 경우이며 일반적으로 시스템을 강제 종료시키는 탐색 시간을 적어도 제거합니다. 그러나 쓰기 속도는 여전히 느리기 때문에 제어 불능 프로세스에서 복구하기 위해 오랜 시간을 기다리게됩니다.
스왑이 없으면 LAMP 서버는 프로세스를 강제 종료하여 RAM을 확보합니다. 적절한 모니터링은이를 경고하고 중요한 프로세스가 종료 된 경우 프로덕션에서 서버를 제거해야합니다. 최악의 경우 로그인 방법이 모두 종료되어 하드 리셋 / 전원주기를 수행해야합니다. 이 최악의 경우는 여전히 제어 범위를 벗어난 스와핑 머신에서와 비슷하지만 감지하기가 훨씬 어렵습니다.
PHP를 사용하는 경우 메모리 제한을 활성화하고 로그의 오류를 모니터링하십시오. 여기 트릭이 있습니다. 프로덕션 서버보다 dev 서버 에서 한도를 낮게 설정하십시오 . 아파치에서 mod_php를 사용하는 경우 MaxRequestsPerChild를 수천으로 설정하여 시간이 지남에 따라 httpd가 너무 커지기 전에 죽습니다. 무엇보다도 메모리 사용량을 모니터링하십시오! 시간이 지남에 따라 메모리가 소진되는 경우가 종종 있으며 문제를 디버깅하는 동안 누수 된 서비스를 주기적으로 다시 시작하면됩니다.
스왑 공간은 시스템이 활성 프로세스에 실제 메모리가 필요하다고 결정하고 사용 가능한 미사용 실제 메모리가 충분하지 않은 경우 사용됩니다. 시스템에 더 많은 메모리 자원이나 공간이 필요한 경우 실제 메모리의 비활성 페이지가 스왑 공간으로 이동하여 다른 용도로 해당 실제 메모리를 비 웁니다.
이 상황은 서버에서 여러 번 발생합니다.
ㅏ). 최적화되지 않은 스크립트는 많은 양의 메모리를 소비 할 수 있습니다
. b). 백업과 같은 스크립트는 항상 큰 메모리를 소비합니다
c). 복잡한 교통
따라서 스왑 공간을 확보하는 것이 좋습니다.
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