在web application的开发上,memory management相当重要,而session management对memory management的影响最为明显。而stress testing(压力测试)就是用在这方面的,用于模拟多用户同时在线的情景,甚至可以模拟黑客的DoS Attack 。而grinder就提供了这样的功能。(http://grinder.sourceforge.net)
举个例子来说吧,可能一个HttpSession挂了几个总共2KB大小的session object,而timeout值是20分钟(这通常是最理想的值)……OK,现在有一个黑客对我们的网站进行DoS ( Denial of Service ) Attack (恶意海量攻击),在5分钟内,他可以generate上百万甚至上千万个Http Attack,如果我们处理得不好,那么未timeout的HttpSession也就是上百万、上千万,再乘以2KB,那会是多少?这样的话,web 服务器的内存马上玩完。
所以,这就是为什么越来越多人提倡用TDD(测试先行)模式去开发软件的理由了:每天系统自动从source control那里提取最新的code,然后编译、自动做unit testing和stress testing……如果一旦有一天早上发现昨晚的stress testing结果突然差了许多(例如昨天还可以同时应付500个concurrent users,但今天就变成了200个),那么,就是说,昨天有人写的程序出了问题,有些code导致了memory leak.但是,这种观念,很多人都不以为然……当然,听上去是很好,但实践起来,需要大家都有这种意识和自觉去做。
那么,应该怎样避免出现这种情况呢?
首先,根据business requirements写test cases,然后再写code;每当程序要加一个功能,首先就为这个功能写test cases……
以上内容来我跟一个牛人的聊天。。。。。。。。。。。