优秀的编程知识分享平台

网站首页 > 技术文章 正文

互联网WEB容器性能优化(web应用性能优化思路)

nanyue 2024-09-23 10:36:38 技术文章 5 ℃

背景与描述

描述

本文的目的在于优化Web Application容器的性能,提高运行效率,访问速度。

术语解释

JVM:Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的

适用范围

开发、测试、实施

参数配置说明

Tomcat有安装版的和免安装版两种,推荐选用安装版。

安装版Tomcat配置

安装Tomcat

背景描述

当一台服务器部署多个Tomcat时,必须保证不同的Tomcat之间至少如下三个端口互不相同:

  • Web访问端口不同,默认为8080端口。
  • Shutdown端口不同,默认为8005端口。
  • AJP启动端口不同,默认为8009端口。

查看端口是否被占用的命令为:netstat -an|grep端口号。

操作步骤

  • 步骤1:在Windows客户端,获取Tomcat安装文件“apache-tomcat-8.0.28.exe”。
  • 步骤2:解压“apache-tomcat-8.0.28.exe”文件。

修改Tomcat配置文件

  • 步骤1:进入“apache-tomcat-8.0.28/conf”目录。
  • 步骤2:编辑“server.xml”文件,详细修改内容如下:

将标红部分的内容修改为实际规划的端口号,并增加“URIEncoding="UTF-8"”。

配置SHUTDOWN端口号
<Server port="8005" shutdown="SHUTDOWN">
配置Web访问端口号
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="30000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
配置AJP启动端口号
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

  • 步骤3:保存并退出。

修改Tomcat内存

背景信息描述

修改Tomcat内存,是为了防止内存不足的问题出现。

服务器4G内存推荐配置

下面是使用服务形式启动tomcat7.0的内存配置方法:

  • 步骤1:C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin下打开tomcat7w.exe,切换到java选项卡,如图1.1.3.2.1
  • 步骤2:在Java Options选项的最后面设置(这个和修改注册表的效果一样),如图2:

Inital memory Pool 为 512

Maximum memory Pool 为 1024

-XX:PermSize=128m -XX:MaxPermSize=256m(此项谨慎使用,有可能导致tomcat无法启动)

-Xms1024m

-Xmx1024m

点击”应用”,然后点击”确定”,重启tomcat生效。

服务器8G内存推荐配置

下面是使用服务形式启动tomcat7.0的内存配置方法:

C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin下打开tomcat7w.exe,切换到java选项卡,如图1

  • 步骤1:在Java Options选项的最后面设置(这个和修改注册表的效果一样)

Inital memory Pool 为 1024

Maximum memory Pool 为 2048

-XX:PermSize=128m -XX:MaxPermSize=256m

Inital memory Pool 为 1024

Maximum memory Pool 为 2048

-XX:PermSize=256m -XX:MaxPermSize=1024m

-Xms1024m -Xmx1024m

点击”应用”,然后点击”确定”,重启tomcat生效。

免安装版Tomcat配置

安装Tomcat

背景描述

当一台服务器部署多个Tomcat时,必须保证不同的Tomcat之间至少如下三个端口互不相同:

Web访问端口不同,默认为8080端口。

Shutdown端口不同,默认为8005端口。

AJP启动端口不同,默认为8009端口。

查看端口是否被占用的命令为:netstat -an|grep端口号。

Web访问端口不同,默认为8888端口。

Shutdown端口不同,默认为8005端口。

AJP启动端口不同,默认为8009端口。

查看端口是否被占用的命令为:netstat -an|grep端口号。

操作步骤

  • 步骤1:在Windows客户端,获取Tomcat安装文件“apache-tomcat-8.0.28.rar”。
  • 步骤2:解压“apache-tomcat-8.0.28.rar”文件。

修改Tomcat端口号

  • 步骤1:进入“apache-tomcat-8.0.28/conf”目录。
  • 步骤2:编辑“server.xml”文件。

将标红部分的内容修改为实际规划的端口号,并增加“URIEncoding="UTF-8"”。

配置SHUTDOWN端口号
<Server port="8005" shutdown="SHUTDOWN">
配置Web访问端口号
<Connector port="8888" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="30000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
配置AJP启动端口号
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

  • 步骤3:保存并退出。

修改Tomcat内存

背景描述

修改Tomcat内存,是为了防止内存不足的问题出现。

服务器4G内存推荐配置

  • 步骤1:进入“apache-tomcat-8.0.28/bin”目录。
  • 步骤2:编辑“catalina.bat”文件。

根据实际情况设置Tomcat内存大小,添加如下内容:

在echo Using CATALINA_BASE: "%CATALINA_BASE%"的上面一行加下面代码:

set JAVA_OPTS=-Xms512m –Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m ;各参数含义说明如下:

  • Xms:初始值
  • Xmx:最大值
  • Xmn:最小值
  • XX:PermSize:设定内存的永久保存区域
  • XX:MaxPermSize:设定最大内存的永久保存区域
  • 步骤3:保存并退出。

服务器8G内存推荐配置

  • 步骤1:进入“apache-tomcat-8.0.28/bin”目录。
  • 步骤2:编辑“catalina.bat”文件。

根据实际情况设置Tomcat内存大小,添加如下内容:

在echo Using CATALINA_BASE: "%CATALINA_BASE%"的上面一行加下面代码:

set JAVA_OPTS=-Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m ;各参数含义说明如下:

  • Xms:初始值
  • Xmx:最大值
  • Xmn:最小值
  • XX:PermSize:设定内存的永久保存区域
  • XX:MaxPermSize:设定最大内存的永久保存区域

步骤3:保存并退出。

Tomcat性能优化

因为前面几个章节已经提到了关于JVM的优化,因此,这里只讲TOMCAT的线程优化、IO优化、缓存压缩技术。

  • 详细配置信息

<Connector URIEncoding="UTF-8" acceptCount="600" connectionTimeout="20000" enableLookups="false" executor="tomcatThreadPool" maxProcessors="1200" minProcessors="300" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"

compression="on" compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,image/gif, image/jpg,image/png" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" useSendfile="false" />

<Executor maxIdleTime="300000" maxSpareThreads="1200" maxThreads="1200" minSpareThreads="200" name="tomcatThreadPool" namePrefix="catalina-exec-"/>

  • 线程优化
  • maxThreads="X" 表示最多同时处理X个连接;
  • minSpareThreads="X" 初始化X个连接;
  • maxSpareThreads="X" 表示如果最多可以有X个线程,一旦超过X个,则会关闭不再需要的线程;
  • acceptCount="X" 当同时连接的人数达到maxThreads时,还可以排队,队列大小为X.超过X就不处理。
  • IO优化

对于IO的优化,主要指的是Tomcat连接器上配置的协议protocol,Tomcat的配置文件server.xml文件默认的连接器Connector的协议protocol=”HTTP/1.1”,也就是采用的同步阻塞方式BIO。下面详细讲述下各个IO的特点:

  • 同步阻塞IO(JAVA BIO) 同步并阻塞,服务器实现模式为一个连接一个线程(one connection one thread 想想都觉得恐怖,线程可是非常宝贵的资源),当然可以通过线程池机制改善。
  • JAVA NIO:又分为同步非阻塞IO,异步阻塞IO 与BIO最大的区别one request one thread.可以复用同一个线程处理多个connection(多路复用)。
  • 异步非阻塞IO(Java NIO2又叫AIO) 主要与NIO的区别主要是操作系统的底层区别.可以做个比喻:比作快递,NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;AIO就是快递员送货上门了(不用关注快递进度)。

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

当前,我们采用的是NIO,它可以多路复用,且异步处理。生产服务器亦采用该方式。protocol="org.apache.coyote.http11.Http11NioProtocol"

  • 压缩缓存技术

其中,以下几个属性是开启GZIP压缩技术(需浏览器支持,当前的谷歌、火狐浏览器均支持)

要使用gzip压缩功能,可以在Connector实例中加上如下属性:

  • compression="on" 打开压缩功能;
  • compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB;
  • noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩&<60;
  • compressableMimeType=" text/html,text/xml,application/javascript,text/css,text/plain,image/gif, image/jpg,image/png" 压缩类型。

Eclipse中JVM配置

开发人员在开发过程中经常需要调试程序,通过配置tomcat服务,添加需要试的Web Application,在调试过程中经常会遇到内存溢出的异常问题,这里将介绍通过配置JVM参数,来解决该问题。如图所示:



配置检测

从2.1到2.3分别介绍了JVM的配置说明,但是上面的配置是否有效呢?大家可通过jdk自带的工具jvisualvm.exe来检测你的设置是否生效。

jvisualvm.exe可执行文件的路径在你的电脑的jdk安装目录下(如:C:\Program Files\Java\jdk1.7.0_45\bin)。那么如何检测呢?点击运行jvisualvm.exe,如图3所示,图3中显示的参数设置是通过见图2的设置:

图 3

图4中展示了当前正在运行的Tomcat服务的JVM参数配置

图 4

Tags:

最近发表
标签列表