![조명 설정에도 VPS 메모리가 소진됨](https://rvso.com/image/568261/%EC%A1%B0%EB%AA%85%20%EC%84%A4%EC%A0%95%EC%97%90%EB%8F%84%20VPS%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B0%80%20%EC%86%8C%EC%A7%84%EB%90%A8.png)
여기에 리눅스 멍청한 놈이 있습니다. Ubuntu 11.04 서버에 256MB VPS가 있고 "free -m"을 실행하면 결과에 사용 중인 모든 메모리가 표시됩니다(두 번째 줄 re: buffers/cache 포함). 각각 약 20MB를 씹는 5개의 Apache 프로세스만 실행하고 있다는 점을 고려하면 이것이 매우 이상하다는 것을 알았습니다. MYSQL은 30MB를 차지합니다. 내 지식과 "상위"에 따르면 다른 메모리 돼지는 작동하지 않습니다.
관련될 수 있는 설정:
PHP memory_limit = 32M
MYSQL key_buffer = 16M
Prefork MPM Maxclients = 10
그래서 이러한 설정을 검토했을 때 자연스럽게 maxclients가 너무 높다고 생각되어 5로 전환해 보았습니다. 이제 메모리가 여전히 100% 사용된 것으로 표시될 뿐만 아니라 트래픽이 전혀 발생하지 않음에도 불구하고 웹사이트 로드가 훨씬 더 느려집니다. 지금 나 말고도. 나는 이것을 이해하지 못한다. 단일 Apache 프로세스가 "KeepAliveTimeout" 창(2초로 설정) 내에 수신된 클라이언트의 모든 요청을 처리한다고 생각했습니다. 내 초기 구성으로. 최대 클라이언트 10개 중 내 페이지 로드 시간은 약 0.3ms이므로 단일 프로세스가 문제 없이 이를 처리해야 합니다. 맞습니까?
그래서 다음에는 maxclients의 극단적인 수준인 1로 이동했습니다. 내 메모리는 여전히 100% 사용량이고 내 사이트는 고통스러울 정도로 느리게 로드됩니다. 나는 여기서 완전히 헤매고 있는 멍청한 놈이다. 기본 서버 설정에 관해 제가 읽은 많은 튜토리얼에 따르면, 이제 잘 될 것 같습니다.
돕다! 제발!
Edit:
total used free shared buffers cached
Mem: 256 256 0 0 0 0
-/+ buffers/cache: 256 0
Swap: 0 0 0
답변1
이는 Linux가 대부분의 메모리를 캐시로 사용하고 필요에 따라 일부를 실행하는 모든 애플리케이션에 반환하기 때문입니다.
그러니 당황하지 마세요.너는 괜찮아. MaxClients를 다시 기본값으로 변경합니다.
편집: OpenVZ에서 실행 중인 것 같습니다. 아래 David Schwartz 답변을 참조하세요.
답변2
스왑이 없으므로 OS가 물리적 메모리를 보존하기가 매우 어렵습니다. 기본적으로 절대 액세스되지 않을 가능성이 높지만 절대 액세스되지 않을 것이라는 것을 증명할 수 없는 데이터를 저장할 장소가 없습니다. 따라서 RAM에 보관하는 것 외에는 선택의 여지가 없습니다.
예를 들어, 서버가 시작될 때 시작되지만 결코 액세스되지 않는 서비스를 생각해 보세요. 재배치되는 도서관에 연결될 수 있습니다. 이러한 재배치는 메모리의 코드 페이지를 더럽힙니다. 시작 시 일부 메모리를 할당하고 해당 내용을 수정할 가능성이 높습니다. 스왑을 사용하면 서비스가 오랫동안 실행되지 않거나 메모리가 부족한 경우 해당 페이지를 메모리에서 제거하고 스왑에 저장할 수 있습니다. (대부분 검색되지 않을 가능성이 높지만 커널은 그런 위험을 감수할 수 없습니다. 와 같은 서비스를 고려해보세요 ssh
!)
스왑이 없으면 커널은 며칠 동안 액세스하지 않은 더티 페이지를 제거할 방법이 없습니다. 그래서 소중한 물리적 메모리는 쓸모없는 쓰레기로 가득 차게 됩니다.
업데이트: 분명히 이것은 OpenVZ의 인공물입니다. 스왑이 있으며 표시되는 메모리 번호는 의미가 없습니다. 귀하의 성능 문제는 귀하가 통제할 수 있는 어떤 것으로 인해 발생할 수도 있고 그렇지 않을 수도 있습니다.