Tomcat用户管理的优化配置详解


Posted in Servers onMarch 31, 2022

tomcat用户管理配置

在tomcat-users.xml中添加用户:

<role rolename="manager"/>
  <role rolename="manager-gui"/>
  <role rolename="admin"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

点击server status 输入用户名密码可以查看服务器的状态

1、服务器信息

Tomcat用户管理的优化配置详解

2、JVM的信息 (默认的这些值都很低,我们可以配置)

Tomcat用户管理的优化配置详解

PS Eden Space:JVM的年轻代。  一个对象new 出来后会在Eden Space,直到GC到来,GC会逐一问清楚每个对象是否存在引用,进入Survivor Space(幸存区),没有引用将被kill。

PS Old Gen:JVM的老年代。

PS Survivor Space:幸存区。幸存者区的对象可以活段时间,GC会定期(可以自定义)会对这些对象进行访问,如果该对象的引用不存在了将被kill,如果每次访问该对象都存在引用,将被转移到老年代。(用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。)

Code Cache:代码缓存区。HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存。

PS Perm Gen:永久代。

tomcat优化

 一、tomcat中的三种运行模式之运行模式的优化

Tomcat用户管理的优化配置详解

1、BIO(阻塞式):tomcat的默认模式,该模式性能较低,没有经过任何优化处理和支持,一个线程处理一个请求。缺点:并发量过大时,线程数较多,浪费资源。tomcat7及以下版本,在linux系统中默认使用该模式。

2、NIO-Non-blocking IO(非阻塞IO):Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。Tomcat8在Linux系统中默认使用这种方式。

3、APR:Apache Portable Runtime,从操作系统层面解决io阻塞问题。Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。Linux如果安装了apr和native,Tomcat直接启动就支持apr。

 查看tomcat的启动模式:

Tomcat用户管理的优化配置详解

 修改tomcat的运行模式:

将<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" /> protocol="HTTP/1.1" 修改为NIO模式

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

修改后:

Tomcat用户管理的优化配置详解

ps:这就是tomcat优化第一步,优化tomcat的运行模式

3、http信息

Tomcat用户管理的优化配置详解

二、tomcat执行器(线程池)的优化

tomcat默认是没有启用线程池的,在tomcat中每一个用户请求都是一个线程,所以我们可以使用线程池来提高性能。tomcat的前段有一个调度线程,会将用户的请求放入线程池中,一定时间后线程池中的用户请求任务就变为工作线程。

1、开启线程池:打开server.xml中关于线程池的配置

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="600" minSpareThreads="10"/>

重要参数说明:

name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;

namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;

maxThreads:该线程池可以容纳的最大线程数。默认值:200;

maxIdleTime:在tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。

minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

2、引用线程池

<Connector executor="tomcatThreadPool"
               port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" 
               />

 PS:Connector 的一份最优配:一般情况下我们不使用Executor开启线程池,我们在Connector上直接配置

<Connector 
               port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="1000" 
               minSpareThreads="100"
               acceptCount="1000"
               maxConnections="1000"
               connectionTimeout="20000"
               maxHttpHeaderSize="8192"
               tcpNoDelay="true"
               compression="on"
               disableUploadTimeout="true"  
               redirectPort="8443" 
               enableLookups="false"
               URIEncoding="UTF-8"
               />

maxThreads:最大线程数
minSpareThreads:最小线程数
acceptCount:接受最大队列长度
maxConnections:最大连接数
connectionTimeout:超时等待时间 毫秒
maxHttpHeaderSize:请求头最大值
tcpNoDelay:如果为true,服务器socket会设置TCP_NO_DELAY选项,在大多数情况下可以提高性能。缺省情况下设为true
compression:是否开启压缩GZIP on开启 off 关闭 forde:所有情况下都压缩
disableUploadTimeout:限定上传时间
enableLookups:关闭DNS反向查询,DNS反查很耗时间

三、tomcat优化之禁用AJP连接器实现动静分离

AJP:协议是一个面向包的。web服务器和servlet容器通过TCP链接进行交互,为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP链接到Servlet容器,并在多个请求和响应周期过程会重用链接。

Tomcat用户管理的优化配置详解

web客户1访问tomcat服务器的 资源index.jsp 是可以直接访问的,如果我们访问的是静态资源,tomcat是不方便处理的它会把这些静态资源返回给Apache服务器,由他们返回给用户,所以tomcat服务器相对于nginx服务器在处理静态资源上效率较低。因此我们的网站服务器一般是Nginx+tomcat,nginx负责处理静态资源,因此AJP 协议我们在使用nginx+tomcat架构时可以关闭它来进行效率的优化。

 注释tomcat中server.xml中<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 即可。

四、tomcat中JVM参数优化

对jvm参数的优化我们主要是对堆内存的优化,堆内存分为三大块年轻代、老年代、永久代。

如何分配这三个区域的大小:

如果我们的需求需要经常创建对象,且使用完毕后马上会被回收,这样的场景我们可以给年轻代分配较大空间。例如:对外提供一个查询接口,返回json数据,这个接口被频繁的调用,我们可以将这个服务的年轻代空间调大。

静态变量较多时可以将老年代空间设置大一些。

1、设置堆内存大小

-Xms:JVM启动初始化内存

-Xmx:JVM的最大堆内存,在JVM启动以后会分配-Xmx参数指定的内存空间作为堆内存,但是不一定会全部使用,JVM会根据-Xmx参数来调整真正用于JVM的内存。

-Xmx 、-Xms之间的差值就是三个Virtual空间的大小。

2、年轻代

-xx:NewRatio=8 表示老年代与年轻代的比值是8:1

-XX:SurvivorRatio=32 表示eden与survivor的比值是32:1

-Xmn 表示设置年轻代的大小

3、永久代

-XX:PermSize=16m -XX:MaxPermSize=64M

4、Thread Stack(线程区)

-XX:Xss=128k 

修改tomcat  bin目录下catalina.bat 或者catalina.sh文件,修改内容如下

windows下 catalina.bat

rem ---------------------------------------------------------------------------
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC
setlocal

Linux下catalina.sh

# -----------------------------------------------------------------------------
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
# OS specific support.  $var _must_ be set to either true or false.

参数说明:

#-Dfile.encoding:默认文件编码
#-Xms512m  设置JVM的最小内存为512m,此值可以设置与-Xmx相同以此避免每次垃圾回收完成后JVM重新分配内存。 
#-Xmx1024  设置JVM的最大可用内存
#-XX:NewSize  设置年轻代大小
#-XX:MaxNewSize 设置年轻代最大内存大小
#-XX:PermSize  设置永久代大小
#-XX:MaxPermSize 设置永久代最大内存
#-XX:NewRatio=2 设置年轻代与老年代的比值 2 :表示年轻代与老年代的比值是1:2
#-XX:MaxTenuringThreshold  这种垃圾的最大年龄,默认是15 。 0:表示年轻代不经过Survivor区直接进入老年代,对于老年代较多的应用,设置为0可以提高效率。如果该值较大表示年轻代的对象会在Survivor区进行多次复制,以此增加对象在年轻代的存活时间,增加在年轻代被回收的概率。
#XX:+DisableExplicitGC 应用程序将忽略收到调用GC的代码。及System.GC()是一个空调用。

以上就是Tomcat用户管理的优化配置详解的详细内容,更多关于Tomcat用户管理优化配置的资料请关注三水点靠木其它相关文章!

Servers 相关文章推荐
Nginx进程调度问题详解
Sep 25 Servers
苹果M1芯片安装nginx 并且部署vue项目步骤详解
Nov 20 Servers
详解nginx安装过程并代理下载服务器文件
Feb 12 Servers
Apache Pulsar集群搭建部署详细过程
Feb 12 Servers
nginx容器方式反向代理实战
Apr 18 Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 Servers
Nginx限流和黑名单配置
May 20 Servers
nginx设置资源请求目录的方式详解
May 30 Servers
GPU服务器的多用户配置方法
Jul 07 Servers
Centos7 Shell编程之正则表达式、文本处理工具详解
Aug 05 Servers
教你使用Ubuntu搭建DNS服务器
Sep 23 Servers
keepalived + nginx 实现高可用方案
Dec 24 Servers
Kubernetes关键组件与结构组成介绍
配置Kubernetes外网访问集群
CKAD认证中部署k8s并配置Calico插件
Mar 31 #Servers
使用kubeadm命令行工具创建kubernetes集群
Mar 31 #Servers
Minikube搭建Kubernetes集群
Apache Pulsar结合Hudi构建Lakehouse方案分析
Apache Hudi的多版本清理服务彻底讲解
You might like
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
二级域名转向类
2006/11/09 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
python解释器spython使用及原理解析
2019/08/24 Python
Python3读写ini配置文件的示例
2020/11/06 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
学生自我鉴定模板
2013/12/30 职场文书
施工员岗位职责
2014/03/16 职场文书
活动总结怎么写啊
2014/05/07 职场文书
村级换届选举方案
2014/05/10 职场文书
文案策划专业自荐信
2014/07/07 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
信访维稳承诺书
2015/05/04 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
校运会广播稿
2015/08/19 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
Mysql 设置boolean类型的操作
2021/06/04 MySQL