그누보드 최신 버전 common.php 패치중 session.gc_probability > 십년전오늘

십년전오늘

10년전 추억의 책장을 넘기며

그누보드 최신 버전 common.php 패치중 session.gc_probability 정보

그누보드 최신 버전 common.php 패치중 session.gc_probability

본문

common.php 파일에

ini_set("session.gc_probability", 100); // 정해진 시간에 100% 가비지 콜렉션

위내용이 이번 패치에 포함되어 있습니다.

위 패치를 하고나면 tcp syn flooding 공격을 받는것 처럼

apache, mysql process가 증가하고 서버 load average 가 최대 300까지 증가하더군요

처음엔 진짜 공격인줄 알고 ddos 방어 서비스를 받아야 겠다고 생각하고 4~5일 고민했습니다.

그런데 같은 서버의 다른 그누보드로 제작된 테스트 사이트는 속도 저하가 전혀 없는 상태더군요.


며칠간 이것저것 다해보고 서버 php, mysql까지 업데이트해보고 아이피 필터링 차단까지 해봐도 소용 없었는데 오늘 16일자 패치된 내역을 삭제해가며 점검해 보니

//ini_set("session.gc_probability", 100); // 정해진 시간에 100% 가비지 콜렉션
를 주석처리하니 바로 process, load average  등이 정상적으로 돌아오네요.

4~5일 고생한걸 생각하면 ;;;.

사이트 속도도 30초정도 기다려야 열리고, 에러나고;;


하루 트래픽 150G~200G,  순방문자 2만5천정도 되는 사이트 입니다.
방문자가 줄어드는 새벽 1시정도 부터는 위 패치 여부와 상관 없이 느려지지 않습니다.

centOS 5.2
apache 2.2
php 5.29
mysql 5.1.35 입니다.

혹시 이런문제 격으신 분 있을지 몰라 올려봅니다.

댓글 전체

---------------------------------------
session.gc_probability integer
session.gc_probability는 session.gc_divisor와 연계하여 gc(쓰레기 수거) 루틴의 시작 확률을 관리합니다. 기본값은 1입니다. 자세한 내용은 session.gc_divisor를 참고하십시오.
session.gc_divisor integer
session.gc_divisor는 session.gc_probability와 결합하여 각 세션 초기화 시에 gc(쓰레기 수거) 프로세스를 시작할 확률을 정의합니다. 확률은 gc_probability/gc_divisor를 사용하여 계산합니다. 즉, 1/100은 각 요청시에 GC 프로세스를 시작할 확률이 1%입니다. session.gc_divisor의 기본값은 100입니다.
----------------------------------------

ini_set("session.gc_probability", 1); // 세션 유효시간 경과에 따른 정확한 자원 반납 루틴
ini_set("session.gc_divisor", 100); // 세션 유효시간 경과에 따른 정확한 자원 반납 루틴

위처럼 사용하시면 됩니다.
session.gc_probability=100 이라는 값이 정상인가요?

ini_set("session.gc_probability", 1); // 세션 유효시간 경과에 따른 정확한 자원 반납 루틴
ini_set("session.gc_divisor", 100); // 세션 유효시간 경과에 따른 정확한 자원 반납 루틴

위처럼 사용해야 되는게 맞다면 이번 패치중 이부분 문제가 있는게 아닐까요?

최신 패치의 session.gc_probability가 100으로 설정되어 있는데
이렇게 하면 서버 httpd, mysql process가 몇백개씩 증가합니다. 당연히 서버 접속이 엄청 느려지고 이용 불가 상태가 되네요. 단 사용자가 적은 새벽시간에는 정상이용 가능합니다.
네. 위에 기재한대로 위 함수는 쓰레기가 된 세션을 자원으로 반납처리하는 루틴입니다. 그러므로 2개 함수가 같이 쓰여야 하고, 가비지컬렉션(gc) probability/divisor 를 나눈값으로 실행되고, 실행되는 시점은 세션이 일어났을 때 루틴이 작동합니다.

그러므로 probability 만 사용하면서 인수값이 100 이라면 모든 세션에 대해 100% 작동하라는 뜻입니다. 당연히 사용자가 많은(세션처리가 많아지겠죠) 시간에는 서버에 상당한 무리가 생기게 됩니다.

패치를 안봤는데 새버젼이 패치가 되었나 보군요.
만약 위 내용대로 패치가 되었다면, 홍 사장님께 피드백을 해야할 것 같습니다.
// 진서기
해당 사이트정도의 방문자 및 사용자라면 gc_divisor 값을 약 1000 정도로 하고 gc_probability 값은 1로 하는게 좋습니다.

즉, 1/1000 정도니 1000회에 1회가 실행된다는 뜻입니다.
1회만 실행되어도 쓰레기세션 청소 및 자원반납 루틴은 모두 정상적으로 처리됩니다.
(서버 무리는 상당히 줄어들 겁니다.)
만약 시간이 지난 세션이 너무 많아(1000회에 1회 실행되므로 지연시간이 생기니..) 빨리 삭제하고 싶다면 gc_divisor 값을 최소 200~300 이상에서 적절히 변경해가면 서버 트래픽을 검토해보고 맞는 값을 적용하시면 되겠습니다.

* 최적의 임계값은 복잡한 계산을 해야 하므로 생략하겠습니다. ㅡㅡ;
전체 239
십년전오늘 내용 검색

회원로그인

진행중 포인트경매

  1. 참여76 회 시작24.04.19 15:40 종료24.04.26 15:40
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT