ks.dgoon.lee log

장고 기본 캐싱은 프로덕션에 쓰면 망함


2024/02/01 22:44:01 #django #dev #cache #linux #server #oom killer

https://docs.djangoproject.com/en/5.0/topics/cache/#local-memory-caching

Azure 에서 가입하면 무료로 주는 (제일 싼 Linux VM + 제일 싼 Postgresql) 조합에 블로그와 웹 개발 연습용 사이트를 배포해 두었다. 메모리 1GB 짜리 머신에다가, 파이썬이 워낙 메모리 많이 쓰기도 하고, 이메일 보내는 것 때문에 redis + celery worker 도 돌리고 있어서 약간 불안한데... 요 며칠 꼭 자고 일어나면 서버가 먹통이 되어 있는 것이다. 그래서 Azure 콘솔에 들어가서 리붓 하기를 3일... 뭔가 잘못되었다고 생각하고 syslog 를 눈에 불키고 뒤지기 시작.

답은 로그에 있다!

메모리 부족이었다. 그냥 프로세스를 죽이고 끝나기만 하면 좋을텐데, 프로세스를 죽이지 않고 서버가 죽어버렸다... 아니 정확히는 OOM Killer 가 프로세스 저격하긴 했는데, 그래도 못버티고 죽는다. 시간이 지나면서 계속 메모리 사용량이 늘다 죽는 이유가 뭘까 생각했더니 뭐 뻔하다. 장고에서 기본으로 제공하는 캐싱이 메모리 처묵처묵하다가 죽은듯... 문서에 이렇게 쓰여있는거 보고 불안하다 싶었는데, 검색엔진 크롤러가 긁어가는 정도로도 이럴 줄이야.

Note that each process will have its own private cache instance, which means no cross-process caching is possible. This also means the local memory cache isn’t particularly memory-efficient, so it’s probably not a good choice for production environments. It’s nice for development.
일단 default caching 쓰는 부분은 모두 제거했다. 어차피 뭐 사람도 안오는 블로그니까 캐시 없어도 된다. 나중에 필요하면 memcache 나 redis 로 해보자. (가급적 같은 서브넷에 있는 다른 머신에...)
그렇게 기본 캐싱 쓰는 부분을 없애고 나니 귀신같이 안 죽고 잘 살아간다. 굿!


댓글 0개