본문 바로가기

BUGboard

트러블슈팅 - 속도저하 : 세마포 제한 시간이 만료되었습니다


BUG board 는 APMSETUP 7 을 사용합니다.
(Apache 2.2.14)

BUG board 는 외부로 서비스하는 것이 아니라
게임개발팀 내부에서만 사용하기 때문에 무엇보다 속도가 빨라야 하고,
또 실제로 페이지 로딩이 빠릅니다.
(기존의 다른 어떤 BTS 보다도 페이지 출력 속도가 빠릅니다)



그런데, 몇번의 윈도우 업데이트를 거치고 났더니
어느날 부터인가 페이지 로딩이 종종 느려지는 현상이 발견되었습니다.
아파치 에러로그에는 아래와 같은 메시지가 출력이 되었구요.

[warn] (OS 121)세마포 제한 시간이 만료되었습니다.  : winnt_accept: Asynchronous AcceptEx failed.
[warn] (OS 64)지정된 네트워크 이름을 더 이상 사용할 수 없습니다.  : winnt_accept: Asynchronous AcceptEx failed.

관련 내용을 찾아봤더니, 윈도우에서 아파치를 구동할 때 생길 수 있는 문제라고 하고,
APMSETUP 6 에서는 이 문제에 대한 수정 내용이 들어갔었다는데,
어쩐일인지 APMSETUP 7 에서는 포함되어 있지 않았습니다.

수정 방법은 아파치의 httpd.conf 에서 아래 부분을 찾아
그 다음줄에 Win32DisableAcceptEx 을 삽입하면 됩니다.
 
<IfModule !mpm_winnt_module>
Win32DisableAcceptEx
</IFModule>


이왕 httpd.conf 를 손대는 김에,
Access.log 용량도 함께 줄여 보았습니다.

BUG board 는 왼쪽에 채팅창이 따로 있는데,
이 채팅창은 ajax 로 구현하여, 일정 시간에 한번씩 (비교적 자주)
새 채팅글이 있는지 확인을 하고 있습니다.

그러다 보니, Access.log 양이 엄청나게 커져서
주기적으로 로그를 백업해야 하는 단점이 있었습니다.
(20명이 한달동안 BUG board 를 켜놓으면 Access.log 용량이 1G가 넘어갈 정도 입니다)



그래서, Access.log 를 하루에 한번씩 다른이름으로 새로 쌓으면서,
채팅창에서 로딩하는 페이지는 로그에서 제외하도록 CustomLog 부분을 수정하였습니다.


CustomLog "logs/access.log" common
 
아파치에서 위 부분을 찾아 아래와 같이 수정하면 됩니다.

SetEnvIfNoCase Request_URI "\.(gif|jpg|png)$" do_not_log
SetEnvIfNoCase Request_URI "/chat/list\.php" do_not_log
SetEnvIfNoCase Request_URI "/chat/messenger_list_main\.php" do_not_log
CustomLog "|bin/rotatelogs logs/access_%Y%m%d.log 86400" common env=!do_not_log





[ 내용 추가 ] - 2014.11.20

"지정된 네트워크..." 관련 설정에 내용 추가합니다.
아파치 버전에 따라 httpd.conf 를 다음과 같이 수정해주세요.

Case 1)   2.4 미만인 경우
EnableMMAP off
EnableSendfile off
Win32DisableAcceptEx

Case 2)   2.4 이상인 경우
EnableMMAP off
EnableSendfile off
AcceptFilter http none
AcceptFilter https none