2007년 4월 13일 금요일

Apache 웹 서버 장애 해결하기 3 (include를 잘못하여 무한 루프가 돌 경우)

include를 잘못하여 무한 루프가 돌 경우
요즘에는 php와 mysql을 연동하여 많이 사용하고 있는데, 프로그래밍 과정에서 의 실수로 php 파일에서 같은 php 파일을 include하는 경우가 있다. 또는 a.php 파일에서 b.php 파일을 include하고 b.php 파일에서 다시 a.php 파일을 include하는 경우도 그러한 경우일 것이다. 이러한 경우에는 무한 루프가 돌 게 되어 결국은 아파치 데몬이 금새 Maxclients에서 지정한 개수로 차 버리게 되는데, 어떤 파일에서 무한 루프가 돌고 있는지 찾기가 힘들다. 따라서 임시로 다음과 같이 include를 하지 못하도록 차단을 하는 방법이 있다.
# iptables -A INPUT -p tcp -i lo -s xxx.xxx.xxx.xxx --sport 1024:65535 -j DROP
이는 같이 서버 내에서 include 시에는 lo(Lookback Interface)를 통해 sport 가 1024 이후의 하이 포트를 이용하여 통신한다는 특성을 이용한 것이다. 그러 나 이 설정을 하였을 경우 로컬 서버에서 클라이언트 포트를 전혀 사용할 수 없게 되므로 다른 서비스에도 장애가 되기 때문에 임시로만 사용하기 바란다. 또는 ps aux grep http로 보이는 프로세스에서 ls -la/proc /pid/로 각각의 http 프로세스가 어떤 파일을 참조하고 있는지 일일이 추적하는 방법도 있다.(예:cwd -> /home/user1/public_html/infinite_loop/)

댓글 없음: