2012-05-19 2 views
6

검색 기능이있는 앱이 있습니다. 이 기능은 24 시간 동안 캐시 된 거대한 개체 (사전)에서 검색어를 조회합니다. 물체는 약 50,000 개의 키이고 무게는 약 10MB입니다.캐싱은 메모리 소비에 어떤 영향을 줍니까?

내 호스팅에서 메모리 사용량을 프로파일 링 할 때 몇 가지 쿼리를 수행 한 후 메모리 사용량이 약 50MB에서 450MB 이상으로 늘어나고 호스팅 제공 업체가 응용 프로그램을 종료 할 것을 알았습니다.

그래서 나는 여기서 무슨 일이 일어나고 있는지 궁금합니다. 특히 캐시가 각 요청에 대해 메모리를 어떻게 활용합니까?이를 해결하기 위해 수행 할 수있는 작업은 무엇입니까?

+0

어떤 캐싱 기술을 사용하고 있습니까? Memcached? – Lycha

+0

지금은'FileBasedCache'를 사용하고 있습니다. –

+1

파일 캐시가 메모리 누수를 일으키지 않습니다. 프로젝트에 쿼리 세트 나 개체를 로컬 메모리에 저장하는 다른 장소가 있습니까? 즉, [contenttype manager does] (https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#the-contenttypemanager) – San4ez

답변

1

Django FileBasedCache는 성능 문제로 알려져 있습니다. 당신은 다음 링크에서 큰 그림을 얻을 수 있습니다 :

A smarter filebasedcache for Django

Bug: File based cache not very efficient with large amounts of cached files

버그가 늘 논쟁 해결 로 설정 : 내가 고치지 않을 것 (wontfix)거야

을,에 파일 시스템 캐시가 캐싱을 테스트하기위한 쉬운 방법으로 의도 된 근거는 심각한 캐싱이 아닌 전략입니다. 기본 캐시 크기와 에 의해 구현 된 컬 전략은 파일 캐시를 명확히해야합니다.

+0

예제에서 언급 한 것처럼 많은 수의 개체를 캐시하지 않습니다. 나는 열쇠가 잔뜩있다. 나는 당신의 모범이 적용된다고 생각하지 않는다. 또한 각 쿼리 후에도 메모리 사용량이 증가합니다. 어느 시점에서는 안정적이지만, 호스팅 제공 업체가 앱을 종료합니다. –

0

는 캐싱 전략들이 있기 때문에 모두 지원 만료로 Memcache를 나 레디 스 같은 KVS를 사용하는 것이 좋습니다. 또한 기대되는 기능이 검색 관련 일 경우 ElasticSearch와 같은 전용 검색을 고려하십시오.

도구 하우투을 사용할 수 있습니다 :

Installing memcached for a django project

http://code.google.com/p/memcached/wiki/NewStart

http://redis.io/commands/expire

https://github.com/bartTC/django-memcache-status

http://www.elasticsearch.org/guide/reference/index-modules/cache.html

관련 문제