欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tomcat调优总结

程序员文章站 2022-06-01 12:01:55
...

在我们开发阶段完成后,项目部署到对应的Linux机器中后,在Tomcat服务的角度提高服务实例的性能,进而提高整个系统的并发量,如下图对应的架构图对应于tomcat中conf/server.xml的文件的标签:

##硬件方面

  • 服务器资源

    单个服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能好,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持的。所以不到万不得已不会采用这种方式,一般公司会采取下面这种通过优化配置,来提升Tomcat性能的方式。

##软件方面

  1. 优化配置

    优化配置之前需要配置一个tomcat管理员账户,来登录查看Tomcat控制台提高的各种参数。 在conf/ 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"/>
    复制代码
  2. tomcat的3种运行模式

    BIO: 默认的模式,同步阻塞模式,性能非常低下,没有经过任何优化处理和支持.

    NIO: NIO(new I/O),同步非阻塞模式,利用多路复用器提高性能,是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即Java.nio包及其子包)。java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。

    APR: 安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

    以NIO模式为例子:

    启动NIO模式 修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol

    启动tomcat,登录查看信息:http://127.0.0.1:8080/

  3. 执行器优化(使用线程池)

    在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。 开启并且使用 配置:

在Connector中指定使用共享线程池

查看Tomcat控制台
复制代码

**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:最大可以创建的处理请求的线程数;
	
	maxThreads: Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值150。

	acceptCount: 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。
	
	minSpareThreads: Tomcat初始化时创建的线程数。默认值25。
	
	maxSpareThreads: 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值75。
	
	enableLookups: 是否反查域名,默认值为true。为了提高处理能力,应设置为false
	
	connnectionTimeout: 网络连接超时,默认值60000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
	
	maxKeepAliveRequests: 保持请求数量,默认值100。 bufferSize: 输入流缓冲大小,默认值2048 bytes。
	
	compression: 压缩传输,取值on/off/force,默认值off。 其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
复制代码
  1. 禁用AJP连接器(在一般项目中使用Nginx+tomcat的架构)

    AJPApache JServer Protocol) AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。如图

    在Nginx+tomcat的架构中,禁用AJP连接器
    查看管理界面中查看:

  2. JVM的参数的优化

    根据服务器物理内容情况配置相关参数优化tomcat性能。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。 Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大.

    Tomcat默认可以使用的内存为128MB,Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置: JAVA_OPTS=’-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】 -XX:PermSize=64M -XX:MaxPermSize=128m’ 需要把几个参数值调大。例如: JAVA_OPTS=’-Xms256m -Xmx512m’ 表示初始化内存为256MB,可以使用的最大内存为512MB。

    参数的详解:

     	-server  启用jdk 的 server 版;
     	-Xms    java虚拟机初始化时的最小内存;
     	-Xmx    java虚拟机可使用的最大内存;
     	-XX:PermSize    内存永久保留区域
     	-XX:MaxPermSize   内存最大永久保留区域 
     	-Xmn    jvm最小内存
    复制代码

    32G的机器的配置例子:

     	JAVA_OPTS="$JAVA_OPTS  -Xms10g -Xmx10g -XX:PermSize=1g -XX:MaxPermSize=2g -Xshare:off -Xmn1024m复制代码

上一篇: Tomcat调优

下一篇: JVM性能调优