如何清除Google app engine里data store过期的_ah_session
Google app engine把session数据存储在datastore里的_ah_session表里,并且不会清除,即使session已经过期了。这让我想到了weblogic似乎也不会清除过期了的jdbc session数据。
_ah_session不清除的话,_ah_session会越来越大,直到达到空间限制。那么应该清除过期了的_ah_session,新建一个cron job,定时请求servlet清除存储session的_ah_session。
Unloading class sun.reflect.GeneratedMethodAccessor
是正常的现象,说明大量使用反射生成的class被jvm正确回收了。
看来你应该是permgen区outofmermory了,可以尝试在启动配置中加大permgensize,不过不建议太大,不要超过300M,而且这样也只能治标不能治本。
jdk dynamicproxy每次都会生成新的代理类,如果你不卸载这些代理类,permgen区outofmemory是迟早的事情。
如果你真的不想卸载加载到jvm中的代理类,就要考虑复用生成的代理,这样的话,jdk的dynamicproxy是不行的,你要使用cglib来生成可复用的代理类。
因此,你有两条路可以走
1、继续使用jdk的dynamicproxy,但不要禁止class卸载。
2、使用cglibproxy,复用代理类,避免大量生成的代理类。
加上-noclassgc,可使jvm不卸载加载的class