首页 > 编程知识 正文

tomcat高可用配置,tomcat优化性能

时间:2023-05-03 13:05:42 阅读:25006 作者:3059

文章整个目录的体系结构关键组件执行过程tomcat内存优化和优化缓存优化添加IO优化线程池监听器组件优化APRTomcat Native配置性能测试(工具)1. 参见sdn.net/cc _ XP/article ] 79134451 (https://blog.csdn.net/cc _ XP/article/details/79134451 )

整体体系结构

主要组件

执行流程

tomcat优化可以从内存、并发、缓存、安全性、网络、系统等开始

在JVM相关配置Linux (如内存优化修改内存)中修改TOMCAT_HOME/只是月饼/catalina.sh

jva _ opts='-server-xx : permsize=512 m-xx : maxperm size=1024 m-xms 2048 m-xmx 2048 m

在windows上修改TOMCAT_HOME/只是月饼/catalina.bat

set Java _ opts=-server-xx : permsize=512 m-xx : maxperm size=1024 m-xms 2048 m-xmx 2048 m

参数说明-服务器:支持JDK的服务器版本;

-XMS )初始化Java虚拟机时,堆的最小内存通常设置为与Xmx相同的值。 这具有以下优势: GC不再需要消耗性能来扩展内存空间。

-Xmx:Java虚拟机可以使用的堆的最大内存;

-XX:PermSize:Java虚拟机的永久大小;

-XX:MaxPermSize:Java虚拟机的最大持久大小;

可以使用JDK附带的工具进行验证。 所有这些工具都位于JAVA_HOME/单纯的月饼目录下。

1 ) jps )用于显示本地java进程、进程编号、进程启动的路径等。

2 )观察运行中JVM物理内存的占用情况,如jmap ) Heap size、Perm size等。

进入命令行模式后,进入JAVA_HOME/简单的月饼目录下,然后输入jps命令。

并发优化连接器优化连接器是一个连接器,用于接收客户端的请求并向客户端返回响应消息。 所以优化连接器是很重要的一部分。 默认情况下,Tomcat只支持200个线程的访问,超过此数量的连接会因等待或超时而被丢弃,因此需要提高这方面的处理能力。

调谐后的配置

参数说明maxThreads客户请求的最大线程数

初始化minSpareThreads Tomcat时创建的套接字线程数

maxSpareThreads Tomcat连接器的最大空闲套接字线程数

如果enableLookups设置为true,则支持域名解析,并且可以将ip地址解析为主机名

如果需要安全的基于通道的端口,redirectPort会将客户请求转发到基于SSL的redirectPort端口

接受帐户监听端口队列的最大数量。 满了,顾客的要求就会被拒绝。 (不能小于maxSpareThreads。 )

连接时间输出连接超时

创建minProcessors服务器时的最小处理线程数

maxProcessors服务器的并发最大处理线程数

uri编码URL统一代码

缓存并优化更改后的配置

参数说明compression打开压缩功能

compressionMinSize启用压缩的输出内容大小。 这里默认为2KB

压缩类型

连接时间输出定义了建立客户连接超时的时间。 如果为-1,则建立客户连接的时间不受限制

优化IO配置

说明1:同步块io(Javabio )同步和块、服务器实现模式连接到一个线程(one connection one thread ) (虽然很可怕,但线程是非常宝贵的资源),当然线程

2:JAVA NIO:还分为同步异步阻塞IO,异步阻塞IO和BIO之间的最大差异one request one thread .可以复用相同的线程以处理多个连接(复用)。

3:异步无阻塞io(JavaNIO2也称为AIO )主要与NIO的区别主要在于操作系统的底层差异。 可以用比喻的形式表达。 nio是指网购后,自己去官网查看快递是否送到,然后自己去取快递。 AIO是快递员。 (不需要在意快递的进展情况。

BIO方案适用于连接数相对较少、固定的体系结构。 这种方式对服务器资源的要求比较高,同时仅限于APP应用。 这是JDK1.4之前的唯一选择,但程序直观易懂。

NIO方法适用于连接数多、连接相对较短(轻操作)的体系结构,如聊天服务器。 并发连接仅限于APP应用程序,编程很复杂,JDK1.4开始提供支持。

AIO方案用于连接数多、连接相对长(操作繁重)的体系结构,比

如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持.

开启线程池

配置

参数说明

name:线程池名称,用于 Connector中指定。
namePrefix:所创建的每个线程的名称前缀,一个单独的线程名称为 namePrefix+threadNumber。
maxThreads:池中最大线程数。
minSpareThreads:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在。
maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。
maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。
prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动。
threadPriority:线程池中线程优先级,默认值为5,值从1到10。
className:线程池实现类,未指定情况下,默认实现类为org.apache.catalina.core.StandardThreadExecutor。如果想使用自定义线程池首先需要实现 org.apache.catalina.Executor接口。

添加Listener

另一个影响Tomcat 性能的因素是内存泄露。Server标签中可以配置多个Listener,其中 JreMemoryLeakPreventionListener是用来预防JRE内存泄漏。此Listener只需在Server标签中配置即可,默认情况下无需配置,已经添加在 Server中。

组件优化 APR

APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括访问高级 IO功能(例如sendfile,epoll和OpenSSL),OS级别功能(随机数生成,系统状态等等),本地进程管理(共享内存,NT管道和UNIX sockets)。这些功能可以使Tomcat作为一个通常的前台WEB服务器,能更好地和其它本地web技术集成,总体上让Java更有效率作为一个高性能web服务器平台而不是简单作为后台容器。
APR的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。随着Apache的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用APR而已。目前APR主要还是由Apache使用,不过由于APR的较好的移植性,因此一些需要进行移植的C程序也开始使用APR。
APR使得平台细节的处理进行下移。对于应用程序而言,它们根本就不需要考虑具体的平台,不管是Unix、linux还是Window,应用程序执行的接口基本都是统一一致的。因此对于APR而言,可移植性和统一的上层接口是其考虑的一个重点。而APR最早的目的并不是如此,它最早只是希望将Apache中用到的所有代码合并为一个通用的代码库,然而这不是一个正确的策略,因此后来APR改变了其目标。有的时候使用公共代码并不是一件好事,比如如何将一个请求映射到线程或者进程是平台相关的,因此仅仅一个公共的代码库并不能完成这种区分。APR的目标则是希望安全合并所有的能够合并的代码而不需要牺牲性能。

Tomcat Native

Tomcat Native是 Tomcat可选组件,它可以让 Tomcat使用 Apache 的 APR包来处理包括文件和网络IO操作,从而提升性能及兼容性。

配置

打开conf/server.xml文件,修改Connector 标志的protocol属性:

protocol="org.apache.coyote.http11.Http11AprProtocol"

然后添加Listener:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 性能测试(工具) 1.Jmeter 可参考该博主 https://blog.csdn.net/cc_xp/article/details/79134451

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。