Tomcat调优和虚拟主机的设置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat调优和虚拟主机的设置相关的知识,希望对你有一定的参考价值。
Tomcat虚拟主机
什么是虚拟主机?
虚拟主机就是把一台真正的主机分成许多“虚拟”的主机,每一台虚拟主机都具有独立的域名和IP地址,具有完整的Internet服务器功能。
虚拟主机之间完全独立,在外界看来,每一台虚拟主机和一台独立的主机完全一样。
配置文件位置:
/conf/server.xml #tomcat配置文件
tomcat的默认端口:8080
1.基于域名的虚拟主机
多个域名解析一个IP地址
[[email protected] tomcat]$ vim conf/server.xml 添加如下内容
<Host name="www.maiya.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase=‘jspgou‘ path="" reloadable="true" crossContext="true"/>
</Host>
参数说明:
appBase: 指定站点根目录位置(可以是相对路径或绝对路径)
unpackWAR :本项为"true" 意味着 Tomcat 会保存 .war 包的解压结果,然后直接对解压结果进行运行。
考虑到jvm的类加载机制,每个类都仅加载一次,但是页面内容却没有类似的有效缓存,所以 .war 还是解压执行的比较好。
path: 指定访问路径URI(虚拟目录名)
docBase :指定jsp项目的存放路径(可以是相对路径或绝对路径)
debug :设定debug的等级0提供最少的信息,9提供最多的信息
reloadable :本项为true时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务(所谓的支持热发布功能)
crosscontext :本项为"true" 表示配置的不同context共享一个session
cachingAllowed :本项为"true"时 意味着开启了 Tomcat 的静态缓存功能。静态文件包括 javascript 程序、图片声音等允许网络访问的文件以及 html 页面。
cacheMaxSize :指定静态缓存功能缓冲区大小的设定。单位是 MB ,也就是 1024KB 。例子中设为 1024 ,意味着1GB 。
2.基于端口虚拟主机
一个IP地址,通过不同的端口实现不同网站的访问
关键 : 在server.xml 中 设置两个service组件,设置不同的端口(基于端口应用范围很少)
<Service name="Catalinai1">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="www.maiya.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase=‘jspgou‘ path="" reloadable="true" crossContext="true"/>
</Host>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
<Service name="Catalina2">
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="www.maiya.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase=‘jspgou‘ path="" reloadable="true" crossContext="true"/>
</Host>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
Tomcat Manager 管理页面
添加允许访问的主机
[[email protected] tomcat]$ vim webapps/manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10.18.*$" /> <Manager
sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFil
ter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>
添加允许访问的用户和角色
[[email protected] tomcat]$ vim conf/tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="123" roles="admin-gui,manager-gui,manager-script"/>
Tomcat调优
JVM内存优化
vim bin/catalina.sh
CATALINA_OPTS="-server -Xms128m -Xmx512m"
# 或者
JAVA_OPTS="$JAVA_OPTS -Xms4096m -Xmx4096m -XX:PermSize=1024m -XX:MaxPermSize=2048m"
开启GC日志
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log"
开启JMX端口便于监控
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=10028
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=java69-matrix.zeus.lianjia.com"
取消JVM 的默认DNS缓存时间
不缓存DNS记录,避免DNS解析更改后要重启JVM虚拟机
CATALINA_OPTS="$CATALINA_OPTS -Dsun.net.inetaddr.ttl=0 -Dsun.net.inetaddr.negative.ttl=0
参数说明:
-server:表示这是应用于服务器的配置,JVM 内部会有特殊处理的
-Xmx1024m:设置JVM最大堆可用内存为1024MB
-Xms1024m:设置JVM最小内堆存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-XX:NewSize:设置年轻代大小
-XX:MaxNewSize:设置最大的年轻代大小
-XX:PermSize:设置永久代大小
-XX:MaxPermSize:设置最大永久代大小
-XX:NewRatio=4:设置年轻代(包括 Eden 和两个 Survivor 区)与终身代的比值(除去永久代)。设置为 4,则年轻代与终身代所占比值为 1:4,年轻代占整个堆栈的 1/5
-XX:MaxTenuringThreshold=10:设置垃圾最大年龄,默认为:15。如果设置为 0 的话,则年轻代对象不经过Survivor 区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在 Survivor 区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
-XX:+DisableExplicitGC:这个将会忽略手动调用 GC 的代码使得 System.gc() 的调用就会变成一个空调用,完全不
会触发任何 GC
Tomcat并发优化
Tomcat配置文件conf/server.xml中
minProcessors: 最小空闲连接线程数,用于提高系统处理性能,默认值为 10
maxProcessors: 最大连接线程数,即:并发处理的最大请求数,默认值为 75
acceptCount: 允许的最大连接数,应大于等于 maxProcessors ,默认值为 100
enableLookups: 是否反查域名,取值为: true 或 false 。为了提高处理能力,应设置为 false
connectionTimeout: 网络连接超时,单位:毫秒。设置为 0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
其中和最大连接数相关的参数为maxProcessors 和 acceptCount 。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是 2000个左右, Linux是1000个左右。
maxThreads: 客户请求最大线程数
minSpareThreads: Tomcat初始化时创建的 socket 线程数
maxSpareThreads: Tomcat连接器的最大空闲 socket 线程数
enableLookups: 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort: 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount: 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads)
connectionTimeout: 连接超时
minProcessors: 服务器创建时的最小处理线程数
maxProcessors: 服务器同时最大处理线程数
URIEncoding: URL统一编码
Tomcat Connector运行模式优化
Tomcat Connector有三种运行模式:
bio:阻塞IO bio是三种运行模式中性能最低第一种。
nio:是一个基于缓冲区,并能提供非阻塞I/O操作的JAVA API 因此NIO也成为非阻塞I/O,比bio拥有更好的并发性能。
apr:调用httpd核心链接库来读取或文件传输,从而提高tomat对静态文件的处理性能。Tomcat APR模式也是Tomcat在高并发下的首选运行模式
以上是关于Tomcat调优和虚拟主机的设置的主要内容,如果未能解决你的问题,请参考以下文章