2011-02-07 5 views
0

나는 memcached와 캐싱을 처음 사용합니다. 나는 1GB의 메모리를 가진 VPS 서버에 우분투 + Tomcat + MySQL에서 실행되는 자바 웹 애플리케이션을 가지고있다.memcached tomcat mysql on 1GB RAM

캐싱을 위해 약 256MB의 memcached 레이어를 추가하는 것이 합리적입니까? 서버에 너무 많은 부하가 걸릴 수 있습니까? 렌더링 된 html 페이지 나 데이터베이스 객체를 캐싱하는 것이 더 적절합니까?

알려 주시기 바랍니다.

+0

귀하의 후반 질문은 너무 광범위하고 많은 요인에 따라 달라집니다. – cherouvim

답변

2

페이지를 캐시하려면 memcached를 사용하지 말고 Varnish을 사용하십시오. 그러나 메모리를 많이 사용하지 않는 좋은 기회가 있습니다. 캐싱 페이지는 계산 및 데이터베이스 작업을 위해 메모리를 교환하지만 페이지 당 많은 메모리가 필요하므로 단일 페이지를 생성하는 데 필요한 계산 및 데이터베이스 작업이 많은 경우 (또는 페이지가 매우 작을 경우에 가장 적합합니다 !). 또한 페이지에서 사용자 별 사용자 지정을 사용하려는 경우 (예 : 장바구니에있는 항목 수 표시) 페이지 캐싱이 효과적이지 않거나 가능할 수도 있습니다. 최소한 진실로 털이 많은 속임수에 빠지기 만하면 (가장자리 쪽 포함, 누구?).

페이지를 캐시하지 않고 앱이 단일 컴퓨터에 있으면 memcached 또는 유사한 점을 사용할 필요가 없습니다. 이와 같은 캐시 서버의 요점은 파일 서버가 디스크를 공유하는 방식과 같이 기본적으로 메모리 서버와 같이 한 시스템의 메모리를 다른 시스템의 캐시로 작동시키는 것입니다. 단일 시스템에서는 모든 메모리를 Java에 제공하고 힙에 오브젝트를 캐시 할 수 있습니다.

오브젝트 관계형 맵퍼를 사용하고 있습니까? 그렇다면 두 번째 수준의 캐시를 지원하는지 확인하십시오. 빅 3 구현 (Hibernate, OpenJPA 및 EclipseLink)은 모두 메모리 내 캐시를 지원합니다. 자신을 캐싱 한 경우보다 훨씬 더 나은 작업을 수행 할 가능성이 높습니다.

그러나 매퍼를 사용하지 않는 경우에는 캐시를 직접 수행 할 수밖에 없습니다. LinkedHashMap에는 LRU 캐시를 구현하기위한 확장 점이 있으며, HashMap과 함께 사람들이 좋아하는 SoftReference가 있습니다. 거기에 아마도 캐시 구현이 있습니다. 다운로드하고 사용할 수 있습니다. Apache Commons 라이브러리에 무언가가 없으면 놀라실 것입니다.

+0

페이지 캐싱을 시도했지만 페이지의 사용자 특정 요소 때문에 couldnt 할 수 있습니다. 나는 최대 절전 모드를 사용한다. 현재 EHCache를 두 번째 레벨 캐시로 사용합니다. 그래서, 나는 지금 EHCache를 사용하는 것이 더 낫다고 생각합니다. –

0

memcached는 서버에 눈에 띄는 부하를 추가하지 않지만 앱에서 사용할 수없는 메모리입니다. 잠시 동안 하나의 응용 프로그램 서버만을 사용하려는 경우에는 in-JVM 캐시를 사용하는 것이 좋습니다.

무엇을 캐시에 저장합니까? 대답은 위의 중간에 있습니다. 데이터베이스에있는 것을 정확하게 캐시하고 싶지 않고 최종 출력을 캐시하지 않으려 고합니다. 애플리케이션에 DB에있는 데이터 모델과 정확히 일치하지 않는 데이터 모델 표현이 있습니다 (예 : User 개체가 여러 테이블에서 여러 쿼리로 구성 될 수 있음). 가장 재사용 가능한 캐시를 제공하십시오.

memcached site에는 일반적인 캐싱과 memcached를 이해하는 데 도움이되는 많은 정보가 있습니다.

0

64MB와 같이 더 작은 크기로 시도해 보시고 어떻게 진행되는지보십시오. Memcache에 더 많은 리소스를 사용하면 다른 모든 리소스에 대한 사용 권한이 줄어 듭니다. 당신은 그것을 시도하고 당신에게 최고의 성능을 줄 것입니다 참조하십시오.