Tomcat 8.5.x版本升级变化

1. 其中一些重要变化(对HTTP2,SSL支持的改动较多)

<1> 不再提供对HTTP BIO,AJP BIO的支持;
<2> 重构HTTP upgrade与AJP实现,减少重复;
<3> 支持HPACK header encoding与decoding;
<4> 增加JSSE的SSL engine,同时支持ALPN;
<5> 支持HTTP/2 server push;
<6> 不再支持Comet;
<[......]

Read more

Posted in 日常文章 | Tagged | Leave a comment

从Tomcat无法正常关闭讲讲Java线程关闭问题

正常情况下,会优先采用catalina.sh stop来停止Tomcat实例,这样可以让服务有机会处理完请求,并做好善后工作。 但如果通过catalina.sh stop命令无法关闭Tomcat实例,则只能kill -9了。

 

为什么在给Tomcat发出stop命令以后,Tomcat实例无法关闭?

 

可能有两种原因:

  • Tomcat的主线程没有结束(也即main函数没有执行结束);
  • Tomcat中启动的webapps有非daemon线程阻[......]

Read more

Posted in 日常文章 | Tagged , | 评论关闭

Tomcat源码走读——session管理(续)

2. session创建、过时处理等

public Session createSession(String sessionId ) {

        if ((maxActiveSessions &gt;= 0) &amp;&amp;
                (getActiveSessions() &gt;= maxActiveSessions)) {
            rejectedSessions++;[......]

Read more

Posted in J2EE | Tagged | Leave a comment

Tomcat源码走读——session管理

1. session是如何来的?

首先,看发生请求的时候,Request是如何获取session,Request的获取session函数getSession()如:

public HttpSession getSession() {
        Session session = doGetSession(true);
        if (session == null) {
            return null ;
        }

        ret[......]

Read more

Posted in 读书笔记 | Tagged | Leave a comment

Tomcat源码走读——backgroundProcessor(后台处理机制)

在 Tomcat源码走读3:启动过程续中有提到,在Container启动的时候,会通过threadStart()函数为子Container启动一个daemon线程,这个线程便是ContainerBackgroundProcessor,这为相关的Container、Value提供了一个机制,可以在后台定时运行一些任务,如Session Manager就借助这个检查session是否过期等。

 

这个线程的功能如:

protected class ContainerBackg[......]

Read more

Posted in 读书笔记 | Tagged | Leave a comment

Tomcat扩展——监控

最近心血来潮,想是否可以通过增加一个tomcat的扩展,来持续收集tomcat服务器本身的性能信息,如线程池的各项数据,请求数等等,这样可以配合业务方面的监控,可以更方便的分析调整tomcat配置,以提供更好的服务。

 

这样也不需要每次通过连接jmx去观察数据,而且idc环境要开启jmx,还得涉及各种安全问题…….

 

Tomcat manager中StatusManagerServlet就是通过JMX提供了Tomcat服务的当前状态信息。我[......]

Read more

Posted in J2EE, 读书笔记 | Tagged | Leave a comment

Tomcat的timeout机制

今天在stackoverflow看帖子,无意看到有个Tomcat timeout的问题。说到timeout机制,一般立马想到Tomcat连接配置中的connectionTimeout=”***”,但是这里的超时只是连接的超时时间,还有一个请求处理的时间,也即如果请求的处理时间太久,想直接终止请求。

 

对这种情况,貌似Tomcat并没有提供太好的机制?也可能有,是我不了解,知道的求告知。

 

如果说可以设置session的超时时间,那我认为这应该算是s[......]

Read more

Posted in J2EE | Tagged | Leave a comment

Tomcat Manager提供的管理功能一窥

Tomcat的manager包中有几个Servlet为用户提供一些相关的管理功能,也即Tomcat的webapps下的manager项目。

 

<1> ManagerServlet

ManagerServlet提供的主要是项目deploy,undeploy,reload等相关功能

 

实现原理:

ManagerServlet实现了ContainerServlet接口,而Tomcat容器会调用所有ContainerServlet实[......]

Read more

Posted in J2EE | Tagged | Leave a comment

Tomcat7.0 编译

看了Tomcat的代码以后,还是想在其中做点事情。

 

要想改其代码,第一步自然是要能从源码编译出Tomcat服务器。

 

Apache除了提供svn的下载方式,在github上也提供了各个版本的副本,我自己机器的subversion有点问题,所以直接从github clone了 Tomcat7的源码。(直接在github搜索即可,认准apache)

 

Apache的官方网站上有提供Tomcat7的编译方法,不过其实Tomcat[......]

Read more

Posted in J2EE | Tagged | Leave a comment

Tomcat源码走读——内存泄露检测

Tomcat7提供了对内存泄露的检测,其实现放在Web的类加载器WebappClassLoader中进行。在加载器停止时(也即stop函数中)执行内存泄露的检测。

  /**
     * 清除引用,防止内存泄露
     */
    protected void clearReferences() {

      /**
       * 销毁注册的JDBC驱动
       */
        clearReferencesJdbc();

        /**[......]

Read more

Posted in J2EE | Tagged | Leave a comment
« Older