tomcat常⽤配置详解和优化⽅法
tomcat常⽤配置详解和优化⽅法
参考:
blog.csdn/zj52hm/article/details/51980194
blog.csdn/wuliu_forever/article/details/52607177
wwwblogs/dengyungao/p/7542604.html
wwwblogs/ysocean/p/6893446.html#_label1
常⽤配置详解
1 ⽬录结构
/bin:脚本⽂件⽬录。
/common/lib:存放所有web项⽬都可以访问的公共jar包(使⽤Common类加载器加载)。
/
conf:存放配置⽂件,最重要的是l。
/logs:存放⽇志⽂件。
/server/webapps:来管理Tomcat-web服务⽤的。仅对TOMCAT可见,对所有的WEB APP都不可见(使⽤Catalina类加载器加载)。
/shared/lib:仅对所有WEB APP可见,对TOMCAT不可见(使⽤Shared类加载器加载)。
/temp:Tomcat运⾏时候存放临时⽂件⽤的。
/webapps:web应⽤发布⽬录。
/work:Tomcat把各种由jsp⽣成的servlet⽂件放在这个⽬录下。删除后,启动时会⾃动创建。
servlet和tomcat的关系2 配置⽂件
server标签
port:指定⼀个端⼝,这个端⼝负责监听关闭tomcat的请求。
shutdown:指定向端⼝发送的命令字符串。
service标签
name:指定service的名字。
Connector(表⽰客户端和service之间的连接)标签
port:指定服务器端要创建的端⼝号,并在这个端⼝监听来⾃客户端的请求。
minProcessors:服务器启动时创建的处理请求的线程数。
maxProcessors:最⼤可以创建的处理请求的线程数。
enableLookups:如果为true,则可以通过调⽤RemoteHost()进⾏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为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的临时读/写。利⽤t.tempdir属性,servlet可以访问该⽬录。如果没有指定,使⽤
$CATALINA_HOME/work下⼀个合适的⽬录。
swallowOutput:如果该值为true,System.out和的输出被重定向到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_。
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)修改l⽂件。在<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" />命名为l,这样默认访问的主⽬录就被修改过了。
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中,屏蔽⽬录⽂件⾃动列出
修改l中的
<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)访问⽇志设置
在l中加⼊
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
这样访问⽇志会记录到Logs中。
4)修改⽤户名、密码
l
5)屏蔽后台管理⼊⼝
⽅法⼀:从控制⽤户和权限着⼿。废掉要管理权限的⽤户就可以了。
⽅法⼆:将conf/Catalina/l改名。
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记录下来,存放⾄-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.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
hibernate.cache=ERROR
注意:我们项⽬中使⽤e.printStackTrace();输出的异常会在控制台输出来,但是,不会记录到tomcat⽇志中。
⽽且,也不会记录到log4j的⽇志中。要想记录到log4j⽇志中,必须使⽤log4j输出来。
所以,实际上web项⽬中进⾏异常处理应该将e.printStackTrace();写写法多改成log4j的形式才对!
但是,实际项⽬中很多项⽬多偷懒使⽤了e.printStackTrace();⽅式输出异常。当出现异常的时候在控制台上查看⼀下就可以了,也不考虑实际运⾏时候的维护。假如有⼈不⼩⼼关了控制台,那么,你不就看不到异常了吗?
个⼈介意使⽤log4j的形式记⼊web异常!
8 Tomcat5乱码问题
Tomcat5跟Tomcat4对参数处理是不⼀样的,在Tomcat4中get与post的编码是⼀样的,所以只要在过滤器中通过request.setCharacterEncoding()设定⼀次就可以解决get与set的问题。然⽽,在Tomcat5中,get与post的处理是分开的,对get请求使⽤URIEncoding进⾏处理,对post使⽤request.setCharacterEncoding()处理。Tomcat5中,在l的Connector元素增加了以下配置参数:
URIEncoding:⽤来设定通过URI传递的
tomcat优化配置参数
优化内存,主要是在bin/catalina.bat/sh 配置⽂件中进⾏。linux上,在catalina.sh中添加:
JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -ding=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、连接数优化:
#优化连接数,主要是在l配置⽂件中进⾏修改。
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、使⽤线程池
在l中增加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.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配置来启动(l 配置⽂件):
<Connector port="8080"protocol="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
cd tomcat-native-1.1.32-src/jni/native
./configure --with-apr=/usr/bin/apr-1-config
make && make install
#注意最新版本的tomcat⾃带,不过其版本相对于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下载地址:/i
#tomcat-native下载地址:/i
修改8080端对应的l
protocol="http11.Http11AprProtocol"
<Connector executor="tomcatThreadPool"
port="8080"
protocol="http11.Http11AprProtocol"
connectionTimeout="20000"
enableLookups="false"
redirectPort="8443"
URIEncoding="UTF-8" />
PS:启动以后查看⽇志显⽰如下表⽰开启 apr 模式
Sep 19, 2016 3:46:21 PM AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8081"]
tomcat常见⾯试题
⼀、Tomcat的缺省是多少,怎么修改
Tomcat的缺省端⼝号是8080.修改Tomcat端⼝号:
1.到Tomcat⽬录下的conf⽂件夹
2.进⼊conf⽂件夹⾥⾯到l⽂件
3.打开l⽂件
4.在l⽂件⾥⾯到下列信息
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ connectionTimeout=”20000″
disableUploadTimeout=”true” />
5.把port=”8080″改成port=”8888″,并且保存
6.启动Tomcat,并且在IE浏览器⾥⾯的地址栏输⼊12
7.0.0.1:8888/
7、tomcat默认采⽤的BIO模型,在⼏百并发下性能会有很严重的下降。tomcat⾃带还有NIO的模型,另外也可以调⽤APR的库来实现操作系统级别控制。NIO模型是内置的,调
⽤很⽅便,只需要将上⾯配置⽂件中protocol修改成 http11.Http11NioProtocol,重启即可⽣效。如下⾯的参数配置,默认的是HTTP/1.1。
<Connector
port=”8080″ protocol=”http11.Http11NioProtocol” connectionTimeout=”20000″ redirectPort=”8443″ maxThreads=”500″ minSpareThreads=”20″ acceptCount=”100″ disableUploadTime enableLookups=”false” URIEncoding=”UTF-8″ />
⼆、tomcat 如何优化?
1、优化连接配置.这⾥以tomcat7的参数配置为例,需要修改l⽂件,修改连接数,关闭客户端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 (UseURIValidationHack()) {
String uri = RequestURI());
if (uri == null) {
res.setStatus(400);
res.setMessage(“Invalid URI”);
throw new IOException(“Invalid URI”);
} else {
// Redoing the URI decoding
req.decodedURI().questURI());
可以看到如果把useURIValidationHack设成”false”,可以减少它对⼀些url的不必要的检查从⽽减省开销。
enableLookups=”false” :为了消除DNS查询对性能的影响我们可以关闭DNS查询,⽅式是修改l⽂件中的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,不可通过域名直接访问,需要加上端⼝号;yuming:8443。
2. 443端⼝在访问时不需要加端⼝号,相当于http的80,可通过域名直接访问;例:yuming。
*问: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种模式的运⾏是否成功,可以看他的启动控制台,或者启动⽇志.或者登录他们的默认页⾯localhost:8080/查看其中的服务器状态。
1)bio
默认的模式,性能⾮常低下,没有经过任何优化处理和⽀持.
2)nio
利⽤java的异步io护理技术,no blocking IO技术.
想运⾏在该模式下,直接修改l⾥的Connector节点,修改protocol为
<Connector port=”80″ protocol=”http11.Http11NioProtocol” connectionTimeout=”20000″ URIEncoding=”UTF-
8″ useBodyEncodingForURI=”true” enableLookups=”false” redirectPort=”8443″ />启动后,就可以⽣效。
3)apr
安装起来最困难,但是从操作系统级别来解决异步的IO问题,⼤幅度的提⾼性能.
必须要安装apr和native,直接启动就⽀持apr。下⾯的修改纯属多余,仅供⼤家扩充知识,但仍然需要安装apr和native。如nio修改模式,修改protocol为
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查询,⽅式是修改l⽂件中的enableLookups参数值:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论