tomcat为什么要禁用session?

摘要:
正如我们所知,tomcat将默认为每个jsp启用会话。我们为tomcat设置了启动参数,并更改了catalina.bat。导出tomcat的内存映像文件:jps-v:查找tomcat的pidjmap转储:format=b,file=tomcat。宾6616用垫子打开tomcat宾:你很惊讶吗。这是由tomcat为每个请求创建会话造成的。这也表明了一个问题:即使会话中没有任何内容。因此,假设jsp中没有生成会话,这个问题是否不存在?让我们更改jsp页面:再次进行压力测试:tomcat表示非常简单。结论:假猫会议是一个重量级的目标。初始化占了几乎相同的1.5K大小。如果可以禁用它,则必须禁用它。

转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/47829755

我们先来做一个实验,用jmeter对tomcat下的一个jsp页面做压測:

(1)jsp的内容很easy,1.jsp:

<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<html>
	<head><title>1.jsp</title></head>
	<body>
		this is 1.jsp
	</body>
</html>
没有不论什么复杂的处理。仅仅是一个很easy的jsp页面。我们知道,tomcat默认会给每个jsp都启用session的。

(2)我们给tomcat设置启动參数,改动catalina.bat。加入:

set JAVA_OPTS=%JAVA_OPTS% -Xms64m -Xmx64m

(3)启动jmeter,设置100个线程模拟100个用户,然后不停的訪问这个页面,观察结果:

tomcat为什么要禁用session?第1张

图中能够看出来,在请求数目到达33165的时候,tomcat已经内存溢出了。

(4)导出tomcat的内存映像文件:

jps -v:找到tomcat的pid

jmap -dump:format=b,file=tomcat.bin 6616

(5)用mat打开tomcat.bin:

tomcat为什么要禁用session?第2张

有没有非常惊讶。StandardSession居然有33197个。所占内存达到了52M!这是由于对每一个请求tomcat都会为其创建一个session导致的。

这里也说明一个问题:就算session里面什么也不存。默认就会占几乎相同1.5K!

所以,Session据对是一个重量级的对象!

(6)那么假设jsp中不生成Session是不是就不会有这个问题了?我们改一下jsp页面:

tomcat为什么要禁用session?第3张

又一次做压測:

tomcat为什么要禁用session?第4张

tomcat表示非常轻松。毫无压力。

结论:tomcat的session是一个很重量级的对象,初始化就占几乎相同1.5K的大小,能禁用则一定要禁用。

免责声明:文章转载自《tomcat为什么要禁用session?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux 系统中堆栈的使用方法使用matplotlib画出log的图像下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

分布式 OAuth2.0认证授权(黑马讲义) aBiu

1.分布式系统认证方案 1.1什么是分布式系统 随着软件环境和需求的变化 ,软件的架构由单体结构演变为分布式架构,具有分布式架构的系统叫分布式系统,分布式系统的运行通常依赖网络,它将单体结构的系统分为若干服务,服务之间通过网络交互来完成用户的业务处理,当前流行的微服务架构就是分布式系统架构,如下图: 分布式系统具体如下基本特点: 分布性:每个部分都可以独立...

JAVA消息服务JMS规范及原理详解

JAVA消息服务JMS规范及原理详解 一、简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。 JMS允许应用程序...

学会使用ip池和cookie池伪装

在进入正题之前,我们先复习一个关于requests模块的相关知识点: requests中解决编码的三种方法: ①response.content 类型:bytes 解码类型:没有指定 如何修改编码方式:response.content.decode() ②response.content.decode() 类型:str 解码类型:解码成python文本的字...

【转载】阮一峰网络日志中的JWT入门

目录 跨域认证问题 JWT原理 JWT的格式 Header Payload Signature Base64URL JWT的使用方式 JWT 的几个特点 转自阮一峰网络日志:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html JWT是JSON WEB TO...

Mybatis模糊查询MySQL中记录的的常用三种方法

mybatis的模糊查询功能使用的很广泛,以MySQL数据库为例(不同的数据库,有些可能不支持)常用的模糊查询有三种方法: 直接使用 % 拼接字符串,如'%'#{name}'%'或"%"#{name}"%",单引号或双引号都可以。 使用concat(str1,str2)函数拼接 使用mybatis的bind标签 现在有数据库mybatis1中表user...

验证码实现原理

最简单的验证码   极验验证   扫码登录   12306验证码 先说结论吧 仔细了解了一番后,发现,其实 验证码 ,还是基于session原理 或者token原理 什么是session 这里推荐一本书《图解http》,里面讲解的很清楚。如果只是想简单的了解一下session,可以看看这个文章。 什么是token token是另一种使用较多的鉴权方式,具...