Java应用Tomcat执行过程之性能调优

     Java应用Tomcat执行过程之性能调优(整理两天时间、转载请注出处)


1、简介

     Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对ServletJavaServer PageJSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。
     Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
     Tomcat和Nginx、Apache(httpd)、lighttpd等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Nginx/Apache服务器。


2、Tomcat的执行过程

Java应用Tomcat执行过程之性能调优_第1张图片

ps:画图好丑(画图工具画的,Do not worry);

请求过程描述:

      1、用户发送请求,被转发到8080端口,被Coyote Http/1.1 Connector获取。

      2、Connector把请求交给service的Engine来处理,并等待engine的回应。

            2.1、Engine获取到请求localhost/index.jsp,匹配所有的虚拟主机Host。

            2.2、Engine匹配到名localhost的Host,匹配它所有的Context。

            2.3、path=“/”的context获得请求/index.jsp,在它所拥有的mapping table中寻找对应的servlet。context匹配到URLPATHERN为*.jsp的servlet,对应的JSPServlet类。

            2.4、构造HttpServletRequest对象和HttpServletResponse对象。作为参数调用JspServlet的doGet()或者doPost()方法执行业务逻辑。

            2.5、Context把执行完的HttpServletRequest对象和HttpServletResponse对象返回给Host。

            2.6、Host把HttpServletResponse对象返回给Engine。

      3、Engine把HttpServletResponse对象返回给Connector。

      4、Connector把HttpServletResponse对象返回给客户。



 

2、目录结构与配置

2.1、目录结构

bin 存放启动和关闭tomcat脚本 
conf 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml 
work 存放jsp编译后产生的class文件 
webapp 存放应用程序示例,以后你要部署的应用程序也要放到此目录 
logs 存放日志文件 
lib/japser/common 这三个目录主要存放tomcat所需的jar文件



2.2、Server.xml配置详解

  • 顶级组件:位于整个配置的顶层,如server。
  • 容器类组件:可以包含其它组件的组件,如service、engine、host、context。
  • 连接器组件:连接用户请求至tomcat,如connector。
  • 被嵌套类组件:位于一个容器当中,不能包含其他组件,如Valve、logger。


     
     
     
     
     
     
     
     
     
     
     

 

2.3、组件详解

  • engine:核心容器组件,catalina引擎,负责通过connector接收用户请求,并处理请求,将请求转至对应的虚拟主机host。
  • host:类似于httpd中的虚拟主机,一般而言支持基于FQDN的虚拟主机。
  • context:定义一个应用程序,是一个最内层的容器类组件(不能再嵌套)。配置context的主要目的指定对应对的webapp的根目录,类似于httpd的alias,其还能为webapp指定额外的属性,如部署方式等。
  • connector:接收用户请求,类似于httpd的listen配置监听端口的。
  • service(服务):将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine。service内部有两个connector,一个engine。因此,一般情况下一个server内部只有一个service,一个service内部只有一个engine,但一个service内部可以有多个connector。
  • server:表示一个运行于JVM中的tomcat实例。
  • Valve:阀门,拦截请求并在将其转至对应的webapp前进行某种处理操作,可以用于任何容器中,比如记录日志(access log valve)、基于IP做访问控制(remote address filter valve)。
  • logger:日志记录器,用于记录组件内部的状态信息,可以用于除context外的任何容器中。
  • realm:可以用于任意容器类的组件中,关联一个用户认证库,实现认证和授权。可以关联的认证库有两种:UserDatabaseRealm、MemoryRealm和JDBCRealm。
  • UserDatabaseRealm:使用JNDI自定义的用户认证库。
  • MemoryRealm:认证信息定义在tomcat-users.xml中。
  • JDBCRealm:认证信息定义在数据库中,并通过JDBC连接至数据库中查找认证用户。


2.4、server.xml文件注释解析





  
  
  
  
  
  
  
  
  

  
    
  
  
	
    
	
    
      
		
        
      
	  
      
		
		
		
		
        

      
    
  



3、Tomcat监控

        JConsole的图形用户界面是一个符合java管理扩展(JMX)规范的监测工具,JConsole使用java虚拟机(java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息。在jdk安装目录下的bin文件包下;

Java应用Tomcat执行过程之性能调优_第2张图片


4、Tomcat安全优化和性能优化

4.1、禁用DNS查询(enableLookups="false")

      当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名 转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。

      修改server.xml文件中的Connector元素,修改属性enableLookups参数值: enableLookups="false",如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址。



4.2、jvm调优

优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码:

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:初始堆内存heap最大值,使用的最大内存
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域
-XX:MaxNewSize:
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss:每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间














5、参考文献

      Tomcat与java web 开发技术详解-孙卫琴-第二版
      深入剖析Tomcat(How Tomcat Works)



你可能感兴趣的:(@基础知识,————[,Nginx,Tomcat,],@技术提升,————[,Java基础,])