修改端口号
1024-655365 之间取端口号
Tomcat有3个重要端口:
默认访问端口:8080
默认监听关闭tomcat的端口:8005
默认AJP访问端口:8009
vim tomcat/conf/server.xml
···
<Server port="8005" shutdown="SHUTDOWN"> #关闭时服务监听的端口
···
<Connector port="8080" protocol="HTTP/1.1" #客户端访问监听的端口
connectionTimeout="20000"
redirectPort="8443" />
···
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #处理AJP协议监听的端口
修改内存
修改tomcat内存有两种方式:
- 修改bin目录下的catalina.bat(Windows下)| catalina.sh(Linux下);
- 修改bin目录下的startup.bat(Windows下)| catalina.sh(Linux下);
JAVA_OPTS="-server -Xms256m -Xms512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
#将上面的代码添加到catalina.sh的第二行,或设置catalina.sh中第250行左右的JAVA_OPTS后面的参数。
#注:server:虚拟机的运行模式,多个CPU的时候更好的发挥性能。默认是client。
Xms:堆内存。java heap初始大小,默认为物理内存的64分之1。最大不要超过物理内存的80%。
Xmx:java heap的最大值,建议设置为物理内存的一半。
MetaspaceSize:初始原空间的大小,默认21M。
MaxMetaspaceSize:最大原空间大小,默认无上限
#另jvm默认的最小内存为机器物理内存的1/64,最大内存为机器物理内存的1/4
为什么要修改Tomcat内存?
日常开发中,开发项目比较大的时候依赖的jar包比较多,并且在应用服务器启动的时候,会将项目引用的所有的类依次全部加载到内存当中,java的逻辑内存模式分为堆内存(存储类的实例,数组、引用类型也就是用new生成的对象)、栈内存(存储局部变量比如方法参数)、静态内存区(持久区,该区内存不会被gc回收)
常见内存异常:
OutOfMemoryError:Java head space异常
原因:堆内存满,依赖的jar太多。
OutOfMemoryError : PermGen space异常
原因:静态内存区满,加载的类太多
StackOverflowError异常
原因:栈内存溢出,死循环或无限递归导致
Tomcat的热部署
热部署的三种方式:
1、将web应用文件war包直接放在webapps里,tomcat运行时会自动解压;
2、修改sever.xml文件,在Host段内添加Context标签。如下:
<Context debug="0" path="/xxxxdemo" docBase="项目路径" reloadable="true"></Context>
#path为访问时端口号后加的路径,项目名。
#debug为项目异常时,输出的日志文件的详细程度,值越大越详细。
3、在conf/Catalina/localhost文件夹下新建xml文件,内容同上,这种情况不能设置path属性,tomcat不认,只能用该xml文件的名字作为部署的应用名。如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="项目路径" reloadable="true"></Context>
隐藏版本号
- lib/catalina.jar/org/apache/catalina/util/ServerInfo.properties中server.info=Apache Tomcat/8.5.31改为NO VERSION
AJP协议
若tomcat前面用nginx反向代理则可以忽略ajp连接器(connector),如若使用的是apache httpd服务器则不能关闭ajp连接器,关闭该连接器只需要注释掉server.xml中对应的节点即可。如下:
修改Cookies安全性
在tomcat context.xml配置文件中的context节点设置useHttpOnly=true即可开启cookie加密,提高安全性,使cookie不那么容易被窃取,预防xss攻击
性能优化
tomcat三种运动模式:
-
BIO:效率低下,一个线程只能处理一个请求,请求过多的时候,线程会相应的增加,很浪费资源,tomcat7以下版本是BIO,
-
NIO:基于缓存区、非阻塞的I/O。相对于BIO效率更高(少量线程处理多请求),
-
APR:需要操作系统的支持(tomcat7以及以上版本在操作系统安装了APR时候,tomcat默认是apr模式)