[t:/]$ 지식_

apr, apache module과 memcache

2015/02/16

경험

아파치 모듈에 memcache 조회 부가 들어있는데 CPU 사용량이 대폭 증가했다.

평균 접속 부하는 평소에도 굉장히 높은 서비스이기 때문에 삐끗 실수만 하면 CPU 로드가 펑펑 올라가는 서비스다.

분석

memcache 조회를 위해 오픈/클로즈 비용이 과다하다고 판단하였다. 고비용의 소켓콜을 포함한 잡다 시스템 콜을 수 차례 부를 것이다. 만약 활성 세션이 없다면 tcp 3hs까지 뚫어야 한다. 고비용이다.

조치 1.

memcache의 핸들 얻기를 요청 때 마다 하는 것은 불합리하다. 따라서 httpd request 단위마다 할당하도록 수정한다.

현상

netstat -an 에 해당 접속 세션만 카운트해보니 역시 수천건이 살아있다.

분석

request 자체가 많기 때문에 이 역시 불합리한 설정이다. 그냥 fork 단위로 줄이는게 장땡이다.

조치 2.

apr의 초기화시 fork 초기에만 콜되는 init가 있다. 여기서 핸들을 얻고, 프로세스 종료시에 핸들을 돌려준다.

결과

netstat -an 결과 살아있는 세션이 httpd의 프로세스 수 이하로 줄었다. 오픈/클로스를 극소화 했다는 이야기다.

해보고 싶은 것.

memcached 풀링을 위한 프락시를 만들고 싶다. 커넥션을 수백개 선행으로 깔아놓은 후, httpd와는 IPC로 데이터 교환. wt 방식 캐시 제공.





공유하기













[t:/] is not "technology - root". dawnsea, rss