性能往往出现在你做容易忽略的地方!
最近开发了一个WML服务端,部署在tomcat6.0,默认内存64M。做压力测试,用LR每秒跑50个用户并发,结果2小时后内存的永久区就满了,且不回收,查程序,感觉任何可以优化的地方都已经优化了,最后穷尽的办法,还是老样子。最好还是感觉我们公司的测试人员NB,发现java.util.concurrent.ConcurrentHashMap$Segment的对象越来越多,经网上资料分析,极有可能是session堆积造成的。这个时候才恍然大悟,因为压力测试的时候,都没模拟新的用户,每次访问服务端都会创建一个新的session对象,保存在服务器端,如果session有效期不过期,那么就一直保存着,知道内存耗尽。只要知道问题的所在,就比较容易解决问题了。我们都知道session的过期时间是在web.wml里面设置,原来我设置了一天,现在改成30分钟,不再出现内容消耗的情况了,谢天谢地谢测试。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
得出的结论是,如果想保存session时间久一点,那么设计tomcat的内存大一点,防止请求量的情况出现内存耗尽。如果session在测试中用到不多或者失效性不强,没有必要加内容,直接修改wen.xml即可。
附上网上一个“专家”的分析,http://ddupnow.javaeye.com/blog/621619
posted on 2010-04-16 15:04
蒋家狂潮 阅读(2414)
评论(3) 编辑 收藏 所属分类:
JWeb