tomcat优化配置小结
1修改Tomcat的内存配置,打开$TOMCAT_HOME/bin/catalina.sh文件
内存优化:
- -server参数:表示以服务模式启动,启动速度会稍微慢一点,但性能会高很多。不加这个参数,默认是以客户端模式启动。 -server:启用jdk的server版本
- -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。
- -XX:MaxNewSize:新生代占整个堆内存的最大值。
- -XX:MaxPermSize:Perm(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域

1)错误提示:java.lang.OutOfMemoryError:Java heap space
set JAVA_OPTS=-Xms512m-Xmx512m
2)错误提示:java.lang.OutOfMemoryError: PermGenspace
setJAVA_OPTS=-XX:PermSize=128M
2 连接数优化,主要是在conf/server.xml配置文件中进行修改。
2.1、优化线程数
增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads)
- maxThreads:tomcat可用于请求处理的最大线程数,默认是200
- minSpareThreads:tomcat初始线程数,即最小空闲线程数
- maxSpareThreads:tomcat最大空闲线程数,超过的会被关
- acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理.默认100

2.2、使用线程池
在server.xml中增加executor节点,然后配置connector的executor属性
- namePrefix:线程池中线程的命名前缀
- maxThreads:线程池的最大线程数
- minSpareThreads:线程池的最小空闲线程数
- maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭
- threadPriority:线程优先级

当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too many open files错误。可使用下面步骤检查:
ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号,假设进程ID为10001
lsof -p 10001|wc -l 查看当前进程id为10001的 文件操作数
使用命令:ulimit -a 查看每个用户允许打开的最大文件数
3 tomcat connector三种运行模式(BIO,NIO,APR)
3.1、三种模式比较
1)BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下在Linux系统中默认使用这种方式
2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动(conf/server.xml配置文件):
3)APR(Apache Portable Runtime):从操作系统层面解决io阻塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。
3.2、apr模式
安装apr以及tomcat-native
yum -y install


make && make install
安装成功后还需要对tomcat设置环境变量,方法是在catalina.sh文件中增加1行

修改8080端对应的conf/server.xml

4 并发配置优化
Tomcat的并发请求处理数量=maxThreads + acceptCount
enableLookups:如果为true,调用request.getRemoteHost会执行DNS反查,反向解析IP对应的域名或主机,效率较低,建议设为false。

5 tomcat配置优化


6 执行器优化(线程池)
Executor重要参数说明:
- name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;
- namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;
- maxThreads:该线程池可以容纳的最大线程数。默认值:200;
- maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。
- minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。
- threadPriority:线程的等级。默认是Thread.NORM_PRIORITY
Connector重要参数说明:
- executor:表示使用该参数值对应的线程池;
- minProcessors:服务器启动时创建的处理请求的线程数;
- maxProcessors:最大可以创建的处理请求的线程数;
- acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。

7 禁用AJP连接器

我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用

8 配置优化
8.1 Connector 优化
8.2 线程池
Executor代表了一个线程池,可以在Tomcat组件之间共享。使用线程池的好处在于减少了创建销毁线程的相关消耗,而且可以提高线程的使用效率。
8.3 Listener
Server标签中可以配置多个Listener,其中 JreMemoryLeakPreventionListener是用来预防JRE内存泄漏。此Listener只需在Server标签中配置即可,默认情况下无需配置,已经添加在 Server中。
9 设置Tomcat的编码

10 设置Tomcat的热部署
docBase:项目所在路径,可以使用绝对路径或相对路径,相对路径是相对于webapps ;
path:访问项目的路径;
reloadable:是否自动加载新增或改变的class文件;

11 修改Tomcat命令窗口的名字
在运行多个tomcat窗口的时候,可以通过修改tomcat命令窗口的名字来区分不同的tomcat;

上一篇:org.apache.tomcat.util.http.fileupload.IOUtils报错对应jar问题
栏 目:其它服务器
下一篇:IDEA2022创建Web项目配置Tomcat的详细图文说明
本文标题:tomcat优化配置小结
本文地址:https://zz.feitang.co/server/28961.html
您可能感兴趣的文章
- 12-22nginx代理实现静态资源访问的示例代码
- 12-22Docker 存储管理的几种方式
- 12-22nginx静态资源的服务器配置方法
- 12-22Docker Compose部署微服务项目上线功能
- 12-22GPU服务器的多用户配置方法
- 12-22docker-compose搭建etcd集群的实现(三节点)
- 12-22docker中mysql开启日志的实现步骤
- 12-22Linux下docker安装mysql8并配置远程连接
- 12-22docker部署mysql8并设置可远程连接
- 12-22阿里云oss对象存储使用详细步骤


阅读排行
推荐教程
- 12-11docker存储目录迁移示例教程
- 12-10docker start启动容器后仍然exit状态的解决
- 12-10Linux下如何安装Logstash
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法
- 12-13k8s编排之Deployment知识点详解
- 12-13Nginx IP封禁及自动封禁IP的实现
- 12-13Nginx代理Partainer如何使用





