tomcat
一、部署Tomcat
1.安装jdk环境
[root@tomcat ~]# yum -y install java
[root@tomcat ~]# java -version
2.安装tomcat
[root@tomcat ~]# cd /usr/local/src/
[root@tomcat src]# wget https://mirrors.bfsu.edu.cn/apache/tomcat/tomcat-8/v8.5.60/bin/apache-tomcat-8.5.60.tar.gz
[root@tomcat src]# tar zxf apache-tomcat-8.5.60.tar.gz
[root@tomcat src]# cd apache-tomcat-8.5.60/
[root@tomcat apache-tomcat-8.5.60]# ls
bin CONTRIBUTING.md logs RELEASE-NOTES webapps
BUILDING.txt lib NOTICE RUNNING.txt work
conf LICENSE README.md temp
[root@tomcat apache-tomcat-8.5.60]# cd ..
[root@tomcat src]# mv apache-tomcat-8.5.60 /usr/local/tomcat8
[root@tomcat src]# /usr/local/tomcat8/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@tomcat src]# ss -lnpt | grep java
LISTEN 0 1 [::ffff:127.0.0.1]:8005 [::]:* users:(("java",pid=11616,fd=66))
LISTEN 0 100 [::]:8080 [::]:* users:(("java",pid=11616,fd=54))
网页访问:
192.168.229.201:8080
二、多实例部署
1.一台服务器上部署多个tomcat
[root@tomcat src]# cp -ra /usr/local/tomcat8/ /usr/local/tomcat8_2
[root@tomcat src]# cd /usr/local/tomcat8_2/
[root@tomcat tomcat8_2]# ls
bin CONTRIBUTING.md logs RELEASE-NOTES webapps
BUILDING.txt lib NOTICE RUNNING.txt work
conf LICENSE README.md temp
[root@tomcat tomcat8_2]# cd conf/
[root@tomcat conf]# ls
Catalina context.xml logging.properties tomcat-users.xsd
catalina.policy jaspic-providers.xml server.xml web.xml
catalina.properties jaspic-providers.xsd tomcat-users.xml
[root@tomcat conf]# vim server.xml
修改3个端口
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
redirectPort="8444" />
[root@tomcat conf]# /usr/local/tomcat8_2/bin/startup.sh
[root@tomcat conf]# ss -lnpt | grep java
2.jps命令
[root@tomcat conf]# yum -y install java-devel
[root@tomcat conf]# jps -help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
[root@tomcat conf]# jps -lv
[root@tomcat conf]# jps -ml
3.tomcat的server.xml配置文件
[root@tomcat conf]# vim server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
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="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>
</Server>
4.自定义目录
在host name处添加
[root@tomcat conf]# vim server.xml
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/shop" docBase="/data/project" debug="0" reloadable="false" crossContext="true">
</Context>
...
[root@tomcat conf]# mkdir -p /data/project
[root@tomcat conf]# vim web.xml
<param-value>false</param-value>
改为
<param-value>true</param-value>
[root@tomcat conf]# /usr/local/tomcat8/bin/shutdown.sh
[root@tomcat conf]# /usr/local/tomcat8/bin/startup.sh
5.网页访问
192.168.229.201:8080/shop
[root@tomcat conf]# cd /data/project/
[root@tomcat project]# touch index1.jsp
[root@tomcat project]# touch index2.jsp
[root@tomcat project]# vim meminfo.jsp
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;
out.println("JVM memory detail info :<br>");
out.println("Max memory:"+mm+"MB"+"<br>");
out.println("Total memory: "+tm+"MB"+"<br>");
out.println("Free memory: "+fm+"MB"+"<br>");
out.println("Available memmory can be used is :"+(mm+fm-tm)+"MB"+"<br>");
%>
三、远程监控
1.Tomcat开启JMX远程调试功能
[root@tomcat project]# cd /usr/local/tomcat8/bin/
[root@tomcat bin]# vim catalina.sh
添加:
CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.229.201 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8080 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
[root@tomcat bin]# cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/lib/management/
[root@tomcat management]# cp jmxremote.password.template jmxremote.password
[root@tomcat management]# vim jmxremote.password
# monitorRole QED
# controlRole R&D
改为
monitorRole asd123
controlRole asd123
[root@tomcat management]# chmod 600 jmxremote.password
[root@tomcat management]# /usr/local/tomcat8/bin/shutdown.sh
[root@tomcat management]# /usr/local/tomcat8/bin/startup.sh
2.通过本地机远程连接调用
jconsole
后台管理
需要注释刚才添加在catalina.sh中的内容
[root@tomcat management]# vim /usr/local/tomcat8/bin/catalina.sh
#CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.229.201 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8080 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
[root@tomcat management]# cd /usr/local/tomcat8/webapps/
[root@tomcat webapps]# ls
docs examples host-manager manager ROOT
[root@tomcat webapps]# cd manager/
[root@tomcat manager]# ls
images index.jsp META-INF status.xsd WEB-INF xform.xsl
[root@tomcat manager]# cd META-INF/
[root@tomcat META-INF]# ls
context.xml
[root@tomcat META-INF]# vim context.xml
allow="^.*$" />
[root@tomcat META-INF]# vim /usr/local/tomcat8/conf/tomcat-users.xml
添加:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="manager-gui" password="asd123" roles="manager-gui"/>
<user username="manager-script" password="asd123" roles="manager-script"/>
[root@tomcat META-INF]# /usr/local/tomcat8/bin/shutdown.sh
[root@tomcat META-INF]# /usr/local/tomcat8/bin/startup.sh
3.网页访问
192.168.229.201:8080选择manager app
主机管理
[root@tomcat META-INF]# cd /usr/local/tomcat8/webapps/host-manager/
[root@tomcat host-manager]# ls
images index.jsp manager.xml META-INF WEB-INF
[root@tomcat host-manager]# cd META-INF/
[root@tomcat META-INF]# ls
context.xml
[root@tomcat META-INF]# vim context.xml
allow="^.*$" />
[root@tomcat host-manager]# vim /usr/local/tomcat8/conf/tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin-gui" password="asd123" roles="admin-gui"/>
<user username="admin-script" password="asd123" roles="admin-script"/>
[root@tomcat host-manager]# /usr/local/tomcat8/bin/shutdown.sh
[root@tomcat host-manager]# /usr/local/tomcat8/bin/startup.sh
网页访问
192.168.229.201:8080选择host manager
4.部署
选择manager app进行相关部署
安全
端口防护
禁用目录浏览
隐藏信息
[root@tomcat host-manager]# vim /usr/local/tomcat8/conf/web.xml
添加:
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
[root@tomcat host-manager]# vim /usr/local/tomcat8/webapps/ROOT/notfound.jsp
<%
out.println("NOT FOUND");
%>
[root@tomcat host-manager]# /usr/local/tomcat8/bin/shutdown.sh
[root@tomcat host-manager]# /usr/local/tomcat8/bin/startup.sh
5.日志切割
sed -i 's@>> "$CATALINA_OUT" 2>&1 "&"@2>\&1 |/usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-bdqn-%Y-%m-%d.log" \&@g' /usr/local/tomcat8/bin/catalina.sh
6.jvm优化
[root@tomcat management]# vim /usr/local/tomcat8/bin/catalina.sh
机子内存如果是 4G:
CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -Xmn1024m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"
机子内存如果是 8G:
CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms4096m -Xmx4096m -Xmn2048m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"
机子内存如果是 16G:
CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms8192m -Xmx8192m -Xmn4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"
机子内存如果是 32G:
CATALINA_OPTS="-Dfile.encoding=UTF-8 -server -Xms16384m -Xmx16384m -Xmn8192m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=15 -XX:NewRatio=2 -XX:+DisableExplicitGC"
如果是 8G 开发机
-Xms2048m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=512m
如果是 16G 开发机
-Xms4096m -Xmx4096m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=256m -XX:MaxPermSize=512m
参数说明:
-Dfile.encoding:默认文件编码
-server:表示这是应用于服务器的配置,JVM 内部会有特殊处理的
-Xmx1024m:设置JVM最大可用内存为1024MB
-Xms1024m:设置JVM最小内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn1024m:设置JVM新生代大小(JDK1.4之后版本)。一般-Xmn的大小是-Xms的1/2左右,不要设置的过大或过小,过大导致老年代变小,频繁Full GC,过小导致minor GC频繁。如果不设置-Xmn,可以采用-XX:NewRatio=2来设置,也是一样的效果
-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:MaxTenuringThreshold,并不代表着,对象一定在年轻代存活15次才被晋升进入老年代,它只是一个最大值,事实上,存在一个动态计算机制,计算每次晋入老年代的阈值,取阈值和MaxTenuringThreshold中较小的一个为准。
-XX:+DisableExplicitGC:这个将会忽略手动调用GC的代码使得 System.gc() 的调用就会变成一个空调用,完全不会触发任何GC