显然不会那么弱智的耗尽了,因为过了一段时间session就超时了,如果没有超时这一说,就是硬盘也会被放满了
服务器端怎么知道那些session是在用的?它最多根据上次访问时间做一些优化,把较长时间不用但是又没有超时的session钝化到硬盘上,但这是特定服务器的事情,而且不一定就能显著的提高效率
服务器端怎么知道那些session是在用的?它最多根据上次访问时间做一些优化,把较长时间不用但是又没有超时的session钝化到硬盘上,但这是特定服务器的事情,而且不一定就能显著的提高效率
我自己做了一个实验
tomcat4.0.6 win2k server
有这么一个JSP,访问的时候放一个10M的StringBuffer变量在session上
<%
System.out.println("1");
StringBuffer sb = new StringBuffer(10*1024*1024);
for(int i=0;i<10*1024*1024;i++){
sb.append("1");
}
session.setAttribute("sb",sb);
System.out.println("2");
%>
Tomcat启动后,在任务管理器中看见内存占用和虚存占用分别是
34M 36M
启动一个IE访问该页,变为
53M 62M
关闭原来的IE,启动一个新的访问该页,变为
74M 79M
关闭原来的IE,启动一个新的访问该页,结果OutOfMemory
经过一段时间,原来的两个session超时,变为
20M 78M
整个过程中我仔细检查了硬盘使用量,没有任何变化
请问如何解释?
对不起,我觉得这是不对的。session没有“使用中”这个概念。只有valid/invalid。
> 理论地争论没有意义。
同意。不要讲“回”字的4种写法。
> apache地临时目录中去找一下session文件到处都是。
各种webserver实现http session的方式各不相同,不过硬盘肯定不如内存快地球人都知道吧。
嗯,很实践的方式。说句题外话,你的tomcat版本太低了,新的不好么?
说的好
>嗯,很实践的方式。说句题外话,你的tomcat版本太低了,新的不好么?
4.0.6是4.0.X中最新的版本了,我不喜欢4.1.XX因为它启动的时候废话太多,我也没注意过它们之间的区别,5.0.X还是Alpha版
另外你说的意气是指什么?我们都是萍水相逢,谈谈技术而已。我不同意你的观点是因为我的经验,不是因为哪个人的。
"Don't get personal~"
session的基本机制,可以查资料找到。
但sesison的具体实现在各种服务器中是有差异的。apache至少是这么处理的。如果你创建了了一个session,那么在临时目录中会有一个已此session id名字命名的文件。当session过期后这个文件会被自动删除。
争论的起因是偶说session并不是完全和内存相关的,海量访问时服务器会有自己的session处理及缓存机制,绝对不会因为session带来内存耗尽的问题。上边那个帖子只是说写一个程序去访问的试验是没有意义的。
jrun也是这种机制。
websphere只是用过,没留意这个。
weblogic没用过。
session中的东西肯定首先是放在内存里的,也许有的服务器会做优化,如果session超时时间较长,可能将长时间不用又还没有超时的session放到硬盘里面,那是特定的服务器的事情,而且我不认为这样可以提高多少效率
另外就是你说的apache是指apache server还是tomcat
作为一个静态页面的服务器,apache server里面session的概念有什么用?
我认为在这里只是讨论而已,如果我完全是对的,那么讨论结束后我一无所获,如果我每次都是对的,那我就不必来了
你把tomcat插入到apache中或者使用webspher、weblogic这些经过大规模商业应用检验的服务器来试。
偶使用eclipse加入tomcat4.0.6的插件调试程序时总是出莫名其妙的错误,明明是好的,但就是出错,重起几次机子就有好了。简直FT。
使用VJ下的webshpere的时候从来没有这些乱七八糟的事情。
webshpere之类的东西太慢,我们用的就是webshpere,但我不认为我们公司做的是企业级应用,虽然他们这么号称,唯一的好处的出来莫名其妙的毛病就可以把责任推到ibm那里去
有几个公司真正的在做大型的企业级应用?不过是跟风罢了,J2EE就四个字母谁都会吹……
我讨厌这种作风