我们遇到了异常高的内存使用问题。我观察到代码中的许多地方,我们正在从数据库中提取100条记录,将其包装在自定义数据对象中,将其添加到arraylist中并存储在 session 中。我想知道在 session 中存储数据的建议上限是多少。只是一个好习惯,坏习惯之类的东西。
我正在使用JRockit 1.5和1.6GB RAM。我使用Jprobe进行了性能分析,发现应用程序的某些部分的内存占用非常大。这些数据大部分将进入 session 以备后用。
最佳答案
这完全取决于通常存在的 session 数(这又取决于您拥有的用户数,他们在站点上停留的时间以及 session 超时)以及服务器的内存量。
但首先:您是否实际使用了内存分析器来告诉您“高内存使用率”是由 session 数据引起的,还是您只是在猜测?
如果您唯一的问题是生产机器上的“内存使用率过高”(即它可以处理生产负载,但表现不如您所愿),最简单的解决方案是为服务器获取更多的RAM –比重新设计应用程序更快,更便宜。
但是,出于另一个原因,在 session 中缓存整个结果集也是不好的:如果数据库中的数据发生了变化并且用户希望看到这种变化怎么办?如果要缓存,请使用在数据库请求级别执行此操作的one of the existing systems-它们将允许您在用户之间缓存结果,并且具有缓存失效的功能。
关于java - 多少 session 数据太多?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2116626/