No Regrets.

Tomcat的配置和优化

Posted on By Marin



Tomcat

tomcat的组成和各部分的职能

tomcat server:里面可以包含多个tomcat service,负责开启和管理这些service,同时负责监听8005端口用于关闭整个服务器;
service:由tomcat封装,对外提供完整组件的web服务,各个service虽然相互独立但是会共享虚拟机资源。其包含connector,container,session,jasper,naming,logging,JMX等功能组件,其中connector是tomcat与外部的连接器,监听对应的端口接收外部请求(解析报文封装成request对象),传递给container处理后(封装成response对象)再将结果发送给外部(生成报文);container是一个servlet容器,内部有多层容器,主要负责管理servlet的生命周期并调用servlet方法去处理请求;jasper是一个jsp解析引擎,把jsp转化为Java文件并编译成class文件;naming提供名称服务,将名称和对象联系起来,可以过去名称去访问对象;session主要负责session的管理和创建,以及session的持久化,可以自定义而且支持session的集群,其是在服务区开辟的内存空间,在实际开发中我们经常使用其来保存临时的信息;logging是负责日志功能,记录错误和运行信息;JMS是javaSE的一个技术规范,是一个为应用程序,设备,系统提供管理功能的框架,为我们提供了远程监控tomcat的运行情况的功能 

container之间所采用的是责任连模式,一个container的内部结构如下:


 engine负责管理host站点,一个container可以有多个host站点,每个host站点有多个context应用程序,每个程序有对应的warpper(servlet)处理业务;

Servlet处理HTTP请求的过程如下:


Tomcat的目录结构



 bin:可执行程序,我们主要使用里面的开启服务和关闭服务命令,里面的.bat是windows下的执行文件,.sh是Linux下的;
conf:配置文件。最重要的是server.xml这个文件,用于配置整个tomcat的信息,开启tomcat服务的时候会去加载这个配置文件来确定容器结构;
lib:所有tomcat使用的jar包和项目需要的jar包;
logs:tomcat运行产生的日志信息,最主要的是控制台打印的日志信息,Windows下为Catalina.log,Linux下为Catalina.out文件;
temp:存放临时文件;
webapps:存放应用程序;
work:存放运行期间编译后的文件,删除里面的文件再重启服务等于清除缓冲;

内存模型的配置

常见的内存溢出错误,分别是堆、方法区、栈的内存溢出:


修改Tomcat的内存配置,打开$TOMCAT_HOME/bin/catalina.sh文件(Windows系统是catalina.bat文件),大楖在250行左右,在JAVA_OPTS参数上添加内存参数设置即可。完整的JVM参数设置如下所示:


 -server:能在多cpu模式下有更高的效率;
-Xms:配置初始的堆大小,默认是固定内存的四分之一,最大不能超过固定内存的百分之八十;
-Xmx:Java heap的最大值,最好设置为物理内存的一半;
-metaspacesize:元空间大小;

热部署

热部署的三种方式:第一种是直接把webapps下放入war包;
第二种是在server.xml的host标签里面添加context标签;doc-base为war包所在路径,path为最终访问的路径;


第三种是在conf/Catalina/localhost下面建立一个xml文件,最终访问的项目名为文件名;


Tomcat设置jdbc连接池

在server.xml和web.xml分别进行下面的配置: 

 然后还需要导入对应数据库驱动jar包;

tomcat实现web管理

可以访问tomcat默认的页面进入管理界面,可以监控各个应用程序的运行情况以及远程上传war包等操作; 对于上传war包在实际生产环境中war包大小会比较大,默认配置的运行上传的war包大小只有50M左右,所以需要去修改配置,在webapps/manager/WEB-INF/web.xml修改:


管理员信息配置:


单点登录

单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一,SSO是可以在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统;


单点登录,使用tomcat+CAS(一个单点登陆框架)一般单点登陆包括服务器端和客户端,客户端绑定我们不同的web服务,通过配置服务端和客户端的关系来实现单点登陆:


对于CAS可以通过server.xml配置connector标签配置其https安全证书 

然后通过配置项目下的deployerConfigContext.xml配置其登陆验证信息的数据源:  

 然后客户端的tomcat上需要配置server.xml和项目的web.xml来进行服务区重定向和CAS服务的关联配置 



多域名访问

多域名访问实现的两种方式,基于ip地址和基于端口号;
基于ip地址的是通过在tomcat的server.xml配置多一台的host,同时也需要在虚拟机上配置好对应的ip地址和域名;


基于端口号的只需要在server.xml中添加一个service; 

tomcat的安全配置

 初始化配置:

1、关闭服务器端口。通过修改shutdown端口或者指令来防止别人通过连接我们的shutdownip+端口,然后输入指令来停止我们的tomcat服务;

2、隐藏版本信息。在tomcat上的Catalina.jar中的/org/Apache/Catalina/util/serverinfo.properties中修改版本信息

3、禁用tomcat管理页面。修改原本ROOT文件名并新建一个空的ROOT文件夹;

4、自定义错误页面。在空的ROOT文件夹里面放入一个我们自己的错误页面,然后对web.xml进行配置 

5、AJP端口管理。使用反向代理的tomcat可以关闭这个端口,到server.xml中注释掉即可;

6、启动cookie的httponly。保证cookie的安全性(扩展知识:http的无连接性决定了需要使用cookie来保存用户操作) 

tomcat的安全规范

账号管理、认证授权

包括共享、无关账号;口令密码和用户权限; 

日志配置操作



设备其他配置操作

其他安全配置操作也就是说对于有数据交互需要登陆的页面,设置一个自动登出的超时时间: 

其他性能优化的方向

缓存优化(nginx、gzip)和运动模式;


我们是使用Java开发的,Java1.4开始就支持NIO,所以推荐使用



有Marin的地方就有你的收获