修改端口号

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内存有两种方式:

  1. 修改bin目录下的catalina.bat(Windows下)| catalina.sh(Linux下);
  2. 修改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模式)

最新文章

  1. linux在home目录下使用ls命令卡死
  2. JQ学习(一)
  3. C#手动做一个负载均衡服务器
  4. hdu 1426 Sudoku Killer
  5. OC - 25.CAKeyframeAnimation
  6. python之第一个例子hello world
  7. 【PHP】最详细PHP从入门到精通(四)——PHP中的字符串
  8. python 求解线性方程组
  9. MySQL数据库基础
  10. Java中的List转换成JSON报错(一)
  11. JAVA 数组作为方法参数—传递地址
  12. 对于一个段错误(核心已转储)问题的解答,错误的英文翻译是segment fault(core dumped)
  13. Charles 抓包工具绿化过程记录
  14. iText C# 合并PDF文件流,以及A5变A4时内容默认放在最底下的问题的解决方法;ASP.NET 实现Base64文件流下载PDF
  15. Hibernate框架第一天
  16. 一个基于netty的websocket聊天demo
  17. Android开发中常见的设计模式(一)——单例模式
  18. LeetCode题解之Split Linked List in Parts
  19. 关于k8s这项大动作,预示着边缘计算迎来“开源”发展的新周期……
  20. SQL备份数据库代码

热门文章

  1. 1.Linux安装redis
  2. 【leetcode】1026. Maximum Difference Between Node and Ancestor
  3. 探讨vue的双向绑定原理及实现
  4. File类常用的方法与字节流类方法简介
  5. 20180820-Java 抽象类
  6. 网站名,服务器名,url,ip,域名的区别和联系。
  7. svn 中的add 和commit命令有何区别
  8. 使用rdb文件进行redis数据迁移--python脚本
  9. github信息安全开源课
  10. 身份证验证的js