아파치 모듈에 memcache 조회 부가 들어있는데 CPU 사용량이 대폭 증가했다.
평균 접속 부하는 평소에도 굉장히 높은 서비스이기 때문에 삐끗 실수만 하면 CPU 로드가 펑펑 올라가는 서비스다.
memcache 조회를 위해 오픈/클로즈 비용이 과다하다고 판단하였다. 고비용의 소켓콜을 포함한 잡다 시스템 콜을 수 차례 부를 것이다. 만약 활성 세션이 없다면 tcp 3hs까지 뚫어야 한다. 고비용이다.
memcache의 핸들 얻기를 요청 때 마다 하는 것은 불합리하다. 따라서 httpd request 단위마다 할당하도록 수정한다.
netstat -an 에 해당 접속 세션만 카운트해보니 역시 수천건이 살아있다.
request 자체가 많기 때문에 이 역시 불합리한 설정이다. 그냥 fork 단위로 줄이는게 장땡이다.
apr의 초기화시 fork 초기에만 콜되는 init가 있다. 여기서 핸들을 얻고, 프로세스 종료시에 핸들을 돌려준다.
netstat -an 결과 살아있는 세션이 httpd의 프로세스 수 이하로 줄었다. 오픈/클로스를 극소화 했다는 이야기다.
memcached 풀링을 위한 프락시를 만들고 싶다. 커넥션을 수백개 선행으로 깔아놓은 후, httpd와는 IPC로 데이터 교환. wt 방식 캐시 제공.