Aug 08 2007
태터툴즈 설치형 - 블로그아이콘/파비콘에 의한 CPU, DB 과부하 발생 원인과 해결방안
유료 계정(마루 호스팅)을 사용하고 있는 메인 블로그가 7일 오후 2시경 부터 서비스가 되지 않는 상황이 발생하였습니다.
호스팅 업체로부터 2시 반쯤에 전화 받고 알았습니다. 허허;;
호스팅 업체분 말씀으로는 CPU 과부하 상태인데, DB 액세스가 상당히 많은 상태라고 하더군요. 그리고는 아파치 로그와 MySQL 로그 던져주고 ‘원인 해결하면 전화주세요’ 라고 이야기하시고는 끊으시더군요.(무심하기도 하시지… 엉엉)
아파치 로그 파일을 보니, 최근에 댓글하고 트랙백을 달아둔 다른 분 블로그에서 제 계정으로 index.gif(블로그 아이콘)에 대한 요청이 초당 4~5번 정도로 일어나고 있었습니다.
(실제로 가보니 그 페이지 댓글이 몇천개더군요… 그럼 페이지 히트는 몇만 대였겠죠.)
이건 단순한 파일 요청 폭주니까 큰 영향이 없을 거라 생각했는데…
MySQL 로그 파일을 보니 태터 세션 테이블 액세스쪽이 폭주가 일어나고 있었습니다.
시간이 찍혀 있지 않았지만 왠지 느낌상 동시에 일어난 일 같다는 생각을 했습니다.
하지만 gif 파일을 요청하는데 왜 DB 액세스가 일어나는지에 대해서는 태터 구조를 모르니까 확인하기가 쉽지 않더군요.
그래서 TNF에 질문했습니다.
inureyes님(TNC 직원 분이신가요?)께서 고맙게도 적절한 답변을 남겨 주셨습니다. 그리고 적극적으로 해결하려는 움직임도 보여 주시는 것 같구요.(버그 트래킹에 등록하셨으니… 언젠간 해결될지도…)
여기까지는 사건 히스토리를 주절거려 봤구요. inureyes님의 답변을 제 나름대로 정리해 봅니다.
index.gif 요청은 블로그 설치폴더/.htaccess의 URLRewrite를 통해 blog/index.gif.php로 포워드되고, 해당 php에서 파싱을 통해 아이콘을 전달한다고 합니다. 이 때 파싱 작업 중에 세션 테이블을 사용한다네요.
(제 생각에는 파싱 작업보다는 DB 액세스 부분에서 CPU 부하가 더 있을 것 같습니다.)
마찬가지로 favicon.ico 요청 또한 블로그 설치폴더/.htaccess의 URLRewrite를 통해 blog/favicon.ico.php로 포워드되고 똑같은 작업을 합니다.
아직 해결된 버전은 없고 응급처치 방안은 두 가지가 있습니다.
(둘 중 하나만 하시면 됩니다)
1. blog/index.gif.php와 blog/favicon.gif.php 파일의 이름을 바꿉니다.
2. .htaccess 파일을 찾아서
RewriteRule ^favicon\.ico$ blog/favicon.ico.php [E=SURI:1,L]
RewriteRule ^index\.gif$ blog/index.gif.php [E=SURI:1,L]이 두 라인 앞에 #을 붙여서 주석처리합니다.
첫 번째 방법은 타 사이트에서 자신의 블로그 아이콘이나 파비콘이 나타나지 않습니다. (당연하겠죠?)
두 번째 방법은 favicon.ico와 index.gif를 설치 폴더 루트에 따로 준비하시면 블로그 아이콘이나 파비콘이 나타날 것이고(gendoh님이 알려주셨고, 단독블로그 사용하시는 분들만 가능합니다.), 그냥 위의 방법대로만 하시면 첫번째 방법과 마찬가지의 효과가 나타납니다.
유료 계정 돈 내고 쓰면서도 호스팅 눈치 보는 신세인데…
조금이라도 부하가 걸릴 만한 것들은 미리 제거하는 센스가 필요한 것 같습니다. ^^
