精华内容
下载资源
问答
  • tomcat 禁用session

    2021-03-04 06:30:46
    我们先来做一个实验,用jmeter对tomcat下的一个jsp页面做压测:(1)...我们知道,tomcat默认会给每一个jsp都启用session的。(2)我们给tomcat设置启动参数,修改catalina.bat,添加:set JAVA_OPTS=%JAVA_OPTS% -Xms...

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

    (1)jsp的内容非常简单,1.jsp:

    1.jsp

    this is 1.jsp

    没有任何复杂的处理,只是一个非常简单的jsp页面。我们知道,tomcat默认会给每一个jsp都启用session的。

    (2)我们给tomcat设置启动参数,修改catalina.bat,添加:

    set JAVA_OPTS=%JAVA_OPTS% -Xms64m -Xmx64m

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

    ef3da39169bada18abb45a3791a61c34.png

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

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

    jps -v:找到tomcat的pid

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

    (5)用mat打开tomcat.bin:

    04509668e897718d02e5138a76e1953b.png

    有没有很吃惊,StandardSession竟然有33197个,所占内存达到了52M!这是因为对每个请求tomcat都会为其创建一个session导致的。

    这里也说明一个问题:就算session里面什么也不存,默认就会占差不多1.5K!所以,Session据对是一个重量级的对象!

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

    2e89bcf3a0b5da134ad817c51d989634.png

    重新做压测:

    d37a7f490413b3afeecbd7db1e96d0e4.png

    tomcat表示很轻松,毫无压力!

    结论:tomcat的session是一个非常重量级的对象,能禁用则一定要禁用。

    展开全文
  • 可以在重启服务器的过程中,保证Session也能被恢复 主要通过修改tomcat配置文件中的conf中的context.xml文件 主要有两种方式 1. 去除原本注释 将其如下的注释去掉 将如下的配置的注释去掉 变成 <Manager ...

    前言

    通过Tomcat的会话持久化配置实现
    可以在重启服务器的过程中,保证Session也能被恢复

    创建SESSION.ser文件存储该webapp的session数据。在session超时时间内Tomcat重启或re-deploy,将会加载该文件中的数据,恢复用户原来的session运行环境

    主要通过修改tomcat配置文件中的conf中的context.xml文件
    主要有两种方式

    1. 去除原本注释

    将其如下的注释去掉在这里插入图片描述
    将如下的配置的注释去掉
    变成

    
        <Manager pathname="加入所想要的文件名" />
      
    

    2. 存储到本地文件

    第一种方案也可以执行
    或者将其替换为第二种方案

    <Manager className="org.apache.catalina.session.PersistentManager" >
        debug=0
        saveOnRestart="true"
        maxActiveSession="-1"
        minIdleSwap="-1"
        maxIdleSwap="-1"
        maxIdleBackup="-1"
        <Store className="org.apache.catalina.session.FileStore" directory="指定目录" />
    </Manager>
    
    
    • saveOnRestart:(true/false)配置服务重启工程中对session的处理,若为true,则关闭前把有效的session保存,启动后重新载入
    • maxActiveSession:可以活动的session的最大数。如果设置为-1,则表示不受限制,超过最大限制会将session对象转移到Session Store中。
    • minIdleSwap:一个session不活动的最短时间,单位为秒。如果设置为-1,则表示不受限制,超过该时间会将session对象转移到Session Store中。
    • maxIdleSwap:一个session不活动的最长时间,单位为秒。如果设置为-1,则表示不受限制,超过该时间会将session对象转移到Session Store中,该session不再内存中保存。
    • maxIdleBackup:session的最长时间,单位为秒。如果设置为-1,则表示不受限制,超过该时间会将session对象备份到Session Store中,但该session对象依然存在于内存中。
    • Store:指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的 session文件夹

    3. 存储到数据库

    或者试试第三种持久化的配置

    <StorecalssName="org.apache.catalina.JDBCStore"
    driverName="com.mysql.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost/sessionusename=xxx&password=xxx"
    sessionTable="session"
    sessionIdCol="session_id"
    sessionDataCol="session_data"
    sessionValidCol="sessionValid"
    sessionMaxInactiveCol="maxInactive"
    sessionLastAccessedCol="lastAccess"
    sessionAppCol="appName"
    checkInterval="60"
    debug="99"/>
    
    
    • className:Session的管理类,tomcat将会通过定义的接口来应用该类生成的对象。
    • debug:Session管理器的跟踪级别。
    展开全文
  • 第一步: 自定义session管理器 package com.zhuang.config; import org.apache.catalina.Lifecycle; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleState; import org....

    第一步: 自定义session管理器

    package com.zhuang.config;
    
    import org.apache.catalina.Lifecycle;
    import org.apache.catalina.LifecycleException;
    import org.apache.catalina.LifecycleState;
    import org.apache.catalina.Session;
    import org.apache.catalina.session.ManagerBase;
    
    import java.io.IOException;
    
    public class NoSessionManager extends ManagerBase implements Lifecycle {
    
        @Override
        protected synchronized void startInternal() throws LifecycleException {
            super.startInternal();
            setState(LifecycleState.STARTING);
        }
    
        @Override
        protected synchronized void stopInternal() throws LifecycleException {
            setState(LifecycleState.STOPPING);
            super.stopInternal();
        }
    
        @Override
        public void load() throws ClassNotFoundException, IOException {
    
        }
    
        @Override
        public void unload() throws IOException {
        }
    
        @Override
        public Session createSession(String sessionId) {
            return null;
        }
    
        @Override
        public Session createEmptySession() {
            return null;
        }
    
        @Override
        public void add(Session session) {
        }
    
        @Override
        public Session findSession(String id) throws IOException {
            return null;
        }
    
        @Override
        public Session[] findSessions() {
            return null;
        }
    
        @Override
        public void processExpires() {
        }
    }
    

    第二步: 编写配置类,放入自定义session管理器

    @Configuration
    public class TomcatConfig {
        @Bean
        public WebServerFactoryCustomizer<TomcatServletWebServerFactory> cookieProcessorCustomizer() {
            // 自定义session管理器,关闭session
            return factory -> factory.addContextCustomizers(context -> context.setManager(new NoSessionManager()));
        }
    }

    第三步: 获取session测试,获取的session为null 

    展开全文
  • Tomcat Session 持久化

    2021-03-25 09:09:15
    Session的主要数据被存储在服务器内存中,而服务器会为每个在线用户创建一个Session对象,当在线用户很多时,例如同时有几万或是几十万在线的情况下,Session内存的开销将会十分巨大,会影响Web服务器性能。...

    Session的主要数据被存储在服务器内存中,而服务器会为每个在线用户创建一个Session对象,当在线用户很多时,例如同时有几万或是几十万在线的情况下,Session内存的开销将会十分巨大,会影响Web服务器性能。而Session的钝化机制刚好可解决此问题。Session钝化机制的本质就在于把服务器中不经常使用的Session对象暂时序列化到系统文件系统或是数据库系统中,当被使用时反序列化到内存中,整个过程由服务器自动完成。

    实现:

    要完成session持久化,存放在session里的对象必须要实现java.io.Serializable接口。

    Tomcat通过两个session管理类实现session持久化,StandardManager (默认),PersistentManager

    StandardManager:不使用任何的Store,当Tomcat正常关闭,重启或Web应用重新加载时,它会将内存中的session序列化到Tomcat目录下

    /work/Catalina/host_name/webappname/SESSIONS.ser文件中。当Tomcat重启或应用加载完成后,tomcat会将文件中的session重新还原到内存中。

    注:如果突然终止该服务器,则所有会话都将丧失,因为StandardManager没有机会实现存盘处理。

    PersistentManager:通过使用Store,将内存中的session备份到文件或数据库中。当备份一个session对象时,该session对象会被复制到存储器中,而原对象仍然留在内存中。因此如果服务器崩溃,就可以从存储器中获取活动的session对象。当session被换出时,他会被移动到存储器中,因为当前活动的session对象超过了上限值,或者session对象闲置了过长时间。换出session节省内存空间。

    配置:

    Tomcat默认是已经启用持久化配置,若要禁用持久化功能,则只需要在节点里配置

    持久化配置可进行全局配置和针对某一站点进行配置。全局配置需要在cof文件夹context.xml的

    节点中配置,若要针对某一站点配置则需要在cof文件夹server.xml的

    节点中添加配置。

    StandardManager:

    className=”org.apache.catalina.session.StandardManager”

    debug=”0”

    maxInactiveInterval=”-1″

    />

    PersistentManager:

    方式1:

    className="org.apache.catalina.session.PersistentManager"

    saveOnRestart="true"

    maxActiveSession="-1"

    minIdleSwap="0"

    maxIdleSwap="30"

    maxIdleBackup="0"

    >

    className="org.apache.catalina.session.FileStore"

    checkInterval=”60”

    directory="../session"/>

    方式2:

    和方式1的区别:

    calssName="org.apache.catalina.JDBCStore"

    driverName="com.mysql.jdbc.Driver"

    connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password="

    sessionTable="tomcat_session"

    sessionIdCol="session_id"

    sessionDataCol="session_data"

    sessionValidCol="session_valid"

    sessionMaxInactiveCol="max_inactive"

    sessionLastAccessedCol="last_access"

    sessionAppCol="app_name"

    checkInterval="60"

    debug="99" />

    参数说明:

    maxActiveSessions-可处于活动状态的session数,default -1不限制

    checkInterval-检查session是否过期的时间间隔,default 60s

    saveOnRestart-服务器关闭时,是否将所有的session保存到文件中;minIdleSwap/maxIdleSwap-session处于不活动状态最短/长时间(s),sesson对象转移到File Store中;(-1表示没有限制)

    maxIdleBackup-超过这一时间,将session备份。(-1表示没有限制)

    directory-文件存储位置work\Catalina\host name\web app\session\文件名.session

    展开全文
  • Tomcat中使用session

    2021-03-06 13:50:29
    Tomcat中使用session 解决相同用户发送不同请求时的数据共享问题 cookie的特点 服务器端存储共享数据的技术 session需要以来cookie技术 每个用户对应一个独立的session对象 每个session对象的有效时长默认30分钟 ...
  • 四:Tomcat 会话保持的实现方式 4.1:实验环境准备 服务器: node104:192.168.1.104,负载均衡(Nginx/httpd); node105:192.168.1.105,Tomcat8、JDK8、MSM(Memcached、Redis); node106:192.168.1.106,...
  • 1、在tomcat——>conf——>servler.xml文件中定义: <Context path="/test" docBase="/test"  defaultSessionTimeOut="3600" isWARExpanded="true"  isWARValidated="false" isInvokerEnabled="true" ...
  • 摘要:前言偶然发现Tomcat会话时间的半小时,并不是说会话创建后,只有半小时的有效使用时间,而是说会话空闲半小时后,会被删除...注:空闲时间,指的是同一个会话两次请求之间的间隔时间Session相关类图httpsessi...
  • tomcat重启session不活化

    2021-09-04 14:08:03
    session钝化活化条件 实现Serializable接口 tomcat配置文件context.xml 进行如下配置: <...Store className="org.apache.catalina.session.FileStore" directory="E:\Develop\Tomcat\apache-.
  • 对于一个企业级应用而言,session对象的管理十分重要。sessio对象的信息一般情况下置于服务器的内存中,当服务器由于故障重启,或应用重新加载时候,此时的session信息将全部丢失。为了避免这样的情况,在某些场合...
  • tomcat配置session持久化

    2021-02-28 08:37:34
    Session的管理,tomcat两个实现类:org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManagerStandardManager 默认的方法 可以配置的地方比较少PersistentManager 提供了很灵活...
  • JDK + Tomcat 01 192.168.213.12:8080 JDK + Tomcat 02 # JDK # 官方下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html # 需要登录Oracle账号 # 下载完上传到 /usr/local/...
  • 什么是session? 其实session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。 说起session的作用,简单的举个例子:我们在登录某些网站...
  • JavaEE提供了8个监听器,其中一个是HttpSessionActivationListener,用来监听session当中JavaBean对象的钝化与活化状态。那么什么是钝化与活化呢?session的钝化与活化又有什么作用呢?本节我们来详细探讨这些问题。...
  • 服务器关闭session序列化到本地,服务器重新启动将存储的session序列化文件反序列化,加载到session管理容器中,从而实现用户登录信息不丢失 二、在springBoot中开启session持久化 在springBoot配置文件中打开...
  • 我有一个实时应用程序,其中的客户端使用websockets与运行Spring Boot Tomcat的SpringFramework服务器连接。我希望服务器快速(在5秒内)检测到客户端由于网络断开或其他问题而停止响应的时间,然后关闭websocket。我...
  • 9.修改tomcat1 下的server.xmlchannelSendOptions="8">expireSessionsOnShutdown="false"notifyListenersOnReplication="true"/>address="228.0.0.4"port="45564"frequency="500"dropTime="3000"/>address=...
  • session复制集群配置 1、服务器时间同步 2、多播通信,相同多播端口为同一组,单播传输增量session 3、web.xml的 <...实验目的:tomcat1和tomcat2的sessionID一致 NGINX配置 http { upstream tomcats { #ip
  • }); } else { // 直接使用 StandardSessionFacade 包装即可 facade = new StandardSessionFacade(this); } } return (facade); ... 再最后,要说明的是,整个sessions的管理使用一个 ...session实例...
  • Tomcat目录介绍 bin:专门用来存放Tomcat服务器的可执行程序 conf:专门用来存放Tocmat...work:是Tomcat工作时的目录,用来存放Tomcat运行时jsp翻译为Servlet的源码,和session钝化的目录. 启动Tomcat 找到Tomcat目录
  • 配置一个tomcat应用管理系统(它可以实现卸载应用)。 1.本地tomcat需要有一个manager应用不要删除 apache-tomcat-8.5.37\webapps 2.本地tomcat conf/tomcat-users.xml文件 <role rolename="manager-gui"/&...
  • 关闭tomcat: 通过[tomcat安装目录]/bin/shutdown.bat文件可以关闭tomcat服务器; Springboot Springboot框架整合了sprintmvc,sprint,mybatis; 内置了Tomcat服务器; https://start.spring.io Sprintboot建立项目...
  • Session域对象: 一个浏览器的多次请求范围有效。(会话范围有效) 1.2 保存值的生命周期不一样: request: 仅浏览器发出请求的时候,容器开始生效,响应完成的时候,容器死亡。 servletContext: (1)创建...
  • 点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章作者 | 蕃薯耀链接 |www.cnblogs.com/fanshuyao一、Session共享使用tomcat-...
  • 三种定制tomcat容器的方法 在org.springframework.boot.autoconfigure.web.ServerProperties类中有Server的相关配置 可以在ServerProperties.class中查看tomcat相关的参数项,并自定义其值。 1:实现...
  • Tomcat的最大并发数

    2021-03-13 03:16:59
    日常应用中,单台Tomcat能支持最大的并发数是多少?作为一个有经验的Java Web开发人员对这个问题应该有大概的印象,并会让问题再具体点,比如Tomcat版本,运行模式,并发请求允许的最大响应时间等,然后针对其中某个...
  • Java中session的销毁

    2021-02-26 11:32:39
    【概述】之前文章中介绍过SessionSession是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录...关闭浏...
  • Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但为什么禁用Cookie就不能得到Session呢?因为Session是用Session ID来确定当前...
  • 一、安装HAProxy 1.... 三、3个tomcat配置完成并启动好以后,启动haproxy ./usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg 关闭haproxy命令为: killall haproxy 原文:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,517
精华内容 23,406
关键字:

tomcat关闭session