会话数据太多了多少?

Rav*_*pta 5 java session memory-management

我们遇到异常高的内存使用问题.我观察到我们代码中的许多地方都是从DB中提取100条记录,将其打包在自定义数据对象中,将其添加到arraylist并存储在会话中.我想知道在会话中存储数据的建议上限是多少.只是一个好习惯不好的做法有点事.

我正在使用JRockit 1.5和1.6GB的RAM.我使用Jprobe进行了分析,发现应用程序的某些部分内存占用非常大.大部分数据正在进入会话以供稍后使用.

Ant*_*lev 6

如果要在会话中存储数据以提高性能,请考虑使用真正的缓存,因为缓存是应用程序范围的,而会话是按用户进行的,这会导致不必要的重复其他类似的对象.

但是,如果您将它们存储起来供用户编辑此对象(我怀疑,因为数百个对象太多了),请尝试最小化存储的数据量或研究乐观并发控制.


Mic*_*rdt 6

这完全取决于通常存在多少会话(这又取决于您拥有多少用户,他们在网站上停留多长时间以及会话超时)以及服务器具有多少RAM.

但首先:您是否真的使用内存分析器告诉您"高内存使用率"是由会话数据引起的,还是只是猜测?

如果您遇到的唯一问题是生产计算机上的"高内存使用率"(即它可以处理生产负载但性能不如您所愿),最简单的解决方案是为服务器获取更多内存 - 比重新设计应用程序更快,更便宜.

但是,在会话中缓存整个结果集也有不同的原因:如果数据库中的数据发生变化并且用户希望看到该更改,该怎么办?如果要进行缓存,请使用在数据库请求级别执行此操作的现有系统之一 - 它们允许您在用户之间缓存结果,并且它们具有缓存失效的功能.