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

目录
  • tomcat用户管理配置
  • tomcat优化
    • 一、tomcat中的三种运行模式之运行模式的优化
    • 二、tomcat执行器(线程池)的优化
    • 三、tomcat优化之禁用AJP连接器实现动静分离
    • 四、tomcat中JVM参数优化

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、服务器信息

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

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中的三种运行模式之运行模式的优化

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。

(安装方法:https://www.jb51.net/os/78408.html)

查看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" />

修改后:

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

3、http信息

二、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容器,并在多个请求和响应周期过程会重用链接。

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用户管理优化配置的资料请关注我们其它相关文章!

(0)

相关推荐

  • idea使用外置tomcat配置springboot详细步骤

    创建一个maven项目 导入springboot依赖,注意底下注释部分 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h

  • Spring Boot如何配置内置Tomcat的maxPostSize值

    目录 Spring Boot配置内置Tomcat的maxPostSize值 Background Problem 1 Problem 2 Tomcat设置maxPostSize导致Post请求不过去 问题 排查问题 分析 Spring Boot配置内置Tomcat的maxPostSize值 Background 前端页面表单输入数据较多,包含多个文本.多张图片,在数据未压缩的情况下,最终上传失败. Problem 1 后端报错: java.lang.IllegalStateException:

  • Tomcat配置JNDI数据源的三种方式

    在我过去工作的过程中,开发用服务器一般都是Tomcat 数据源的配置往往都是在applicationContext.xml中配置一个dataSource的bean 然后在部署时再修改JNDI配置 我猜是因为Tomcat的配置需要改配置文件 不像JBoss,Weblogic等服务器在管理界面可以直接添加JNDI数据源 也很少人去研究它的配置 最近做了个小项目,发布版本的时候都是通过ant编译成jar包之后丢给测试 测试是大爷,教他修改数据源了还是当没听到 周末闲来无聊,看了一些Tomcat配置的教

  • 浅谈Tomcat内存配置的正确姿势

    1.背景 虽然阅读了各大牛的博客或文章,但并没有找到特别全面的关于JVM内存分配方法的文章,很多都是复制黏贴 为了严谨,本文特别备注只介绍基于HotSpot VM虚拟机,并且基于JDK1.7的内存分配情况,有关GC的说法也是基于CMS的concurrent collection(而非G1),防止大牛拍砖. 目前主流的JVM就是HotSpot VM(其次还有J9 VM,Zing VM),目前各类博客文章也大多基于JDK1.7以前的版本进行阐述的. (注:因为不同的虚拟机实现,不同的JDK,内存的分

  • Tomcat将配置文件放在外部的解决方法

    问题 我们在平常开发的时候, 如果要把项目部署到Tomcat里面, 一般的做法就是讲项目打成war包, 然后将war包扔到Tomcat的webapps目录下面, 然后启动项目就可以了. 但是在将项目部署到生产环境的时候, 生产环境的配置文件一般是与本地开发不一样的, 那么使用刚刚的方法在生产上部署, 就比较麻烦, 需要手动去删除原来的配置文件, 或者打包的时候排除配置文件, 然后在将正确的配置文件复制到项目的resource目录下面去. 那么,有没有更简单一点的方法呢? 解决方法 我们可以将配置

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

    目录 tomcat用户管理配置 tomcat优化 一.tomcat中的三种运行模式之运行模式的优化 二.tomcat执行器(线程池)的优化 三.tomcat优化之禁用AJP连接器实现动静分离 四.tomcat中JVM参数优化 tomcat用户管理配置 在tomcat-users.xml中添加用户: <role rolename="manager"/> <role rolename="manager-gui"/> <role rolena

  • Tomcat 7.0多端口配置详解

    修改tomcat/conf目录里面server.xml文件 例如下面这样新增一个8081端口,设置下appBase目录,这样就可以用一个tomcat监听多个端口,每个端口都可以放应用了.我这样新增下面这个配置以后,tomcat就监听了2个端口(8080,8081) webapps目录和webapps1目录的应用都会启动,可以根据不同的端口进行访问里面的应用 <?xml version="1.0" encoding="UTF-8"?> <Server

  • 优化MyBatis配置文件中的配置详解

    本文研究的主要是优化MyBatis配置文件中的配置的相关内容,具体介绍如下. 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&

  • myeclipse8.5优化技巧详解

    还在为自己的配置低而抛弃MyEclipse8.5?还在为那低下的速度而苦恼吗?下面我们看看myeclipse8.5优化技巧的具体方法. 取消自动validation validation有一堆,什么xml.jsp.jsf.js等等,我们没有必要全部都去自动校验一下,只是需要的时候才会手工校验一下! 取消方法: windows–>perferences–>myeclipse–>validation 除开Manual下面的复选框全部选中之外,其他全部不选 手工验证方法: 在要验证的文件上,单

  • vue3 axios 实现自动化api配置详解

    目录 概述 示例 约定 请求 URL 的约定 请求传参的约定 分页列表,请求参数约定 分页列表 响应示例 响应码 code 的约定 请求跨域问题解决方案 全局配置 配置说明coder/config.js 模型配置 1.实现对一个实体进行增.删.改.查.导出.唯一性校验 2.只需要增.删.改.查中得某些操作,可以指定生成你需要的方法 3.自定义方法配置 4.指定请求接口地址前缀 概述 在实践中,我们发现上述的代码重复率非常高,新增和修改都费力,并且是没技术含量的体力活. 但又必须要这样做,不适合以

  • Apache Doris Join 优化原理详解

    目录 背景 & 目标 Doris 数据划分 Partition Bucket Join 方式 总览 Broadcast / Shuffle Join Bucket Shuffle Join Plan Rule Colocate Join Runtime Filter 优化 Join Reorder 优化 Join 调优建议 背景 & 目标 掌握 Apache Doris Join 优化手段及其实现原理 为代码阅读提供理论基础 Doris 数据划分 不同的 Join 方式非常依赖于对 Dor

  • RSync实现文件同步备份配置详解

    一.什么是rsync rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 "rsync 算法"提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件. rsync 包括如下的一些特性: 能更新整个目录和树和文件系统: 有选择性的保持符号链链.硬链接.文件属于.权限.设备以及时间等:

  • Struts 2中的constant配置详解

    1.<constant name="struts.i18n.encoding" value="UTF-8" /> 指定Web应用的默认编码集,相当于调用 HttpServletRequest的setCharacterEncoding方法. 2.<constant name="struts.i18n.reload" value="false"/> 该属性设置是否每次HTTP请求到达时,系统都重新加载资源文

  • Nginx配置详解(推荐)

    序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器.支持FastCGI.SSL.Virtual Host.URL Rewrite.Gzip等功能.并且支持很多第三方的模块扩展. Nginx的稳定性.功能集.示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站.

  • Ubuntu 17.10安装phpMyAdmin数据库管理工具配置详解

    和Windows下各种双击安装直接使用的数据库管理工具不同,Linux下的数据库管理工具显得有些稍稍复杂.由于版权和收费限制,很多好用的数据库管理工具例如Data Grip和Navicat不能直接在Linux的包管理器中安装使用.不过仍然有一些好用的DBMS,phpmyadmin就是其中之一. 安装LAMP LAMP是Linux.Apache.MySql(MariaDB).PHP(Python.Perl)等软件的合称.我们现在要在Ubuntu16.04上安装,因此只需要安装其他三个软件就可以了.

随机推荐