ci 로 db 입출력 작업을 하는 daemon 을 개발하는 중에
실행시간이 지날 수록 메모리 사용량이 계속 늘어나더군요.
while(true):
$sql = "~~~";
$this->db->query($sql);
endwhile;
어디선가 메모리 leak 이 있나해서 찾아보다 보니
db library 의 query 에서 발견한 점 하나 공유드립니다.
db library 에 보면 save_queries 라는 옵션이 있습니다.
db->last_query() 및 profiler 에서 성능측정을 하기 위해서
이 옵션이 true 이면 db->query() 에서 실행한 sql 문자열을 전부 저장을 하더군요.
일반적인 웹페이지의 경우 response 를 하면 자동으로 종료가 되니 문제가 없겠지만
daemon 등의 loop 구조 또는 대량의 자료처리를 할 경우에는 얼마 지나면 php 가 멈춰버립니다 :)
ci user guide 에는 save_queries 옵션 설정에 대한 내용은 없어서 좀 헤멨네요.
$this->db->save_queries = FALSE
으로 코드상에 넣거나
database config 에 $config["save_queries"] = FALSE 를 설정해도 됩니다.
(config 에 넣을 경우에는 db->last_query() 등 연관된 기능은 사용못하겠죠.)
더 궁금하신게 있으면 여기를 참조하시기 바랍니다.
http://www.greeneggmedia.com/blog/entry/undocumented-codeigniter
ci reactor 에 수정요청은 올라가 있는데 언제 반영될지는 모르겠네요.
cron 이나 daemon 종류라면 DB작업이 주가 될것 같습니다.
로직이 복잡 하지 않다면 CI를 사용하지 않는 방법도 대안이 될것 같습니다. ^^