Tomcat调优和虚拟主机的设置

Tomcat虚拟主机

什么是虚拟主机?

虚拟主机就是把一台真正的主机分成许多“虚拟”的主机,每一台虚拟主机都具有独立的域名和IP地址,具有完整的Internet服务器功能。
虚拟主机之间完全独立,在外界看来,每一台虚拟主机和一台独立的主机完全一样。

配置文件位置:

/conf/server.xml #tomcat配置文件
tomcat的默认端口:8080

1.基于域名的虚拟主机

多个域名解析一个IP地址

 [work@localhost 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 管理页面

添加允许访问的主机

[work@localhost 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>

添加允许访问的用户和角色

[work@localhost 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在高并发下的首选运行模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章