Web2012. 1. 30. 15:53

XP 서버에 XAMPP 1.6.4 (Apache + php + mysql) 환경에서 구동하는 경우,

트래픽이 그다지 없고, 대역폭이 여유로운 상황에서 서버 사양이 P4 3.0 Ghz 에 Ram 1G 환경이라
웹서버가 느려질 이유가 전혀 없음에도 불구하고, 상당히 느린 반응 속도가 고질 적인 문제 였습니다.

현재 한참 개발 중인 Zeroboard XE 문제도 아니었던 것이 Zeroboard 4 나 Wordpress 를 사용할 때에도
상당히 느린 반응 속도를 가지고 있었습니다.

생각 날때마다 mysql 이나 httpd.conf 설정을 살펴 보긴 했지만 해결이 되지 않았었는대, 문제 해결을 위한
가장 기본적인 접근 방법을 잊고 있었더군요. (서버를 만지는걸 어느 순간 신경 안쓰게 된 탓이겠지요)

Apache 의 error 로그를 뒤져 보았습니다.

[Fri Sep 08 04:02:33 2006] [warn] (OS 121)세마포어 시간 초과 기간이 만료되었습니다. : winnt_accept: Asynchronous AcceptEx failed.
[Fri Sep 08 04:02:33 2006] [warn] (OS 64)지정된 네트워크 이름을 더 이상 사용할 수 없습니다. : winnt_accept: Asynchronous AcceptEx failed.


 위와 같은 에러가 정말 많더군요. 이상 적인 CPU 점유율과 느린 반응의 원인이 MS 환경 (Win32- xp,2000 서버) 의 멀티 프로세스 모듈과 어우러진 아파치의 버그 더군요.

해결 방법은 httpd.conf 에 다음과 같은 라인을 추가 하는 것 입니다.

Win32DisableAcceptEx


"Win32DisableAcceptEx"  이 라인 핵심 라인 입니다.

추가 시켜 주시고 아파치를 재구동 하면 됩니다.

http://www.mydigitallife.info/2006/03/09/winnt_accept-asynchronous-acceptex-failed-error-in-apache-log/  (영문)

이곳에서 확인하시면 서버 안정성에 문제를 발생 시킬 수도 있다고는 하는대, 서비스가 엄청나게
느려지는 것 보다는 나아서 httpd.conf 를 바꾸고 반응 속도를 보았더니 속이 다 시원합니다.

acceptEX 는 MS 가 만든 확장 Network API 라더군요. Linux 나 다른 OS 환경에서는 발생하지 않는 오류입니다.
개인적인 생각에 확장 API 를 사용하지않는 설정 이기 때문에 안정성과는 큰 관련이 없을 것이라 여겨집니다.

오류가 나온지 한참 되었는대도 아파치에서 수정되지 않는 걸 보면 MS 쪽 문제 일려나요


<추가>

Win32DisableAcceptEx 는 Apache version 2.0.49 부터 이후 버전에만 가능합니다

Apache 1.X 버전을 사용하고 있는 분들은 다른 해결책을 찾으셔야 합니다.


참고로 JSP환경에서 톰캣 서블릿 엔진과 아파치를 연동하여 사용할 경우에도 위와 같은 상황은 적용됩니다.
혹시, 아파치 2.2 버전에서 Win32DisableAcceptEx 구문을 넣었는데 이번에는 다른이유로 웹속도가 느려진다면
다음과 같이 지정해 주세요. 그러면, 속도가 눈에 띄게 향상될 것입니다.
참고로 이 설정은 MS에서 만든 확장 Network API 인 AcceptEx를 사용하지 않고 오리지널 Accept를 사용하도록 하는 설정입니다.
<IFModule mpm_winnt_module>
    Win32DisableAcceptEx
</IFModule>
 

Posted by iWithJoy