Tomcat优化

您所在的位置:网站首页 tomcat关闭ajp服务 Tomcat优化

Tomcat优化

2023-08-06 18:02| 来源: 网络整理| 查看: 265

文章目录 一、Tomcat双实例(部署两台Tomcat)二、Tomcat定义默认页面、页面超时和静止列出目录三、禁用AJP协议连接器(1)HTTP和AJP(2)Web客户端请求Tomcat服务器上JSP资源的两种方式(3)禁用步骤 四、Tomcat配置网页压缩传输五、Tomcat的三种模式(1)同步异步、阻塞和非阻塞(2)Tomcat的三种模式(3)修改模式 六、生产环境Tomcat配置七、JVM性能调优 Tomcat优化从两部分出发,一个是JVM,一个是Tomcat本身

一、Tomcat双实例(部署两台Tomcat) 在主配置文件中,直接把所有的Service区域复制一下,修改两个连接器的端口号不冲突即可,域名也不能相同 +[root@rzy ~]# vim /usr/local/tomcat/conf/server.xml #删除注释 。。。。。。 17 18 21 #8080和8009的端口 22 23 24 26 27 29 30 31 32 33 34 37 38 39 40 42 43 45 46 47 48 49 #保存退出 [root@rzy ~]# /usr/local/tomcat/bin/shutdown.sh #重新启动 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@rzy ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@rzy ~]# netstat -anpt | grep java #查看端口,发现有五个端口,一个8005是关闭tomcat的端口,另外四个就是两个实例的连接器的端口 tcp6 0 0 :::8080 :::* LISTEN 17004/java tcp6 0 0 :::8081 :::* LISTEN 17004/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 17004/java tcp6 0 0 :::8009 :::* LISTEN 17004/java tcp6 0 0 :::8010 :::* LISTEN 17004/java

测试 (端口要注意修改)创建实例成功 在这里插入图片描述

第二种方法简单粗暴,直接装两台tomcat,路径不一样即可(略) 二、Tomcat定义默认页面、页面超时和静止列出目录 [root@rzy ~]# vim /usr/local/tomcat/conf/web.xml #进入网页配置文件 。。。。。。 110 111 listings 112 false #禁止列出列表 113 114 1 115 。。。。。。 581 582 30 #页面超时时间,默认30秒 583 。。。。。。 4679 4680 index.html #默认可以解析的页面,默认有三个 4681 index.htm 4682 index.jsp 4683 4684 。。。。。。 三、禁用AJP协议连接器 (1)HTTP和AJP Tomcat中,默认安装完之后,会有三个监听端口,也就是三个连接器,分别是连接HTTP的TCP的8080端口、连接其他Web服务的TCP的8009端口和用来关闭Tomcat的8005端口。8009是在Tomcat和其他HTTP服务器建立连接时使用的Tomcat最主要的功能是提供Servlet/JSP容器,虽然也可以作为Java Web服务器,但是在处理静态资源(静态页面)的速度,以及提供的Web服务器管理功能方面都是不如其他专业的HTTP服务器,比如apache和nginx还有windows的IIS。在使用Tomcat时,通常都会配合其他Web服务器一起使用,Tomcat只处理动态页面(jsp页面)可以使用AJP的常用Web服务器只有Apache一个,但是现在最常用的都是使用Nginx+Tomcat来使用,AJP是用不上的,所以可以关闭AJP减少系统资源损耗 (2)Web客户端请求Tomcat服务器上JSP资源的两种方式

在这里插入图片描述

(3)禁用步骤 [root@rzy ~]# vim /usr/local/tomcat/conf/server.xml #注释掉8009AJP连接器 。。。。。。 116 #增加注释 117 。。。。。。 #保存退出 [root@rzy ~]# /usr/local/tomcat/bin/shutdown.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@rzy ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@rzy ~]# netstat -anpt | grep java #查看端口发现只剩下一个8080和8005的端口了 tcp6 0 0 :::8080 :::* LISTEN 1523/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1523/java 四、Tomcat配置网页压缩传输 [root@rzy ~]# vim /usr/local/tomcat/conf/server.xml #修改主配置文件 。。。。。。 69 #压缩文件的格式 。。。。。。 #保存退出 [root@rzy ~]# /usr/local/tomcat/bin/shutdown.sh #重启Tomcat Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@rzy ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. 五、Tomcat的三种模式 (1)同步异步、阻塞和非阻塞 同步: 调用者向被调用者发送任务请求,被调用者在完成任务请求的时间内,调用者会一直等待被调用者完成任务请求,在被调用者完成任务请求后,调用者才会执行下一个请求并且继续向被调用者发送任务请求。

例如: 老板给员工小王布置一个任务,老板在小王完成这个任务之前,会一直等待小王,在这个过程中老板不会去做其他事情

异步: 调用者向被调用者发送任务请求,被调用者完成任务请求后会通过状态、通知或者回调机制主动通知调用者,这个期间调用者可以继续执行下一个请求

例如: 老板分配给员工小王一个任务,小王在做完这个任务后会向老板汇报,这个过程中老板不会进行等待,而是去做其他事情

同步和异步的区别:

同步:被调用者不会主动向调用者返回任务的状态,在返回状态之前,调用者需要一直等待被调用者完成任务

异步:被调用者会主动向调用者返回任务的状态,在返回状态之前,调用者可以执行下一个请求

阻塞: 指I/O操作需要彻底完成之后才会返回到用户空间,在调用结果返回之前,调用者被挂起,不能执行下一个操作

例如: 手洗衣服,没洗完之前手是干不了其他事情的

非阻塞: 指I/O操作被调用之后会立刻返回一个用户状态,无需等待I/O操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起

例如: 使用全自动洗衣机,不需要占用使用者的时间,洗完之后去拿就行,在这个期间使用者可以去干其他的事情

(2)Tomcat的三种模式

Tomcat有三种模式,分别是BIO、NIO、AIO

java BIO: 同步并阻塞,服务器实验模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程去处理,但是如果连接后线程并没有做任何事情的话,就会造成系统资源的损耗,可以通过线程池机制去改善**(基本上实际应用中已经淘汰)**

java NIO: 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器采用轮询方式检查连接是否有I/O请求,当连接有I/O请求时,才启动一个线程进行处理

java AIO(NIO2.0): 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,当I/O请求没有完成时,服务器是不会创建线程去处理的

Tomcat三种模式的使用场景

BIO: BIO方式适用于连接数目比较小并且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用种,是JDK1.4以前的唯一选择,但是程序直观理解简单NIO: NIO方式适用于连接数目多并且连接比较短(轻操作)的架构,例如聊天服务器,并发局限于应用种,变成比较复杂,JDK1.4版本后开始支持

访问http://192.168.100.202:8080/manager/status,即点击Status进行状态页面,移到最下面查看连接器的模式都端口 在这里插入图片描述

(3)修改模式

因为Bio模式基本已经不用了,所以不进行修改BIO模式,而且在Tomcat的7版本以上默认就是NIO模式,所以只进行修改AIO模式

[root@rzy ~]# rpm -e apr --nodeps #检查是否安装apr [root@rzy ~]# yum -y install apr apr-devel #使用yum安装apr 。。。。。。 完毕! [root@rzy ~]# cp /usr/local/tomcat/bin/tomcat-native.tar.gz /root/ #复制tomcat-native.tar.gz源码包到root下 [root@rzy ~]# tar xf tomcat-native.tar.gz #解压 [root@rzy ~]# cd tomcat-native-1.2.12-src/native/ #进入解压目录 [root@rzy native]# ./configure --with-apr=/usr/bin/apr-1-config && make && make install #配置编译安装 。。。。。。 Libraries have been installed in: #提示这个表示安装成功 /usr/local/apr/lib 。。。。。。 [root@rzy native]# cd [root@rzy ~]# vim /usr/local/tomcat/bin/catalina.sh 。。。。。。 616 CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib" #末尾添加 #保存退出 [root@rzy ~]# vim /usr/local/tomcat/conf/server.xml 。。。。。。 69 。。。。。。 #保存退出 [root@rzy ~]# vim /etc/profile #修改系统配置文件,添加全局变量 。。。。。。 77 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java 78 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib #添加 #保存退出 [root@rzy ~]# source /etc/profile #执行系统配置文件,使配置生效 [root@rzy ~]# /usr/local/tomcat/bin/shutdown.sh #重启服务 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@rzy ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@rzy ~]# netstat -anpt | grep java tcp6 0 0 :::8080 :::* LISTEN 2614/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2614/java

查看Tomcat的状态

在这里插入图片描述

六、生产环境Tomcat配置 ******即实际工作中,Tomcat的常用配置 [root@rzy ~]# vim /usr/local/tomcat/conf/server.xml #修改配置文件 。。。。。。 69 。。。。。。 #保存退出 ******注释 #网页压缩的类型 redirectPort="8443" #开启安全通道ssl #注意!!!!!!: 当前端是由Nginx作为反向代理时,不需要启动Tomcat的网页传输压缩功能,即80到82行不需要配置 maxKeepAliveRequests=“1”:nginx动态的转给tomcat,nginx是不能keepalive的,而tomcat端默认开启了keepalive,会等待keepalive的timeout,默认不设置就是使用connectionTimeout。所以必须设置tomcat的超时时间,并关闭tomcat的keepalive。否则会产生大量tomcat的socket timewait。maxKeepAliveRequests=”1”就可以避免tomcat产生大量的TIME_WAIT连接,从而从一定程度上避免tomcat假死。 七、JVM性能调优

Tomcat本身还是运行在JVM上的,通过对JVM参数的调整我们可以使Tomcat拥有更好的性能。

目前针对JVM的调优主要有两个方面:内存调优和垃圾回收策略调优

jvm内存管理机制:

什么是堆(Heap)和非堆(Non-heap)内存?

按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。 堆内存就是运行java程序的内存,非堆内存就是JVM本身的内存,本身内存代表方法区、JVM内部处理或优化所需的内存(如IT编译后的代码缓存)、每个类结构(如运行时常数池、资源和方法数据)以及方法和构造的代码都在非堆内存中0

堆内存分配

JVM初始分配的堆内存是由-Xms指定的,默认大小是物理内存的1/64,JVM最大分配的堆内存由-Xmx指定,默认大小是物理内存的1/4。

默认空余内存小于40%时,JVM就会增大堆内存知道-Xmx的最大限制,当空余内存大于70%时,JVM会减少堆内存到-Xms的最小限制,因此服务器一般设置-Xms和-Xmx相同,避免在每次GC后调整堆内存的大小,减少耗费的资源

说明:如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try...catch捕捉。

非堆内存分配

JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

-server选项下默认MaxPermSize为64m,-client选项下默认MaxPermSize为32m。

还有一说:MaxPermSize缺省值和-server -client选项相关

**XX:MaxPermSize设置过小会导致java.lang.OutOfMemoryError: PermGen space 也就是内存益出。 **

为什么会内存益出: (1)这一部分内存用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同 (2)GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS 的话,就很可能出现PermGen space错误。 这种错误常见在web服务器对JSP进行pre compile的时候。

修改内存等 JVM相关配置 [root@rzy ~]# vim /usr/local/tomcat/bin/catalina.sh 。。。。。。 139 CLASSPATH= #放在CLASSPATH=下面 140 JAVA_OPTS="-Xms2048M -Xmx2048M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M" #添加 。。。。。。 #保存退出 [root@rzy ~]# /usr/local/tomcat/bin/shutdown.sh #重启服务 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@rzy ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. ******注释: -server:启用 JDK的 server 版本; -Xms:虚拟机初始化时堆的最小内存,一般与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能; -Xmx:Java虚拟机可使用堆的最大内存;建议均设为物理内存的一半。不可超过物理内存。 -XX:PermSize:设定内存的永久保存区初始大小; -XX:MaxPermSize:设定内存的永久保存区初始大小最大值;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3