2012-02-27 3 views
0

나는 memcached를 사용해야하는 응용 프로그램을 만들고 있습니다. 내가 밀접한 관계에 문제가 있고, 잠시 후 난에 startign 해요 - 모든 제외한 greate 작동 cliend이 아래Memcached 메모리 누수가

net.spy.memcached.MemcachedClient

:

는 꽤 좋은 클라이언트를 발견 기억 누출로 싸우십시오.

닫기 연결이 가능하고 "종료"방법이 필요했습니다. 나는이 같은이 방법을 사용한다면 : - 로그에 난이 방법은 연결을 여는, 그것이 memcached를 아무것도를 추가하기 전에, 그것은 연결을 closeing 있다고 볼

MemcachedClient c = new MemcachedClient(new InetSocketAddress(
         memcachedIp, memcachedPort)); 
c.set(something, sessionLifeTime, memcache.toJSONString()); 
c.shutdown(); 

나는 아무것도 memcached를을 추가로 문제가 있습니다.

어떻게해야할까요?

또한 - 방법을 발견 : 2 초 후에 연결을 닫아야하지만 내 바람둥이에 jmx 모니터를 연결하고 그 Memcached thread 2 초 후에 완료되지 않습니다 -이 스레드가 완료되지 않았습니다. 모두 ...

+0

나는이 클라이언트에 많은 경험이 없지만 [Google의이 페이지] (http://code.google.com/p/spymemcached/wiki/Examples)를 보았습니다. 예제의 일부에는'try/catch' 블록이있는 것으로 보입니다. 가능하다면 시도해 보셨습니까? – Rob

+0

죄송합니다 - try/catch가 아닙니다. – Ilkar

답변

1

memcached에 추가하는 데 문제가있는 이유는 set (...) 함수가 비동기 적이며 memcached로 보내지는 대기열에 해당 작업을 넣는 것뿐입니다. 이 작업이 끝난 직후에 종료를 호출하기 때문에 실제로 작업을 수행 할 시간이 없습니다. shutdown()을 호출하기 전에 응용 프로그램 스레드가 실제로 작업이 완료 될 때까지 기다리려면 set (...). get()을 호출해야합니다.

또한, 나는 shutdown으로 timeout을 호출 한 후에 IO 스레드가 죽지 않는 것을 경험하지 못했습니다. 이것이 실제 버그인지 확인하는 한 가지 방법은 Spymemached를 사용하여 독립 실행 형 프로그램을 실행하는 것입니다. 프로세스가 완료 될 때 종료되지 않으면 문제가 발견되었습니다.