为了数据传递的方便,项目中使用了大量的session、hashmap等,结果现在jvm内存占用极高,主要表现为登录用户一多就死(三四十个用户,tomcat内存调到1G才勉强使用)。
在网上查了好久,感觉能导致内存大量占用的不良习惯项目中都有了:往session放大量数据,往hashmap放大量数据,随便new对象,等等。
小弟们皆新手,现已不知从何着手,如何挽回,希望前辈们能指点一二,不胜感激。
在网上查了好久,感觉能导致内存大量占用的不良习惯项目中都有了:往session放大量数据,往hashmap放大量数据,随便new对象,等等。
小弟们皆新手,现已不知从何着手,如何挽回,希望前辈们能指点一二,不胜感激。
如果确实需要放很多东西进去,建议还是使用cache吧,比放session好的多
1.http://dl.javaeye.com/upload/picture/pic/73010/1174a21e-cb61-349b-b100-a2cb9ec7f26d.png2.http://dl.javaeye.com/upload/picture/pic/73020/87f44fbd-a137-310e-b34a-661c5e6904d2.png3.http://dl.javaeye.com/upload/picture/pic/73018/acce3f6d-373d-39bc-ba50-97fb1ef9de90.png4.http://dl.javaeye.com/upload/picture/pic/73016/0de2755f-7998-3b74-bd17-b5f2acd58dbc.png5.http://dl.javaeye.com/upload/picture/pic/73014/26ce86bf-453c-365a-9d24-0f5f9641bd00.png6.http://dl.javaeye.com/upload/picture/pic/73012/5b5d5999-a0dd-3cc9-9bf7-425e26f0d1dc.png7.http://dl.javaeye.com/upload/picture/pic/73030/f1f17bf4-a865-3095-b778-0ddc49918aed.png8.http://dl.javaeye.com/upload/picture/pic/73028/5e2b450a-35f8-35e8-ba93-a9b75ae56d5a.png9.http://dl.javaeye.com/upload/picture/pic/73026/439fde7f-aacb-39ba-993b-897da94dd058.png10.http://dl.javaeye.com/upload/picture/pic/73024/ec615e75-6c30-3e6c-96cf-a69bf2e344e7.png11.http://dl.javaeye.com/upload/picture/pic/73022/b97458c1-617b-3c8a-abae-9244d69603e4.png
好像要自己把url复制到地址栏才能看到
如果是大量使用session的话,session可以用request代替。我感觉是你没关闭数据连接,仅仅是感觉。
正解!除了必要的数据,其它全部移到request。
嗯,这下应该可以了。1.http://hi.csdn.net/attachment/201009/26/1185080_1285493770VG8b.png2.http://hi.csdn.net/attachment/201009/26/1185080_1285493773B6eP.png3.http://hi.csdn.net/attachment/201009/26/1185080_128549377493B3.png4.http://hi.csdn.net/attachment/201009/26/1185080_1285493777011t.png5.http://hi.csdn.net/attachment/201009/26/1185080_1285493780zSL0.png6.http://hi.csdn.net/attachment/201009/26/1185080_1285493784JM7J.png7.http://hi.csdn.net/attachment/201009/26/1185080_1285493788HZOK.png8.http://hi.csdn.net/attachment/201009/26/1185080_1285493790qn2n.png9.http://hi.csdn.net/attachment/201009/26/1185080_1285493793Uhrs.png10.http://hi.csdn.net/attachment/201009/26/1185080_1285493799YIAg.png11.http://hi.csdn.net/attachment/201009/26/1185080_1285493803Kpaa.png
我现在的做法是先把session里用过的对象remove掉。
修改你的系统设计吧。
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory=""/>
</Manager>
</Context>
当一个 Session 开始时, Servlet 容器会为 Session 创建一个 HttpSession 对象。 Servlet 容器在某些情况下把这些HttpSession 对象从内存中转移到文件系统或数据库中,在需要访问 HttpSession 信息时再把它们加载到内存中。
Session 的持久化是由 Session Manager 来管理的。 Tomcat 提供了两个实现类
org.apache.catalina.session.StandardManager
org.apache.catalina.session.PersistentManager