>>如果一个web服务器在session地处理上那么弱智会内存耗尽地话
显然不会那么弱智的耗尽了,因为过了一段时间session就超时了,如果没有超时这一说,就是硬盘也会被放满了
服务器端怎么知道那些session是在用的?它最多根据上次访问时间做一些优化,把较长时间不用但是又没有超时的session钝化到硬盘上,但这是特定服务器的事情,而且不一定就能显著的提高效率
>>如果一个web服务器在session地处理上那么弱智会内存耗尽地话
显然不会那么弱智的耗尽了,因为过了一段时间session就超时了,如果没有超时这一说,就是硬盘也会被放满了
服务器端怎么知道那些session是在用的?它最多根据上次访问时间做一些优化,把较长时间不用但是又没有超时的session钝化到硬盘上,但这是特定服务器的事情,而且不一定就能显著的提高效率
兄弟,你对session的运行机制和体系不是很清楚。找些资料看看吧,如果有兴趣。
你们说的是http session spec还是HttpSession还是SessionEJB?
兄弟,如果你觉得我是错的,能不把理由说的详细一些
我自己做了一个实验
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
整个过程中我仔细检查了硬盘使用量,没有任何变化
请问如何解释?
是Http session
> 正在使用地session是在内存中地,已不再使用,但没有过期?> session是存放在硬盘地指定目录地。并且正在使用地session
对不起,我觉得这是不对的。session没有“使用中”这个概念。只有valid/invalid。
> 理论地争论没有意义。
同意。不要讲“回”字的4种写法。
> apache地临时目录中去找一下session文件到处都是。
各种webserver实现http session的方式各不相同,不过硬盘肯定不如内存快地球人都知道吧。
> 我自己做了一个实验
> tomcat4.0.6 win2k server
> 有这么一个JSP,访问的时候放一个10M的StringBuffer变量在
> ession上
>
嗯,很实践的方式。说句题外话,你的tomcat版本太低了,新的不好么?
>> 正在使用地session是在内存中地,已不再使用,但没有过期?> session是存放在硬盘地指定目录地。并且正在使用地session
>对不起,我觉得这是不对的。session没有“使用中”这个概念。只有valid/invalid。
说的好
>嗯,很实践的方式。说句题外话,你的tomcat版本太低了,新的不好么?
4.0.6是4.0.X中最新的版本了,我不喜欢4.1.XX因为它启动的时候废话太多,我也没注意过它们之间的区别,5.0.X还是Alpha版
晕。
快成了意气之争了。
你的内存是256的话,你放N多的session超过256看看。
使用虚存和使用硬盘还是不一样的哦。
另外你说的意气是指什么?我们都是萍水相逢,谈谈技术而已。我不同意你的观点是因为我的经验,不是因为哪个人的。
"Don't get personal~"
哦。上边的帖子只是说上边are you ok?的帖子的。
session的基本机制,可以查资料找到。
但sesison的具体实现在各种服务器中是有差异的。apache至少是这么处理的。如果你创建了了一个session,那么在临时目录中会有一个已此session id名字命名的文件。当session过期后这个文件会被自动删除。
争论的起因是偶说session并不是完全和内存相关的,海量访问时服务器会有自己的session处理及缓存机制,绝对不会因为session带来内存耗尽的问题。上边那个帖子只是说写一个程序去访问的试验是没有意义的。
jrun也是这种机制。
websphere只是用过,没留意这个。
weblogic没用过。
呵呵,全都因为我的一句话
“session永不过期是愚蠢透顶的做法,session将只增不减,你有多少内存?”
开始这场讨论的,我并不认为这句话有什么错误,session永不过期是不可能的,我认为服务器应该根本不允许这么做,这样没有意义,就算放在硬盘里面也会满的
session中的东西肯定首先是放在内存里的,也许有的服务器会做优化,如果session超时时间较长,可能将长时间不用又还没有超时的session放到硬盘里面,那是特定的服务器的事情,而且我不认为这样可以提高多少效率
另外就是你说的apache是指apache server还是tomcat
作为一个静态页面的服务器,apache server里面session的概念有什么用?
这次争论还发现了一个有意思的现象
就是我做那个实验的时候为什么会OutOfMemory呢?
我的内存是512M,当时内存用量已经接近512M但是还有虚存啊,是因为StringBuffer太大了?
每次将10M的变量放上去,内存用量增20M,多的10M是没有收集的垃圾吗?我没有生成新对象啊,还是StringBuffer中的append方法内部用的零时变量?
我认为在这里只是讨论而已,如果我完全是对的,那么讨论结束后我一无所获,如果我每次都是对的,那我就不必来了
兄弟,不要哪tomcat试来试去。
tomcat说到底只是一个免费的jsp/servlet容器而已。拿来做开发阶段的测试服务器可以,至少商业应用上我们公司还从来不给客户用这种东西。
你把tomcat插入到apache中或者使用webspher、weblogic这些经过大规模商业应用检验的服务器来试。
偶使用eclipse加入tomcat4.0.6的插件调试程序时总是出莫名其妙的错误,明明是好的,但就是出错,重起几次机子就有好了。简直FT。
使用VJ下的webshpere的时候从来没有这些乱七八糟的事情。
把tomcat插到apache里面去
我觉得session还是tomcat来管理的
webshpere之类的东西太慢,我们用的就是webshpere,但我不认为我们公司做的是企业级应用,虽然他们这么号称,唯一的好处的出来莫名其妙的毛病就可以把责任推到ibm那里去
有几个公司真正的在做大型的企业级应用?不过是跟风罢了,J2EE就四个字母谁都会吹……
我讨厌这种作风