====== memcached ====== * https://memcached.org/ * [[evcache|EVCache]] * [[https://github.com/memcached/memcached/wiki/ReleaseNotes1518|ReleaseNotes1518 · memcached/memcached Wiki]] 1.5.18 부터 인스턴스 재시작시에도 캐시 내용 유지 가능 ===== 분산 캐시 사용시 주의점 ===== * Java 직렬화 기법등을 사용할 경우, 캐시할 클래스의 필드가 달라지면 문제가 발생할 수 있으므로 클래스를 버저닝하고, 클래 버전에 따라 다른 키를 생성하거나 클래스 버전이 다르면 캐시를 안 한 것으로 간주하도록 처리해야 한다. * 분산 캐시는 내부 망에서의 부하를 유발한다. 대역폭 관리에 신경쓰지 않으면 사용자 폭증시에 웹서버와 DB와 캐시는 모두 CPU 점유율이 낮은데도 불구하고 내부망 대역폭 부족으로 느려지는 상태가 될 수 있다. ===== 설치 ===== * [[https://code.google.com/p/memcached/wiki/NewInstallFromSource|memcached install from source]] ./configure --prefix=/usr/local/memcached make && make test sudo make install ===== 설정 ===== * Ubuntu는 ''/etc/memcached.conf'' 파일을 ''/etc/memcached_server이름.conf'' 로 복사하여 설정하면 설정 파일 갯수만큼 서버가 뜬다. * ''-I 1m'' : 아이템당 메모리 크기를 1mb 로 지정 * [[http://www.alphadevx.com/a/387-Changing-the-maximum-item-size-allowed-by-Memcache|Changing the maximum item size allowed by Memcache]] * Memcached 1.4.2 이상만 가능하며 그 이하는 1mb 제한. * ''-m 2048'' : 전체 캐시 사이즈를 2048m으로 지정한다. 이 크기는 **운영체제가 차지하는 메모리 용량을 염두에 두고 스왑을 사용하지 않고서 사용할 수 있도록 지정해야 한다.** * 가장 기본적인 형태 memcached -p 27012 -m 2048 -d -P /tmp/memcached.pid * ''-t [Core갯수]'' : 쓰레드 갯수를 지정한다. 기본값은 ''4''이며, 해당 장비의 CPU Core 갯수보다 같거나 작게 설정한다. CPU Core 수 보다 많으면 오히려 성능이 떨어진다. ==== memcached 장시간 사용시 Wasted Memory 증가현상 ==== * memcached를 장시간 사용하면서 키 사이즈가 달라질 경우, 기존 키 사이즈 slab이 할당받은 공간이 wasted 상태로 남고, 그 나머지만 신규 key 용으로 사용하게 되어 메모리 부족이 발생하게 되는 현상 * ''-o slab_reassign slab_automove'' : memcached를 장시간 실행할 경우 slab page 재사용 - beta 기능. * [[https://github.com/memcached/memcached/wiki/ReleaseNotes1411|Memcached Release Notes 1.4.11]] * [[http://balodeamit.blogspot.kr/2014/02/slab-reallocation-in-memcache.html|Slab Reallocation in Memcache - 자세한 설명]] * [[http://lks21c.blogspot.kr/2014/10/memcached-wasted-memory.html|크림슈가도넛의 Cookbooks: Memcached Wasted Memory 제거하는 법]] ==== Linux Memory Swap 방지 ==== [[linux:performance|Linux Performance]] $ sudo vi /etc/sysctl.conf vm.swappiness = 0 $ sudo sysctl vm.swappiness=0 ===== Telnet 접속 ===== * [[http://www.alphadevx.com/a/90-Accessing-Memcached-from-the-command-line|Accessing Memcached from the command line]] * [[http://blog.elijaa.org/?post/2010/05/21/Memcached-telnet-command-summary|Memcached telnet command summary - Eli : Memcached, MySQL, Highcharts]] * [[http://www.lzone.de/articles/memcached.htm|Using the memcached telnet interface]] ===== CAS(Compare|Check and Set) ===== * [[http://neopythonic.blogspot.kr/2011/08/compare-and-set-in-memcache.html|Compare and set in memcached]] ===== extstore - 외부 데이터 저장소 ===== * [[https://memcached.org/blog/nvm-caching/|Caching beyond RAM: the case for NVMe]] * [[https://github.com/memcached/memcached/wiki/Extstore|Extstore · memcached/memcached Wiki]] ===== Java Client 구현체 ===== * [[http://code.google.com/p/spymemcached/|spy memcached]] * [[http://code.google.com/p/xmemcached/|XMemcached]] - namespace 지원 * [[https://github.com/gwhalin/Memcached-Java-Client|Memcached-Java-Client]] ===== Version 알아내기 ===== 운영중인 Memcached의 버전을 알아내려면 Telnet으로 접속하여 ''version'' 명령을 내리면 된다. telnet hostname port version ===== SASL Authentication ===== * [[https://code.google.com/p/memcached/wiki/SASLAuthProtocol|SASLAuthProtocol - memcached - SASL Authentication for Memcached - Memcached]] * [[https://code.google.com/p/memcached/wiki/SASLHowto|SASLHowto - memcached - HOWTO use SASL auth. - Memcached]] ===== Ubuntu memcached/sasl ===== sudo apt-get install sasl2-bin sudo saslpasswd2 -a memcached -c [사용자명] # 이후 비밀번호 지정 sudo usermod -a -G sasl memcache sudo usermod -a -G sasl memcache # memcache 사용자를 sasl 그룹에 추가해야 ''/etc/sasldb2'' 읽기 가능 sudo usermod -g sasl memcache # primary group 으로 변경 sudo su - memcache # memcache 사용자의 group 정보 갱신. 이걸 안하면 reboot 필요 * memcached 실행 옵션에 ''-S'' 추가하고 재시작 * 접속시 꼭 **Binary 프로토콜**로 접속해야 한다. ===== Expired Item ===== Memcached는 아이템이 expire 되더라도 메모리에서 삭제하지 않으며, 새로운 데이터 요청이 들어왔을 때 이미 expire 된 아이템을 대체하는 방식으로 작동한다. [[http://stackoverflow.com/questions/5986867/how-does-the-lazy-expiration-mechanism-in-memcached-operate|lru - How does the lazy expiration mechanism in memcached operate?]] > So expired items are only purged when a get request is sent for the expired item or the expired item is cleared because the storage is needed. ===== libmemcached ===== * Ubuntu에서는 ''libmemcached tools'' 패키지 설치 * ''memcslap'' 처럼 이름이 ''memc''로 시작함. * [[http://libmemcached.org|libmemcached]] * [[http://docs.libmemcached.org|libmemcached documentation]] * [[http://docs.libmemcached.org/bin/memaslap.html|memaslap - Load testing and benchmarking a server]] ===== 관리툴 ===== * [[memcached:phpmemcachedadmin|PHP Memcached admin]] * [[memcached:django-memcache-admin|django-memcache-admin]] ===== 참조 ===== * [[http://dom.as/2008/12/25/memcached-for-small-objects/|Memcached for small objects]] * [[http://www.ibm.com/developerworks/kr/library/os-memcached/|IBM DW memcached를 적용하여 사이트 성능 향상]] * [[http://www.javaworld.com/javaworld/jw-04-2012/120418-memcached-for-java-enterprise-performance.html|Use Memcached for Java enterprise performance, Part 1: Architecture and setup]] [[http://www.javaworld.com/javaworld/jw-05-2012/120515-memcached-for-java-enterprise-performance-2.html|2]] * [[https://github.com/twitter/twemcache|twemcache]] : memcached/redis proxy * [[http://software.intel.com/en-us/articles/enhancing-the-scalability-of-memcached|Enhancing the Scalability of Memcached | Intel® Developer Zone]] * [[https://code.google.com/p/memcached/wiki/NewStart?tm=6|Memcached Wiki]] * [[https://code.google.com/p/memcached/wiki/NewCommands|Memcached Protocol Commands]] * [[http://www.solanara.net/solanara/memcached|Memcached - 윈디하나의 솔라나라]] * [[http://helloworld.naver.com/helloworld/textyle/151047|hello world » Memcached의 확장성 개선]]