首页 » SEO优化 » tomcat7php技巧_让你面前一亮的3 Tomcat 机能调优 值得收藏

tomcat7php技巧_让你面前一亮的3 Tomcat 机能调优 值得收藏

访客 2024-11-04 0

扫一扫用手机浏览

文章目录 [+]

降落相应韶光 : 提高系统吞吐量(QPS) : QPS (每秒要求量) T(事务) PS (每秒处理事务的数量) 提高做事的可用性:

性能优化的原则

详细情形详细剖析集腋成裘

性能剖析工具

tomcat7php技巧_让你面前一亮的3 Tomcat 机能调优 值得收藏

JConsole jvm性能监控平台: 紧张监控 内存和CPU的情形JMeter 分布式性能测试工具: 相应韶光、吞吐量、缺点率

性能优化测试指标

tomcat7php技巧_让你面前一亮的3 Tomcat 机能调优 值得收藏
(图片来自网络侵删)

精确率、CPU霸占率、QPS、JVM3.1 Tomcat 性能测试

我们利用JMeter来进行测试:

3.2 Tomcat 性能优化3.2.1Tomcat配置调优1.禁用AJP连接

默认状态下,Tomcat会启动AJP做事,占用8009端口。
AJP是什么?有什么浸染呢?AJP(Apache JServer Protocol) 是为Tomcat与HTTP做事器之间通信而定制的协议,能供应较高的通信速率和效率。
Tomcat虽然是一个javaWeb做事器,可以对静态资源进行解析,但它最紧张的浸染是供应Servlet 和 Jsp容器,对静态资源的解析肯定不如一些专业的Http做事器 如:apache、nginx 。
以是常日生产环境会把Tomcat和其他http做事器搭配利用, 所有要求都访问http做事器,如果访问的资源是Servlet或Jsp则http做事器将要求交由Tomcat处理,如果静态资源 http做事器直接处理, ajp便是apache做事器和tomcat做事器通信的紧张协议,nginx 和 浏览器是不支持这个协议的,以是如果你不该用Tomcat和Apache做事器整合的话,这个AJP协议做事是没必要开启的。

ajp便是下面这行代码来配置,紧张注释它就可以禁用AJP

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />2.Connector 连接器的选择

Tomcat 连接器的三种办法: bio、nio 和 apr,三种办法性能差别很大,apr 的性能最优, bio 的性能最差。
而 Tomcat 7 利用的 Connector 默认就启用的 Apr 协议,但须要系统安装 Apr 库,否则就会利用 bio 办法。

BIO:

一个线程处理一个要求。
缺陷:并发量高时,线程数较多,摧残浪费蹂躏资源。

Tomcat7或以下,在Linux系统中默认利用这种办法。

NIO:

利用Java的异步IO处理,可以通过少量的线程处理大量的要求。

Tomcat8在Linux系统中默认利用这种办法。

Tomcat7必须修正Connector配置来启动:

APR:

即Apache Portable Runtime,从操作系统层面办理io壅塞问题。

Tomcat7或Tomcat8在Win7或以上的系统中启动默认利用这种办法。

Linux如果安装了apr和native,Tomcat直接启动就支持apr。

tomcat8 供应了nio2,效率要比nio快些,以是如果是tomcat8之前的版本推举利用nio ,如果是tomcat8及之后的版本利用nio2

APR( Apache Portable Runtime) 供应卓越的伸缩性,更强的性能以及跟原生做事器技能更好的集成。

如果利用APR要担保1.配置文件中引入了APR的监听 2.做事器上安装APR的干系软件

linux配置APR:

安装依赖

yum install apr-devel yum install openssl-devel yum install gcc yum install make

安装APR包

进入 apache-tomcat-8.5.39/bin 实行命令 tar -xzvf tomcat-native.tar.gz

输入命令 cd tomcat-native-1.2.21-src/native/

进入到native文件夹下

实行命令 ./configure && make && make install

安装后会涌现这个界面,表示安装成功,并给出了安装后的目录位置

通过上图我们可以看到 我们还须要配置两个环境变量

输入命令使环境变量生效 source /etc/profile

修正server.xml 配置

启动tomcat查看日志

进入到 /logs目录 实行命令 tail -f -n 200 catalina.out

<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443"/>

Connector参数阐明

URIEncoding:指定 Tomcat 容器的 URL 编码格式,措辞编码格式这块倒不如其它 WEB 做事器软件配置方便,须要分别指定。

口试可以说:设置连接超时时间,当后台涌现问题,连接可以及时断掉

connnectionTimeout: 网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。
常日可设置为 30000 毫秒(30秒),可根据检测实际情形,适当修正。

enableLookups: 是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。

disableUploadTimeout:上传时是否利用超机遇制。

connectionUploadTimeout:上传超时时间,毕竟文件上传可能须要花费更多的韶光,这个根据你自己的业务须要自己调,以使Servlet有较长的韶光来完成它的实行,须要与上一个参数一起合营利用才会生效。

acceptCount:指定当所有可以利用的处理要求的线程数都被利用时,可传入连接要求的最大行列步队长度,超过这个数的要求将不予处理,默认为100个。

keepAliveTimeout:长连接最大保持韶光(毫秒),表示不才次要求过来之前,Tomcat 保持该连接多久,默认是利用 connectionTimeout 韶光,-1 为不限定超时。

maxKeepAliveRequests:表示在做事器关闭之前,该连接最大支持的要求数。
超过该要求数的连接也将被关闭,1表示禁用,-1表示不限定个数,默认100个,一样平常设置在100~200之间。

口试可以说压缩:连接器参数开启相应数据压缩

compression:是否对相应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示许可压缩(文本将被压缩)、force:表示所有情形下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一样平常可以减小1/3旁边,节省带宽。
compressionMinSize:表示压缩相应的最小值,只有当相应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值便是2048KB。
compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。

noCompressionUserAgents="gozilla, traviata": 对付以下的浏览器,不启用压缩。

参考配置

连接器的详细参考配置: <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" connectionTimeout="30000" enableLookups="false" disableUploadTimeout="false" connectionUploadTimeout="150000" acceptCount="300" keepAliveTimeout="120000" maxKeepAliveRequests="1" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" redirectPort="8443" />3.Executor线程池调度

默认配置下,Tomcat 会为每个连接器创建一个绑定的线程池(最大线程数 200),做事启动时,默认创建了 5 个空闲线程随时等待用户要求

默认情形:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/>

修正连接池:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="100" maxSpareThreads="50" maxIdleTime="60000"/>机器比较好情形:最小线程数不超过<100,最大线程数不超过<500

然后,修正<Connector …>节点,增加 executor 属性,调度为

<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443"/>

Executor参数阐明:

maxThreads,最大并发数,默认设置 200,一样平常建议在 500 ~ 800,根据硬件举动步伐和业务来判断minSpareThreads,Tomcat 初始化时创建的线程数,默认设置 25prestartminSpareThreads,在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不即是 true,minSpareThreads 的值就没啥效果了maxQueueSize,最大的等待行列步队数,超过则谢绝要求

3.2.2 JVM参数调优

Tomcat是一款Java运用,那么JVM的配置便与其运行性能密切干系,而JVM优化的重点则集中在内存分配和GC策略的调度上,由于内存会直接影响做事的运行效率和吞吐量,JVM垃圾回收机制则会不同程度地导致程序运行中断。
可以根据运用程序的特点,选择不同的垃圾回收策略,调度JVM垃圾回收策略,可以极大减少垃圾回收次数,提升垃圾回收效率,改进程序运行性能。

1) JVM内存参数

参数

参数浸染

优化建议

-server

启动Server,以做事端模式运行

做事端模式建议开启

-Xms

最小堆内存

建议与-Xmx设置相同

-Xmx

最大堆内存

建议设置为可用内存的80%

-XX:MetaspaceSize

元空间初始值

-XX:MaxMetaspaceSize

元空间最大内存

默认无限

-XX:NewSize

新生代初始值

-XX:MaxNewSize

新生代最大内存

默认16M

-XX:NewRatio

年轻代和老年代大小比值,取值为整数,默认为2

不建议修正

-XX:SurvivorRatio

Eden区与Survivor幸存者区大小的比值,取值为整数,默认为8

不建议修正

-Xms:Java虚拟机初始化时堆的最小内存,一样平常与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而花费性能;

可以利用JDK自带的工具进行验证,这些工具都在/bin目录下:1)jps:用来显示本地的java进程,以及进程号,进程启动的路径等。
2)jmap:不雅观察运行中的JVM 物理内存的占用情形,包括Heap size , Perm size等。
进入命令行模式后,进入JAVA_HOME/bin目录下,然后输入jps命令:

free -m 命令查看当前做事器的可用内存JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=8"2) GC策略

JVM垃圾回收性能有以下两个紧张的指标:

吞吐量:事情韶光(打消GC韶光)占总韶光的百分比, 事情韶光并不仅是程序运行的韶光,还包含内存分配韶光。
停息韶光:测试韶光段内,由垃圾回收导致的运用程序停滞相应次数/韶光。

不同的运用程序, 对付垃圾回收会有不同的需求。
JVM 会根据运行的平台、做事器资源配置情形选择得当的垃圾网络器、堆内存大小及运行时编译器。
如无法知足需求, 参考以下准则:

A. 程序数据量较小,选择串行网络器。

B. 运用运行在单核处理器上且没有停息韶光哀求, 可交由JVM自行选择或选择串行网络器。

C. 如果考虑运用程序的峰值性能, 没有停息韶光哀求, 可以选择并行网络器。

D. 如果运用程序的相应韶光比整体吞吐量更主要, 可以选择并发网络器。

查看Tomcat中的默认的垃圾网络器:

1). 在tomcat/bin/catalina.sh的配置中, 加入如下配置

JAVA_OPTS=" -Djava.rmi.server.hostname=192.168.18.129 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.rmi.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

2). 打开 jconsole , 查看远程的tomcat的概要信息

连接远程tomcat

GC参数:

参数

描述

-XX:+UseSerialGC

启用串行网络器

-XX:+UseParallelGC

启用并行垃圾网络器,配置了该选项,那么 -XX:+UseParallelOldGC默认启用

-XX:+UseParallelOldGC

FullGC 采取并行网络,默认禁用。
如果设置了 -XX:+UseParallelGC则自动启用

-XX:+UseParNewGC

年轻代采取并行网络器,如果设置了 -XX:+UseConcMarkSweepGC选项,自动启用

-XX:+ParallelGCThreads

年轻代及老年代垃圾回收利用的线程数。
默认值依赖于JVM利用的CPU个数

-XX:+UseConcMarkSweepGC

并发垃圾网络器 对付老年代,启用CMS垃圾网络器。
当并行网络器无法知足运用的延迟需求是,推举利用CMS或G1网络器。
启用该选项后, -XX:+UseParNewGC 自动启用。

-XX:+UseG1GC

启用G1网络器。
G1是做事器类型的网络器, 用于多核、大内存的机器。
它在保持高吞吐量的情形下,高概率知足GC停息韶光的目标。

我们也可以在测试的时候,将JVM参数调度之后,将GC的信息打印出来,便于为我们进行参数调度供应依据,详细参数如下:

选项

描述

-XX:+PrintGC

打印每次GC的信息

-XX:+PrintGCApplicationConcurrentTime

打印末了一次停息之后所经由的韶光, 即相应并发实行的韶光

-XX:+PrintGCApplicationStoppedTime

打印GC时运用停息韶光

-XX:+PrintGCDateStamps

打印每次GC的日期戳

-XX:+PrintGCDetails

打印每次GC的详细信息

-XX:+PrintGCTaskTimeStamps

打印每个GC事情线程任务的韶光戳

-XX:+PrintGCTimeStamps

打印每次GC的韶光戳

在bin/catalina.sh的脚本中 , 追加如下配置 :

JAVA_OPTS="-XX:+UseConcMarkSweepGC -XX:+PrintGCDetails"

64位系统 centos 6.4 内存8G做事器 -server -Xms6000M -Xmx6000M -Xmn500M -XX:MetaspaceSize=500M -XX:MaxMetaspaceSize=500M -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0-Xnoclassgc-XX:+DisableExplicitGC-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:CMSInitiatingOccupancyFraction=80 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log3.2.3 Tomcat架构调优

前面我们已经通过系统、jvm、和tomcat自身大大提升的tomcat的性能,但tomcat的性能是有极限的,Tomcat理论支持500旁边并发,以是接下来我们会聊聊在如何合理利用tomcat上,实际上也便是架构的 层面聊聊如果优化。
这里面我们紧张谈论两个优化思路:动静分离、Tomcat集群

就须要搭建Tomcat的集群,而目前比较流程的做法便是通过Nginx来实现Tomcat集群的负载均衡。

动静分离:

Tomcat紧张处理servlet、jsp占上风,项目中静态资源(图片、视频、.CSS、.html、.js)访问,耗费要求连接,把静态资源放在Nginx做事器中,静态要求不经由Tomcat,不占并发数。

Nginx是一款自由的、开源的、高性能的HTTP做事器和反向代理做事器;同时也是一个IMAP、POP3、SMTP代理做事器;Nginx可以作为一个HTTP做事器进行网站的发布处理,其余Nginx可以作为反向代理进行负载均衡的实现。
优点:1、可以高并发连接官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数。
2、内存花费少Nginx+PHP(FastCGI)做事器,在3万并发连接下,开启10个Nginx进程花费150MB内存,15MB10=150MB,开启的64个PHP-CGI进程花费1280内存,20MB64=1280MB,加上系统自身花费的内存,统共花费不到2GB的内存。
3、本钱低廉购买F5BIG-IP、NetScaler等硬件负载均衡交流机,须要十多万到几十万公民币,而Nginx为开源软件,采取的是2-clause BSD-like协议,可以免费试用,并且可用于商业用场。
4、配置文件非常大略网络和程序一样普通易懂,纵然,非专用系统管理员也能看懂。
5、内置的康健检讨功能如果NginxProxy后真个某台Web做事器宕机了,不会影响前真个访问。
6、节省带宽支持GZIP压缩,可以添加浏览器本地缓存的Header头。
7、稳定性高用于反向代理,宕机的概率微乎其微。
8、支持热支配Nginx支持热支配,它的自动特殊随意马虎,并且,险些可以7天24小时不间断的运行,纵然,运行数个月也不须要重新启动,还能够在不间断做事的情形下,对软件版本进行升级。

Nginx反向代理配置:

Tomcat集群:

大佬参考地址:https://www.cnblogs.com/liaokailin/p/3968891.html

修正Tomcat默认端口号

tomcat默认的端口号(缺省端口),怎么修正

tomcat默认的端口是8080

修正Server.xml中 Connector的port属性即可,

如果同一个tomcat要启动多个tomcat ,还须要修正Server里面的port端口 以及Connector AJP协议的port端口

<Server port="8006" shutdown="SHUTDOWN"><Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> tomcat中支配项目的办法

支配的三种方案:

1.直接将web项目 或 war包 拷贝至webapps目录下即可:

2.在配置文件Server.xml中找到标签,在里面 加高下面一句:

<Context docBase="项目的路径" path="虚拟目录" />

3.conf/Catalina/localhost 创建 xxx.xml文件,在文件中指定项目路径,该项目的访问路径 即文件的名字

<Context docBase="项目的路径" />

PS:ROOT文件夹内是根目录下的项目,访问该项目不须要加虚拟目录

tomcat中运行的生产项目,涌现问题如何排查?

涌现问题首先去tomcat的logs目录下,查看日志文件中有没有什么缺点信息。

catalina.201X-XX-XX.log记录启动时日志信息

localhost.201X-XX-XX.log记录各个webapp下项目的日志信息

tail -f fileName #会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

如:日志中创造

java.lang.StackOverflowError非常,这个是栈内存溢出

可能在哪些地方发生内存泄露了,如果通过非常能够找到溢出的发生地,则优化对应代码。

如果没有创造,则可以通过 JvisualVM 等工具监控Tomcat的运行情形

学习更多JAVA知识与技巧,关注与私信博主(学习)免费学习领取JAVA 课件,源码,安装包,还有最新

大厂口试资料等等等

标签:

相关文章

php后台for技巧_另类办法实现PHP后台运行

问题开拓中常常会碰着这种情形:当用户触发某个要求后,须要PHP做一些处理,但是不须要用户等待处理完成,也便是要求须要快速相应并结束...

SEO优化 2024-12-11 阅读0 评论0