来源 | urlify.cn/bQVNRv
常用配置详解1 目录构造 /bin:脚本文件目录。 /common/lib:存放所有web项目都可以访问的公共jar包(利用Common类加载器加载)。 /conf:存放配置文件,最主要的是server.xml。 /logs:存放日志文件。 /server/webapps:来管理Tomcat-web做事用的。仅对TOMCAT可见,对所有的WEB APP都不可见(利用Catalina类加载器加载)。 /shared/lib:仅对所有WEB APP可见,对TOMCAT不可见(利用Shared类加载器加载)。 /temp:Tomcat运行时候存放临时文件用的。 /webapps:web运用发布目录。 /work:Tomcat把各种由jsp天生的servlet文件放在这个目录下。删除后,启动时会自动创建。 2 配置文件 server.xml:紧张的配置文件。 web.xml:缺省的web app配置,WEB-INF/web.xml会覆盖该配置。 context.xml:不清楚跟server.xml里面的context是否有关系。 server.xml配置 server标签 port:指定一个端口,这个端口卖力监听关闭tomcat的要求。 shutdown:指定向端口发送的命令字符串。 service标签 name:指定service的名字。 Connector(表示客户端和service之间的连接)标签
port:指定做事器端要创建的端口号,并在这个端口监听来自客户真个要求。 minProcessors:做事器启动时创建的处理要求的线程数。 maxProcessors:最大可以创建的处理要求的线程数。 enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户真个实际主机名,若为false则不进行DNS查询,而是返回其ip地址。 redirectPort:指定做事器正在处理http要求时收到了一个SSL传输要求后重定向的端口号。 acceptCount:指定当所有可以利用的处理要求的线程数都被利用时,可以放到处理行列步队中的要求数,超过这个数的要求将不予处理。 connectionTimeout:指定超时的韶光数(以毫秒为单位)。 Engine(表示指定service中的要求处理机,吸收和处理来自Connector的要求)标签 defaultHost:指定缺省的处理要求的主机名,它至少与个中的一个host元素的name属性值是一样的。 Context(表示一个web运用程序,常日为WAR文件,关于WAR的详细信息见servlet规范)标签 docBase:该web运用的文档基准目录(Document Base,也称为Context Root),或者是WAR文件的路径。可以利用绝对路径,也可以利用相对付context所属的Host的appBase路径。 path:表示此web运用程序的url的前缀,这样要求的url为http://localhost:8080/path/。 reloadable:这个属性非常主要,如果为true,则tomcat会自动检测运用程序的/WEB-INF/lib和/WEB-INF/classes目录的变革,自动装载新的运用程序,我们可以在不重起tomcat的情形下改变运用程序。 useNaming:如果希望Catalina为该web运用使能一个JNDI InitialContext工具,设为true。该InitialialContext符合J2EE平台的约定,缺省值为true。 workDir:Context供应的临时目录的路径,用于servlet的临时读/写。利用javax.servlet.context.tempdir属性,servlet可以访问该目录。如果没有指定,利用$CATALINA_HOME/work下一个得当的目录。 swallowOutput:如果该值为true,System.out和System.err的输出被重定向到web运用的logger。如果没有指定,缺省值为false debug:与这个Engine关联的Logger记录的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为0。 host(表示一个虚拟主机)标签 name:指定主机名。 appBase:运用程序基本目录,即存放运用程序的目录。 unpackWARs:如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行运用程序。 Logger(表示日志,调试和缺点信息)标签 className:指定logger利用的类名,此类必须实现org.apache.catalina.Logger接口。 prefix:指定log文件的前缀。 suffix:指定log文件的后缀。 timestamp:如果为true,则log文件名中要加入韶光,如下例:localhost_log.2001-10-04.txt。 Realm(表示存放用户名,密码及role的数据库)标签 className:指定Realm利用的类名,此类必须实现org.apache.catalina.Realm接口。 Valve(功能与Logger差不多,其prefix和suffix属性阐明和Logger 中的一样)标签 className:指定Valve利用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录运用程序的访问信息。 directory:指定log文件存放的位置。 pattern:有两个值,common办法记录远程主机名或ip地址,用户名,日期,第一行要求的字符串,HTTP相应代码,发送的字节数。combined办法比common办法记录的值更多。 3 配置虚拟目录 1)直接支配到webapps目录下面访问。 2)修正conf/server.xml文件。在<Host name="localhost" appBase="webapps" unpackWARs="true" xmlValidation="false" xmlNamespaceAware="false"></host>中加入<Context path="/test" docBase="webdemo" debug="0" reloadable="true" />。docBase目录默认利用appBase="webapps"这个目录。也可以是绝对路径。配置主目录,可以将path=""。 3)当项目没有放在webapps目录下时,可以在conf/Catalina/localhost新建一个XXX.XML文件。里面加入<Context docBase="E:webdemo" debug="0" reloadable="true" />。 把稳:这里的path属性不须要设置,设置了也不会起浸染的。 也可以利用该方法建立主目录指向另一个目录,例如:<Context docBase="E:webdemo" debug="0" reloadable="true" />命名为ROOT.xml,这样默认访问的主目录就被修正过了。 4 配置连接数 maxThreads:Tomcat利用线程来处理吸收的每个要求。这个值表示Tomcat可创建的最大的线程数。 acceptCount:指定当所有可以利用的处理要求的线程数都被利用时,可以放到处理行列步队中的要求数,超过这个数的要求将不予处理。 minSpareThreads:Tomcat初始化时创建的线程数。 maxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再须要的socket线程。 enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。默认可设置为20000毫秒。 web server许可的最大连接数还受制于操作系统的内核参数设置,常日Windows是2000个旁边,Linux是1000个旁边。 5 配置内存大小 修正bin/catalina.bat中的set CATALINA_OPTS=-Xms64m -Xmx128m。 Xms指最小内存,Xmx指最大内存。 6 安全配置 1)将<Server port="8005" shutdown="SHUTDOWN">SHUTDOWN修正为其他一些字符串。否则就随意马虎被人给停滞掉了。 2)对应tomcat3.1中,屏蔽目录文件自动列出 修正conf/web.xml中的
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>true</param-value><!-- 改成false --> </init-param> <load-on-startup>1</load-on-startup> </servlet>
3)访问日志设置 在server.xml中加入
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
这样访问日志会记录到Logs中。 4)修正用户名、密码 conf/tomcat-users.xml 5)屏蔽后台管理入口 方法一:从掌握用户和权限动手。废掉要管理权限的用户就可以了。 方法二:将conf/Catalina/localhost/manager.xml改名。 6)配置403,404,500缺点页面 默认情形下,报出HTTP缺点的时候会暴露tomcat版本号。如果不想暴露的话,就须要重新定义缺点跳转页面。
<error-page> <error-code>401</error-code> <location>/401.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/500.jsp</location> </error-page>
把稳:在测试的时候碰到一个奇怪的征象,平时项目里面的时候测试正常的。可是本日在tomcat目录里面新建一个测试目录测试并不能跳转到指定缺点页面。暂时不知道为什么。 7 配置Log4j日志记录 项目中抛出的非常,抛到tomcat中的非常会被tomcat记录下来,存放至logs/localhost.yyyy-MM-dd.log文件中。 平时我们在项目中利用的log4j记录日志跟tomcat是没有任何关系的,是独立的一个程序,记录的文件是自定义的。 我们可以在tomcat中定义一个log4j的公共日志处理办法,这样在项目中就不须要在定义log4j的配置了。 1)将log4j-1.2.15.jar加入到commonlib目录。 2)将log4j.properties加入到commonclasses目录。 内容例如: # Output pattern : date [thread] priority category - message log4j.rootLogger=DEUBG, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.logfile.File=${catalina.home}/logs/tomcat_app.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n #3rd party library level log4j.logger.org.hibernate.cache=ERROR 把稳:我们项目中利用e.printStackTrace();输出的非常会在掌握台输出来,但是,不会记录到tomcat日志中。 而且,也不会记录到log4j的日志中。要想记录到log4j日志中,必须利用log4j输出来。 以是,实际上web项目中进行非常处理该当将e.printStackTrace();写写法多改成log4j的形式才对!
但是,实际项目中很多项目多偷
tomcat优化配置参数
优化内存,紧张是在bin/catalina.bat/sh 配置文件中进行。linux上,在catalina.sh中添加:
JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"
个中:
• -server:启用jdk的server版本。• -Xms:虚拟机初始化时的最小堆内存。• -Xmx:虚拟机可利用的最大堆内存。#-Xms与-Xmx设成一样的值,避免JVM由于频繁的GC导致性能大起大落• -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。• -XX:MaxNewSize:新生代占全体堆内存的最大值。• -XX:MaxPermSize:Perm(俗称方法区)占全体堆内存的最大值,也称内存最大永久保留区域。
1)缺点提示:java.lang.OutOfMemoryError:Java heap space
Tomcat默认可以利用的内存为128MB,在较大型的运用项目中,这点内存是不足的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Outof Memory(系统内存不敷)的非常,从而导致客户端显示500缺点,一样平常调度Tomcat的-Xms和-Xmx即可办理问题,常日将-Xms和-Xmx设置成一样,堆的最大值设置为物理可用内存的最大值的80%。
set JAVA_OPTS=-Xms512m-Xmx512m
2)缺点提示:java.lang.OutOfMemoryError: PermGenspace
PermGenspace的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存紧张是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGenspace进行清理,以是如果你的运用中有很CLASS的话,就很可能涌现PermGen space缺点,这种缺点常见在web做事器对JSP进行precompile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此缺点信息了。办理方法:
setJAVA_OPTS=-XX:PermSize=128M
3)在利用-Xms和-Xmx调度tomcat的堆大小时,还须要考虑垃圾回收机制。如果系统花费很多的韶光网络垃圾,请减小堆大小。一次完备的垃圾网络该当不超过3-5 秒。如果垃圾网络成为瓶颈,那么须要指定代的大小,检讨垃圾网络的详细输出,研究垃圾网络参数对性能的影响。一样平常说来,你该当利用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,由于分配可以并行进行,而垃圾网络不是并行的。
2、连接数优化:
#优化连接数,紧张是在conf/server.xml配置文件中进行修正。
2.1、优化线程数
找到Connector port="8080" protocol="HTTP/1.1",增加maxThreads和acceptCount属性(使acceptCount大于即是maxThreads),如下:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />
个中:
• maxThreads:tomcat可用于要求处理的最大线程数,默认是200• minSpareThreads:tomcat初始线程数,即最小空闲线程数• maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭• acceptCount:当所有可以利用的处理要求的线程数都被利用时,可以放到处理行列步队中的要求数,超过这个数的要求将不予处理.默认100
2.2、利用线程池
在server.xml中增加executor节点,然后配置connector的executor属性,如下:
<Executor name="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/><Connector port="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>
个中:
• namePrefix:线程池中线程的命名前缀• maxThreads:线程池的最大线程数• minSpareThreads:线程池的最小空闲线程数• maxIdleTime:超过最小空闲线程数时,多的线程会等待这个韶光长度,然后关闭• threadPriority:线程优先级
注:当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too many open files缺点。可利用下面步骤检讨:
• ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号,假设进程ID为10001• lsof -p 10001|wc -l 查看当提高程id为10001的 文件操作数• 利用命令:ulimit -a 查看每个用户许可打开的最大文件数
3、Tomcat Connector三种运行模式(BIO, NIO, APR)
3.1、三种模式比较:
1)BIO:一个线程处理一个要求。缺陷:并发量高时,线程数较多,摧残浪费蹂躏资源。Tomcat7或以下在Linux系统中默认利用这种办法。
2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的要求。Tomcat8在Linux系统中默认利用这种办法。Tomcat7必须修正Connector配置来启动(conf/server.xml配置文件):
<Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443"/>
3)APR(Apache Portable Runtime):从操作系统层面办理io壅塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。
3.2、apr模式
安装apr以及tomcat-native
yum -y install apr apr-devel
进入tomcat/bin目录,比如:
cd /opt/local/tomcat/bin/tar xzfv tomcat-native.tar.gzcd tomcat-native-1.1.32-src/jni/native./configure --with-apr=/usr/bin/apr-1-configmake && make install
#把稳最新版本的tomcat自带tomcat-native.war.gz,不过其版本相对付yum安装的apr过高,configure的时候会报错。
办理:yum remove apr apr-devel –y,卸载yum安装的apr和apr-devel,下载最新版本的apr源码包,编译安装;或者下载低版本的tomcat-native编译安装
安装成功后还须要对tomcat设置环境变量,方法是在catalina.sh文件中增加1行:
CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
#apr下载地址:http://apr.apache.org/download.cgi
#tomcat-native下载地址:http://tomcat.apache.org/download-native.cgi
修正8080端对应的conf/server.xml
protocol="org.apache.coyote.http11.Http11AprProtocol"
<Connector executor="tomcatThreadPool"port="8080"protocol="org.apache.coyote.http11.Http11AprProtocol"connectionTimeout="20000"enableLookups="false"redirectPort="8443"URIEncoding="UTF-8" />
PS:启动往后查看日志 显示如下表示开启 apr 模式
Sep 19, 2016 3:46:21 PM org.apache.coyote.AbstractProtocol startINFO: Starting ProtocolHandler ["http-apr-8081"]
tomcat常见面试题
一、Tomcat的缺省是多少,怎么修正
Tomcat的缺省端口号是8080.修正Tomcat端口号:
1.找到Tomcat目录下的conf文件夹
2.进入conf文件夹里面找到server.xml文件
3.打开server.xml文件
4.在server.xml文件里面找到下列信息
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ connectionTimeout=”20000″ disableUploadTimeout=”true” />
5.把port=”8080″改成port=”8888″,并且保存
6.启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/
7、tomcat默认采取的BIO模型,在几百并发下性能会有很严重的低落。tomcat自带还有NIO的模型,其余也可以调用APR的库来实现操作系统级别掌握。NIO模型是内置的,调用很方便,只须要将上面配置文件中protocol修正成 org.apache.coyote.http11.Http11NioProtocol,重启即可生效。如下面的参数配置,默认的是HTTP/1.1。
<Connector port=”8080″ protocol=”org.apache.coyote.http11.Http11NioProtocol” connectionTimeout=”20000″ redirectPort=”8443″ maxThreads=”500″ minSpareThreads=”20″ acceptCount=”100″ disableUploadTimeout=”true”
enableLookups=”false” URIEncoding=”UTF-8″ />
二、tomcat 如何优化?
1、优化连接配置.这里以tomcat7的参数配置为例,须要修正conf/server.xml文件,修正连接数,关闭客户端dns查询。
参数阐明:
URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译
maxSpareThreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
minSpareThreads : 最小备用线程数,tomcat启动时的初始化的线程数。
enableLookups : 这个功效和Apache中的HostnameLookups一样,设为关闭。
connectionTimeout : connectionTimeout为网络连接超时时间毫秒数。
maxThreads : maxThreads Tomcat利用线程来处理吸收的每个要求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。
acceptCount : acceptCount是当线程数达到maxThreads后,后续要求会被放入一个等待行列步队,这个acceptCount是这个行列步队的大小,如果这个行列步队也满了,就直接refuse connection
maxProcessors与minProcessors : 在 Java中线程是程序运行时的路径,是在一个程序中与其它掌握线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高师法式,使空闲韶光保持最低,从而接管更多的要求。
常日Windows是1000个旁边,Linux是2000个旁边。
useURIValidationHack:
我们来看一下tomcat中的一段源码:
【security】
if (connector.getUseURIValidationHack()) {
String uri = validate(request.getRequestURI());
if (uri == null) {
res.setStatus(400);
res.setMessage(“Invalid URI”);
throw new IOException(“Invalid URI”);
} else {
req.requestURI().setString(uri);
// Redoing the URI decoding
req.decodedURI().duplicate(req.requestURI());
req.getURLDecoder().convert(req.decodedURI(), true);
可以看到如果把useURIValidationHack设成”false”,可以减少它对一些url的不必要的检讨从而减省开销。
enableLookups=”false” :为了肃清DNS查询对性能的影响我们可以关闭DNS查询,办法是修正server.xml文件中的enableLookups参数值。
disableUploadTimeout :类似于Apache中的keeyalive一样
给Tomcat配置gzip压缩(HTTP压缩)功能
compression=”on” compressionMinSize=”2048″ compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
HTTP 压缩可以大大提高浏览网站的速率,它的事理是,在客户端要求网页后,从做事器端将网页文件压缩,再下载到客户端,由客户真个浏览器卖力解压缩并浏览。相对付普通的浏览过程HTML,CSS,Javascript , Text ,它可以节省40%旁边的流量。更为主要的是,它可以对动态天生的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。
1)compression=”on” 打开压缩功能
2)compressionMinSize=”2048″ 启用压缩的输出内容大小,这里面默认为2KB
3)noCompressionUserAgents=”gozilla, traviata” 对付以下的浏览器,不启用压缩
4)compressableMimeType=”text/html,text/xml” 压缩类型
末了不要忘了把8443端口的地方也加上同样的配置,由于如果我们走https协议的话,我们将会用到8443端口这个段的配置,对吧?{
tomcat设置https端口时,8443和443差异:1. 8443端口在访问时须要加端口号,相称于http的8080,不可通过域名直接访问,须要加上端口号;https://yuming.com:8443。
2. 443端口在访问时不须要加端口号,相称于http的80,可通过域名直接访问;例:https://yuming.com。
问:https利用域名访问网站,而不显示端口号?
答:将端口号设置为443,即可通过域名直接访问网站
}
<!–enable tomcat ssl–>
<Connector port=”8443″ protocol=”HTTP/1.1″ URIEncoding=”UTF-8″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” disableUploadTimeout=”true” connectionTimeout=”20000″ acceptCount=”300″ maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″ useURIValidationHack=”false” compression=”on” compressionMinSize=”2048″ compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
SSLEnabled=”true”scheme=”https” secure=”true”clientAuth=”false” sslProtocol=”TLS”keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”/>
好了,所有的Tomcat优化的地方都加上了。
2、优化JDK
Tomcat默认可以利用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS=”‘$JAVA_OPTS” -Xms[初始化内存大小] -Xmx[可以利用的最大内存]
或
设置环境变量:export JAVA_OPTS=””$JAVA_OPTS” -Xms[初始化内存大小] -Xmx[可以利用的最大内存]”
一样平常说来,你该当利用物理内存的 80% 作为堆大小。如果本机上有Apache做事器,可以先折算Apache须要的内存,然后修正堆大小。建议设置为70%;建议设置[[初始化内存大小]即是[可以利用的最大内存],这样可以减少平凡分配堆而降落性能。
本例利用加入环境变量的办法:
# vi /etc/profile
加入:export JAVA_OPTS=””$JAVA_OPTS” -Xms700 —Xmx700
# source /etc/profile
【参数解释】
-Xms 是指设定程序启动时占用内存大小。一样平常来讲,大点,程序会启动的 快一点,但是也可能会导致机器暂时间变慢。
-Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行须要占 用更多的内存,超出了这个设置值,就会抛出OutOfMemory 非常。
-Xss 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约须要占用多少内存,可能会有多少线程同时运行等。
-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64 。
-XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
三、tomcat 有那几种Connector 运行模式?
tomcat的运行模式有3种.修正他们的运行模式.3种模式的运行是否成功,可以看他的启动掌握台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看个中的做事器状态。
1)bio
默认的模式,性能非常低下,没有经由任何优化处理和支持.
2)nio
利用java的异步io照顾护士技能,no blocking IO技能.
想运行在该模式下,直接修正server.xml里的Connector节点,修正protocol为
<Connector port=”80″ protocol=”org.apache.coyote.http11.Http11NioProtocol” connectionTimeout=”20000″ URIEncoding=”UTF-8″ useBodyEncodingForURI=”true” enableLookups=”false” redirectPort=”8443″ />启动后,就可以生效。
3)apr
安装起来最困难,但是从操作系统级别来办理异步的IO问题,大幅度的提高性能.
必须要安装apr和native,直接启动就支持apr。下面的修正纯属多余,仅供大家扩充知识,但仍旧须要安装apr和native。如nio修正模式,修正protocol为org.apache.coyote.http11.Http11AprProtocol
四、tomcat调优1. JVM参数调优:-Xms<size> 表示JVM初始化堆的大小,-Xmx<size>表示JVM堆的最大值。这两个值的大小一样平常根据须要进行设置。当运用程序须要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致运用做事崩溃。因此一样平常建议堆的最大值设置为可用内存的最大值的80%。在catalina.bat中,设置JAVA_OPTS='-Xms256m -Xmx512m',表示初始化内存为256MB,可以利用的最大内存为512MB。 2. 禁用DNS查询 当web运用程序想要记录客户真个信息时,它也会记录客户真个IP地址或者通过域名做事器查找机器名转换为IP地址。DNS查询须要占用网络,并且包括可能从很多很远的做事器或者不起浸染的做事器上去获取对应的IP的过程,这样会花费一定的韶光。为了肃清DNS查询对性能的影响我们可以关闭DNS查询,办法是修正server.xml文件中的enableLookups参数值: Tomcat4
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" 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站点的流量都是一样的,因此没有一刀切的方案来确定线程数的值。
Tomcat作为Web做事器,它的处理性能直接关系到用户体验,下面是几种常见的优化方法:
一、掉对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情形,加大tomcat利用的jvm的内存
二、做事器资源 做事器所能供应CPU、内存、硬盘的性能对处理能力有决定性影响。 (1) 对付高并发情形下会有大量的运算,那么CPU的速率会直接影响到处理速率。 (2) 内存在大量数据处理的情形下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就碰着过内存分配不敷,导致虚拟机一贯处于full GC,从而导致处理能力严重低落。 (3) 硬盘紧张问题便是读写性能,昔时夜量文件进行读写时,磁盘极随意马虎成为性能瓶颈。最好的办法还是利用下面提到的缓存。
三、利用缓存和压缩 对付静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采取了Nginx作为缓存做事器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。 其余,为了能加快网络传输速率,开启gzip压缩也是必不可少的。但考虑到tomcat已经须要处理很多东西了,以是把这个压缩的事情就交给前真个Nginx来完成。 除了文本可以用gzip压缩,实在很多图片也可以用图像处理工具预前辈行压缩,找到一个平衡点可以让画质丢失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己险些看不出来差异。
四、采取集群 单个做事器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性能的手段。我们还是采取了Nginx来作为要求分流的做事器,后端多个tomcat共享session来协同事情。
五、 优化tomcat参数 这里以tomcat7的参数配置为例,须要修正conf/server.xml文件,紧张是优化连接配置,关闭客户端dns查询。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" maxThreads="500" minSpareThreads="20" acceptCount="100" disableUploadTimeout="true" enableLookups="false" URIEncoding="UTF-8" />
五、Tomcat 支配项目的三种方法
目录
1、下载 Tomcat 做事器2、启动并支配 Tomcat 做事器3、Tomcat 的目录构造4、支配项目的第一种方法(项目直接放入 webapps 目录中)5、支配项目的第二种方法(修正 conf/server.xml 文件 )6、支配项目的第三种方法(apache-tomcat-7.0.52\conf\Catalina\localhost )1、下载 Tomcat 做事器①、官网下载地址:http://tomcat.apache.org/
②、tomcat 8.0 64位百度云下载地址:http://pan.baidu.com/s/1slbKPsx 密码:ewui
③、tomcat 8.0 32位百度云下载地址:http://pan.baidu.com/s/1o8G28rS 密码:k11n
2、启动并支配 Tomcat 做事器①、解压 tomcat 安装包到一个非中文目录下
②、配置环境变量。JAVA_HOME(指向 JDK 安装的根目录)
③、双击 apache-tomcat-6.0.16\bin 目录下的 startup.bat,启动做事器(如果一闪而过,那便是没有配置 JAVA_HOME 的环境变量)
④、在浏览器中输入 http://localhost:8080
把稳:Tomcat 启动不了的时候把稳配置 JAVA_HOME:C:\Program Files\Java\jdk1.6.0_43这是安装 JDK的根目录
3、Tomcat 的目录构造4、支配项目的第一种方法(项目直接放入 webapps 目录中)
1、将编写并编译好的web项目(把稳假如编译好的,如果是 eclipse,可以将项目打成 war 包放入),放入到 webapps 中
2、启动tomcat做事器(双击 apache-tomcat-6.0.16\bin 目录下的 startup.bat,启动做事器)
3、在浏览器输入:http://localhost:8080/项目名/访问的文件名
5、支配项目的第二种方法(修正 conf/server.xml 文件 )
①、打开tomcat下conf/server.xml,在<Host> </Host>标签之间输入项目配置信息
<Context path="/WebProject" docBase="D:/WebProject" reloadable="true" />
path:浏览器访问时的路径名
docBase:web项目的WebRoot所在的路径,把稳是WebRoot的路径,不是项目的路径。实在也便是编译后的项目
reloadble:设定项目有改动时,tomcat是否重新加载该项目
②、双击 startup.bat,启动 tomcat 做事器,然后在浏览器输入访问的项目名称路径
把稳:如果你配置的 path="/xx",那么访问的时候便是这样:
6、支配项目的第三种方法(apache-tomcat-7.0.52\conf\Catalina\localhost )
①、进入到 apache-tomcat-7.0.52\conf\Catalina\localhost 目录,新建一个 项目名.xml 文件
②、在 那个新建的 xml 文件中,增加下面配置语句(和上面的是一样的,但是不须要 path 配置,加上也没什么用)
<Context docBase="D:/WebProject" reloadable="true" />
③、在浏览器输入路径:localhost:8080/xml文件名/访问的文件名
总结:
①、第一种方法比较普通,但是我们须要将编译好的项目重新 copy 到 webapps 目录下,多出了两步操作
②、第二种方法直接在 server.xml 文件中配置,但是从 tomcat5.0版本开始后,server.xml 文件作为 tomcat 启动的紧张配置文件,一旦 tomcat 启动后,便不会再读取这个文件,因此无法再 tomcat 做事启动后发布 web 项目
③、第三种方法是最好的,每个项目分开配置,tomcat 将以\conf\Catalina\localhost 目录下的 xml 文件的文件名作为 web 运用的高下文路径,而不再理会 <Context>中配置的 path 路径,因此在配置的时候,可以不写 path。
常日我们利用第三种方法