如何提高tomcat服务器的性能
Tomcat性能调优方案
一、操作系统调优
对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。
适用场景 任何项目。
二、Java虚拟机调优
应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。
JDK14比JDK13性能提高了近10%-20%,JDK15比JDK14性能提高25%-75%。
因此对性能要求较高的情况推荐使用 JDK16。
适用场景 任何项目。
三、Apache集成Tomcat
Web服务器专门处理HTTP请求,应用服务器是通过很多协议为应用提供商业逻辑。虽然Tomcat也可以作web服务器,但其处理静态html的速度比不上Apache,且其作为web服务器的功能远不如Apache,因此把Apache和Tomcat集成起来,将html和Jsp的功能部分进行明确分工,让Tomcat只处理Jsp部分,其他的由Apache,IIS等web服务器去处理,由此大大提高Tomcat的运行效率。
如果一个项目中大量使用了静态页面、大量的等,并有有较大的访问量,推荐使用Apache集成Tomcat的方式来提高系统的整体性能。
Apache和Tomcat的整合有三种方式,分别是JK、http_proxy和ajp_proxy其中JK方式是最常见的方式,JK本身有两个版本分别是1和2,目前1最新版本是128,而版本2早已经废弃了。http_proxy是利用Apache自带的mod_proxy模块使用代理技术来连接Tomcat。Ajp_proxy连接方式其实跟http_proxy方式一样,都是由mod_proxy所提供的功能。只需要把配置中的http://换成ajp://,同时连接的是Tomcat的AJP Connector所在的端口。
相对于JK的连接方式,后两种在配置上比较简单的,灵活性方面也一点都不逊色。但就稳定性而言不像JK这样久经考验,所以建议采用JK的连接方式。
Apache+JK+Tomcat配置:
使用到的两个配置文件分别是:httpdconf和mod_jkconf。其中httpdconf是Apache服务器的配置文件,用来加载JK模块以及指定JK配置文件信息。mod_jkconf是到Tomcat服务器的连接定义文件。
部署步骤
1安装Apache服务器
2部署Tomcat
3将mod_jkso拷贝到modules目录下面
4修改httpdconf和mod_jkconf
适用场景 大量使用静态页面的应用系统。
四、Apache和Tomcat集群
对于并发要求很高的系统,我们需要采取负载均衡的方式来分担Tomcat服务器的压力。负载均衡实现大概有四种:第一是通过DNS,但只能简单的实现轮流分配,不能处理故障;第二是基于MS IIS,windows 2003 server本身就带了负载均衡服务;第三是硬件方式,通过交换机功能或专门的负载均衡设备来实现;第四种是软件的方式,通过一台负载均衡服务器进行,上面安装软件。使用Apache Httpd Server做负载均衡器,Tomcat集群节点使用Tomcat就可以做到上述第四种方式,这种方式比较灵活,成本相对比较低,另外一个很大的优点就是可以根据应用情况和服务器的情况做一些灵活的配置。所以推荐使用Apache+Tomcat集群来实现负载均衡。
采用Tomcat集群可以最大程度的发挥服务器的性能,可以在配置较高的服务器上部署多个Tomcat,也可以在多台服务器上分别部署Tomcat,Apache和Tomcat整合的方式还是JK方式。经过验证,系统对大用户量使用的响应方面,Apache+3Tomccat集群> Apache+2Tomcat集群 > Apache集成Tomcat > 单个Tomcat。并且采用Apache+多Tomcat集群的部署方式时,如果一个Tomcat出现宕机,系统可以继续使用,所以在硬件系统性能足够优越的情况下,需要尽量发挥软件的性能,可以采用增加Tomcat集群的方式。
Apache+Tomcat集群的方式使用到得配置文件有httpdconf、mod_jkconf、workersproperties。其中mod_jkconf是对JK信息的配置,包括JK的路径等,workersproperties配置文件是对Tomcat服务器的连接定义文件。
Apache需要调整运行参数,这样才能构建一个适合相应网络环境的web服务。其中可进行的优化配置如下:
1 设置MPM(Multi Processing Modules多道处理模块)。ThreadPerChild,这个参数用于设置每个进程的线程数,在Windows环境下默认值是64,最大值是1920,建议设置为100-500之间,服务器性能高的话值大一些,反之小一些。MaxRequestPerChild表示每个子进程能够处理的最大请求数。这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为很大的参数,否则设置一个较小的值,建议值是3000
2 关闭DNS和名字解析 HostnameLookups off
3 打开UseCanonicalName模块 UseCanonicalName on
4 关闭多余模块 一般来说,不需要加载的模块有,mod_includeso、mod_autoindexso、mod_accessso、mod_authso
5 打开KeepAlive支持
KeepAlive on, KeepAliveTimeout 15 MaxKeepAliveRequests 1000
根据实际经验,通过Apache和Tomcat集群的方式提高系统性能的效果十分明显,这种方式可以最大化的利用硬件资源,通过多个Tomcat的处理来分担单Tomcat时的压力。
部署步骤
1安装Apache服务器
2部署Tomcat集群,即多个相同的Tomcat。
3将mod_jkso拷贝到modules目录下面
4修改httpdconf、mod_jkconf和workersproperties
适用场景 并发用户量及在线使用用户数量比较高的系统。
五、Tomcat自身优化
1 JVM参数调优:-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值。这两个值的大小一般根据需要进行设置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。在catalinabat中,设置JAVA_OPTS='-Xms256m -Xmx512m',表示初始化内存为256MB,可以使用的最大内存为512MB。
2 禁用DNS查询
当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改serverxml文件中的enableLookups参数值:
Tomcat4
<Connector className="orgapachecoyotetomcat4CoyoteConnector" port="80" minProcessors="5" maxProcessors="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" useURIValidationHack="false" disableUploadTimeout="true" />
Tomcat5
<Connector port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true"/>
3 调整线程数
通过应用程序的连接器(Connector)进行性能控制的的参数是创建的处理请求的线程数。Tomcat使用线程池加速响应速度来处理请求。在Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。
Tomcat4中可以通过修改minProcessors和maxProcessors的值来控制线程数。这些值在安装后就已经设定为默认值并且是足够使用的,但是随着站点的扩容而改大这些值。minProcessors服务器启动时创建的处理请求的线程数应该足够处理一个小量的负载。也就是说,如果一天内每秒仅发生5次单击事件,并且每个请求任务处理需要1秒钟,那么预先设置线程数为5就足够了。但在你的站点访问量较大时就需要设置更大的线程数,指定为参数maxProcessors的值。maxProcessors的值也是有上限的,应防止流量不可控制(或者恶意的服务攻击),从而导致超出了虚拟机使用内存的大小。如果要加大并发连接数,应同时加大这两个参数。web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。
在Tomcat5对这些参数进行了调整,请看下面属性:
maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
connnectionTimeout 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
minSpareThreads Tomcat初始化时创建的线程数。
maxSpareThreads 一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
最好的方式是多设置几次并且进行测试,观察响应时间和内存使用情况。在不同的机器、操作系统或虚拟机组合的情况下可能会不同,而且并不是所有人的web站点的流量都是一样的,因此没有一刀切的方案来确定线程数的值。
六、APR库使用
Tomcat中使用APR库,其实就是在Tomcat中使用JNI的方式来读取文件以及进行网络传输。可以大大提升Tomcat对静态文件的处理性能,同时如果你使用了HTTPS方式传输的话,也可以提升SSL的处理性能。
一般在Windows下,可以直接下载编译好的二进制版本的dll库文件来使Tomcat启用APR,一般建议拷贝库文件tcnative-1dll到Tomcat的bin目录下。而在Linux下,可以直接解压和安装bin目录下的tomcat_nativetargz文件,编译之前要确保apr库已经安装。
怎么才能判断Tomcat是否已经启用了APR库呢?方法是通过看Tomcat的启动日志:
如果没有启用APR,则启动日志一般有这么一条:
orgapachecoyotehttp11Http11Protocol start
如果启用了APR,则这条日志就会变成:
orgapachecoyotehttp11Http11AprProtocol start
tcnative-1dll 下载地址:http://tomcatheanetie/native/
调优综述
根据以上分析,如果想要Tomcat达到最优的效果,首先要争取使得操作系统以及网络资源达到最优,并且最好使用高版本的JDK。对于有大量静态页面的系统,采用Apache集成Tomcat的方式,把静态页面交由Apache处理,动态部分交由Tomcat处理,能极大解放Tomcat的处理能力。使用ARP库也能极大的提高Tomcat对静态文件的处理能力。对于并发要求较高的系统,采用Apache加Tomcat集群的方式,将负载分别分担到多个Tomcat上,能很大的提高系统的性能,充分利用硬件资源。同时需要对Tomcat自身进行优化,包括增大内存、调节并发线程数等。
这里有许多你只需要做简单的操作就能对提高服务器的性能有所帮助。所有的这些都不可能对移动页文件到一个指定磁盘有什么异常情况发生,尽管大多数的操作需要手动完成,但是这些所有的技巧都能够显著地提高服务器的性能。
大多数讨论关于优化服务器性能的文章都会集中在使用性能监视器来寻找性能瓶颈问题。性能监视器对于如何提高服务器性能来说,确实是一个优秀的工具。但是,使用性能监视器,是需要用户必须了解性能监视器中产生的数据都是些什么意思。
那么,这里有十项能够帮助你做提高服务器性能的事情
1为页文件使用专用磁盘
这项技巧可能是最大限度的提高你服务器性能的方法。默认情况下,Windows创建一个页文件,将它作为虚拟内存。因为Windows会频繁的使用这个文件。这个文件最好的存储位置就是在一个专门磁盘上(注意:不是单独卷)。服务器性能做这些会确保Windows在读取页文件数据前,而将不需等待其他的应用使用硬盘完成。
2保证你的硬盘定期运行磁盘碎片整理程序服务器性能
现今的磁盘在执行连续不断的读取时,其实是很快的。然而,当磁盘被请求去读取散乱存放的数据时,Windows的性能就会下降。通过运行磁盘碎片整理程序,你能够确保文件能以顺序的方式而不是杂乱无章的存放在磁盘上,从而,你的计算机将会高效地读取文件。
3使用NTFS文件系统
尽管对于Windows服务器版本操作系统来说,NTFS是默认的文件系统,Windows是支持使用FAT和FAT-32文件系统的。我读过的每一本MSCE培训教程推荐使用NTFS文件系统是因为它比FAT和FAT-32文件系统使用中更安全。服务器性能但是这些书籍中都没有提及NTFS是一种基于处理(transaction-based)的文件系统。这就意味着相比较FAT和FAT-32文件系统而言,NTFS文件系统更快。
4避免运行16-位应用
64位Windows操作系统根本不能够运行16位应用,所以说这一项对于64位操作系统来说并不是个问题。但是,32位Windows操作系统将会运行16位应用。使用多任务处理模式的Windows更多的使用16位应用。服务器性能讨论Windows的多任务处理使用16位应用将需要单独开篇说明,但是可以确定的说,运行16位应用会对降低性能。
5查找内存泄漏(memory leaks)
内存泄漏很难被写成是一个应用上的问题。通常情况下,它会为一个应用去在一个需要的基础上请求操作系统中的内存。典型的是,当应用不再被运行时,它将会把内存释放给操作系统。如果一个应用包括了一个内存泄漏,当它被运行时,将会向内存发出请求,但是当使用完毕后,释放内存是失败的。服务器性能当下一次应用需要内存时,它将会向Windows要求的内存数比上一次要多。长此以往,Windows能够为其他的应用提供的内存数将会越来越少。
最初,内存泄漏对系统性能的影响是可以忽略不计的,但是当这样的泄漏变得越来越多的时候,它对系统性能的影响就会凸现出来。
尽管我曾经说过我不会在这篇文章中讨论性能监控器,但是对于查找内存泄漏来说,性能监控器是最佳工具。
6移除那些极少使用的组件
我曾经购买的每一台服务器上都会装上各种各样的监控或者日志组件。如果你能够有计划有规律的使用这些组件的话,在计算机上安装这些组件算不得什么不正确的选择。服务器性能但是令我吃惊的是有很多系统管理员安装(或者从不移除)那些服务器上的组件,并且实际上除了浪费系统资源外,它们甚至从来没被运行过。
7停止运行那些不使用的服务
在一篇类似的文章中,我也推荐浏览服务控制管理器,并关闭那些没有被用到的服务。这样不但能够提高我们的服务器性能,另外它也可以提高服务器的安全性。计算机有一条法则描述了被执行的代码越多,代码中包含的不安全因素的机会就会增多。通过关闭那些不使用的服务,你做得即是减少执行代码的大小,从而降低服务器包含的安全漏洞被利用的机会。
8注销
这是另一个你能够提高服务器安全和性能的方法。当你不再使用控制台的时候,出于安全原因考虑,你应该进行注销操作。服务器性能 同时,在你登陆时,Windows将会加载你的用户属性,这将会消耗内存和CPU。
9压缩磁盘
当微软发布MS-DOS50时,它们介绍了其磁盘压缩的特色功能。当时的情况是让硬盘或者软盘能够通过压缩功能存储更多的数据。当我试着使用磁盘压缩技术,这时,我的计算机运行就慢了下来,我就改回使用一个没有压缩的磁盘,并且直到最近再没有使用过压缩。
现在,在正常的情况下,压缩确实能够提高系统性能。在一台计算机中,硬盘算得上是运行最慢的部分了。然而,如果你能够压缩一个文件,你就是减少了它的物理大小,这也将会减少从硬盘中读取它的时间量。
同时,一个压缩文件必须在它从磁盘读取后被解压。解压操作通常是占用内存,并且进程会附带的使用一些CPU时间。如果你的服务器运行一个磁盘加强的应用来解决大量的分散文件(不是一个数据库),执行压缩能够提高系统性能。
10调整服务器响应
与个人计算机不同的是服务器并不总是从服务器的控制台那里运行应用。那么,最优化服务器是将获得优先权的应用到后台执行。
你可以通过打开服务器的控制面板,并双击系统图标。当窗口中显示系统属性标签时,转到“高级”标签项,找到性能设置部分,并点击设置按钮。窗口中将会显示性能选项属性标签。转到属性标签中的高级选项,并确定服务器设置为后台服务的最佳性能。
望采纳我们知道,服务器是用来提供各类服务(如Web服务、数据库、办公系统)的专用计算机,服务器的性能及运行状态会直接影响服务的稳定性。不管你用的是云服务器还是托管的服务器,都需要定期对服务器进行维护,否则服务器总有一天会变得让你觉得“卡顿”。很多人觉得服务器的“卡顿”是因为服务器运行时间长了就会卡顿,其实这种想法还是很片面的,很多因素都会导致服务器的“卡顿”现象。
服务器硬件配置及老化程度会影响服务器运行速度及稳定性
服务器和我们家用电脑一样都是由软硬件来支撑的,如果硬件配置跟不上那服务器的性能自然提升不了。
1、检查服务器硬件配置
像Windows系统可在任务管理器中查看CPU及内存占用情况,而Linux系统可通过top命令或free、df等命令查看相关配置。
现在一般的Web站点服务器最低配置都是:CPU2核、内存2G、固态硬盘起步了,如果你的站点访问用户较多,那就要视情况升级你的服务器配置。
2、传统硬件服务器要让机房检查下硬件老化程度
现在云服务器可以不考虑硬件老化情况,但还有不少人在用传统的硬件服务器托管的,这就要看下你的服务器用了多少年了,是否存在硬件老化的情况。
检查服务器是否被人攻击
很多时候服务器的突然卡顿是因为服务器受到了攻击导致的,因为服务器是暴露在公网上的,如果不做一些防护很容易受到各种攻击。
服务器被人攻击最直观的表现有:
服务器内存及CPU占用一直居高不下;
服务器上行带宽被占满,一直对外发包;
系统里出现一些未知文件、程序、账户等。
那我们如何排查呢?这里网络圈给大家的建议是按以下步聚进行排查:
1、首先对服务器系统进行杀毒,如果是Windows系统,一定要安装杀毒软件
2、看下服务器各文件夹下是否有可疑文件及可疑程序
3、看下服务器是否有新增的用户账户,如果有,则要禁用此账户
4、CPU及内存是否占用过高
Windows通过任务管理器可以定位到CPU或内存占用过高的进程,Linux可以通过top、ps等命令定位到CPU或内存占用过高的进程。
进程定位到了之后,看下是否可疑,必要时把进程杀掉。
5、服务器上是否安装了Redis,如果安装了则要检查Redis外网是否可以访问,如果外网可以被访问很容易被人提权
6、检查是否存在可疑的定时任务及网络请求
检查服务代码逻辑
如果排除了被人攻击的情况,那就要检查一下你的服务程序代码是否存在问题了,比如:
1、是否有死循环
2、请求外部资源时是否没加超时限制
3、数据库是否存在慢查询等
服务器上的服务迁移
如果仅仅是因为当前服务器性能跟不上,那除了升级单机配置外还可以考虑将本服务器上的其它服务迁移到另外的服务器,以Web服务为例,我们的建议是:
站点及文件资源放在一台服务器上,用作Web服务器
数据库单独放一台服务器上
必要的CDN加速
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流~我是科技领域创作者,十年互联网从业经验,欢迎在线咨询1、减少内存分配和释放
服务器在运行过程中,需要大量的内存容量来支撑,内存的分配和释放就尤为关键。用户在使用服务器的时候,可以通过改善数据结构以及算法制度来减少中间临时变量的内存分配和数据复制时间。
另外,可以选择使用共享内存模式来降低内存的分配和释放问题。共享内存在多处理器系统中,可以被不同的中央处理器访问,也可以有不同的进程共享,是一种非常快的进程通信方式。
2、使用持久链接
持久链接也被称为场链接,是通过TCP通信的一种方式。在一次TCP链接中持续发送多份数据而不断开连接。
从性能角度上来讲,建立TCP链接次数越少,越有利于性能的提升,尤其对于密集型或者网页等数据处理上来说有明显的加速作用。
3、改进I/O模型
I/O操作根据设备形式有不同的类型,例如我们常见的内存I/O,网络I/O,磁盘I/O。针对网络I/O和磁盘I/O, 它们的速度要慢很多,可以选择采用高带宽网络适配器可以提高网络I/O速度。
以上的I/O操作时需要CPU来调度的,这就需要CPU空出时间来等待I/O操作。如果在CPU调度上使用时间较少,也就能节约出CPU的处理时间,从这一点上来说也是提升高服务器并发处理能力的方式。
4、改进服务器并发数策略
服务器高并发策略的调整,是为了让I/O操作和CPU计算尽量重叠进行。一方面使CPU在I/O操作时等待时间内不要空闲,另一方面也是为了最大限度缩短等待时间。感兴趣的话点击此处,了解一下
0条评论