정태영

현재 unfix 서버에는 apache + mod_fcgid 환경에서 fastcgi 를 지원하고 있다. 그런데 fastcgi 를 적용시킨 후 가끔 apache 가 먹통이 되는 현상이 생겨버렸다.

대부분의 apache 프로세스가 D state 를 가지게 되면서 더 이상 프로세스를 만들어내지 못하게 되서 요청을 처리하지 못하게 되는 것 같은데, D state 는 Uninterruptible sleep 을 의미하므로 fastcgi 프로세스에서 interrupt 를 disable 시킨채로 sleep 상태에 들어가서 이런 문제가 생기는 것으로 보인다.

그렇다고 하루종일 아파치가 정상적으로 동작하고 있나를 확인할 수는 없기에 스크립트를 하나 작성해봤다.

BASH:
  1. #!/bin/sh
  2.  
  3. cnt=0;
  4. for x in `ps -C apache2 -o stat|grep D`;do
  5.     let cnt++;
  6. done
  7.  
  8. if [ $cnt -ge 10 ];then
  9.     kill -HUP `cat /var/run/apache2.pid`
  10. fi

sort 와 uniq 를 이용해서 숫자를 셀 수도 있지만 정상적인 경우에 D stat 를 가지는 프로세스가 존재하지 않으므로 for 를 이용하기로 했다. 꺄아! 과연 효과는 -_-! 두둥!

정태영

apache2 가 안정화 단계에 들어간지 벌써 수 년이 흐른 것 같다. 내가 처음 언픽스를 만들 때만 해도 apache2 와 php 의 조합에서 생기는 여러가지 문제들을 찾아볼 수 있었기 때문에 난 apache 1.3 버젼대를 선택했고 별다른 문제가 없었던 고로 apache2 로 업데이트해야할 이유를 찾지 못하고 있었다.

어느샌가 gentoo 팀에서 mod_fastcgi 를 portage 에서 제거해버렸고, (사실 mod_fastcgi 는 업데이트가 안 된지 상당한 기간이 흐르긴 했다.) mod_webdev, mod_fcgid 등은 apache-2 전용이라 사용할 수 없었기 때문에 apache-2 로의 업데이트를 고려해봐야겠다는 생각이 들었다.

그치만 내가 사용하는 mod_autoindex hack 의 경우 apache-1.3 용 패치만을 제작해두었기 때문에 apache-2 로 업데이트를 하기 위해서는 mod_autoindex 를 새로 해킹해야할 상황!!

apache-2 용 mod_autoindex hack 을 제작할 테스트 머신이 있기는 하지만 요새들어 코드 작업이 그다지 잘 잡히지 않는데 고민이다. -_-;; 업데이트를 하고 나면 svn+webdav 조합도 사용이 가능해지고 뭐 이래저래 좋아질 거 같기는 한데...