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配置反向代理的全过程记录
Mar 31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 Servers
nginx请求限制配置方法
Jul 09 Servers
详解Nginx 被动检查服务器的存活状态
Oct 16 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
了解Kubernetes中的Service和Endpoint
Apr 01 Servers
nginx 添加http_stub_status_module模块
May 25 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
Windows10安装Apache2.4的方法步骤
Jun 25 Servers
git stash(储藏)的用法总结
Jun 25 Servers
教你nginx跳转配置的四种方式
Jul 07 Servers
CentOS7设置ssh服务以及端口修改方式
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 daddslashes 使用方法介绍
2012/10/26 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
tp5.1 框架查询表达式用法详解
2020/05/25 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
parentElement,srcElement的使用小结
2014/01/13 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
运动会加油稿100字
2014/09/19 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
2014年民警工作总结
2014/11/25 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python