내 개인 웹 서버를 실행하는 작은 Rackspace 호스팅 Debian VPS가 있습니다. 지난 몇 주 동안 Apache(저는 2.2.16을 실행 중입니다)가 무기한 정지되는 것처럼 보이는 경우가 여러 번 있었습니다. Apache를 다시 시작하면 /etc/init.d/apache2 restart
문제가 다시 발생할 때까지 문제가 해결됩니다. 이 때문에 DNS 또는 가상 디렉터리 구성에 문제가 없다고 확신합니다(이 문제가 발생하기 훨씬 전부터 변경된 사항은 없습니다).
때로는 PHP 및 MySQL과 관련된 동적 페이지만 영향을 받고 정적 HTML 페이지는 로드 속도가 느립니다. 다른 경우에는 Apache를 다시 시작할 때까지 모든 페이지가 무기한 중단됩니다. Chrome에 탭이 열려 있으면 잠시 후 ERR_CONNECTION_ABORTED 오류가 발생할 수 있습니다. Apache를 다시 시작하면 ERR_CONNECTION_RESET으로 로드가 중지됩니다.
/var/log/apache2/error.log
존재하지 않는 파일을 찾는 웹 크롤러 외에는 아무것도 없습니다 . 처음에는 RAM 문제인 줄 알았습니다(256MB, 저렴하지만 트래픽은 하루에 수백 건 정도이며 대부분 웹 크롤러입니다). 그러나 스왑은 거의 가득 차지 않고 Apache 프로세스가 유휴 상태입니다. 사용 가능한 메모리는 거의 없지만 Apache를 다시 시작한 후 몇 페이지를 로드한 후에도 거의 동일합니다. 작동할 때 성능은 괜찮습니다. 며칠 동안 가동한 후 작동이 중단되는 원인을 파악하면 됩니다.
MaxClients를 줄이고 MaxRequestsPerChild를 늘리려고 시도했지만 도움이 되지 않았습니다.
<IfModule mpm_prefork_module>
StartServers 2
- MinSpareServers 2
- MaxSpareServers 4
- MaxClients 10
- MaxRequestsPerChild 200
+ MinSpareServers 1
+ MaxSpareServers 2
+ MaxClients 4
+ MaxRequestsPerChild 2000
</IfModule>
(이러한 설정은 기존 설정과 새 설정 모두 인터넷 검색을 기반으로 합니다. 합리적인 구성을 만드는 방법에 대해 상충되는 정보가 많이 있습니다.)
무슨 일이 일어나고 있는지 어떻게 알 수 있나요? 잠재적인 교착 상태를 찾기에 좋은 곳은 어디입니까?
부가 질문: VPS 자체는 괜찮기 때문에 로컬에서 실행하여 Apache가 오작동하기 시작할 때 알려주는 cronjob이 있습니까? (Pingdom과 같은 무거운 오프사이트 모니터링 서비스는 필요하지 않습니다.)