1、Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。
2、Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
3、Tomcat和Nginx、Apache(httpd)、lighttpd等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Nginx/Apache服务器。
4、目前Tomcat最新版本为9.0。Java容器还有resin、weblogic等。
5、Tomcat官网: http://tomcat.apache.org
部署环境
[root@node1 ~]# uname -r
3.10.0-1062.el7.x86_64
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
由于tomcat是用java写的,所以运行需要JRE,就是JAVA运行时刻环境,所以必须通过安装JDK来得到这个运行环境。
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。
JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
tomcat下载链接
1、安装jdk包
[root@node1 ~]# yum install jdk-8u144-linux-x64.rpm -y
2、检测java安装是否成功
[root@node1 ~]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
[root@node1 ~]# jps
1869 Jps
3、将包解压到/usr/local目录下
[root@node1 ~]# tar xf apache-tomcat-8.5.63.tar.gz -C /usr/local/
4、进入该目录下创建软连接
[root@node1 ~]# cd /usr/local/
[root@node1 local]# ln -sv apache-tomcat-8.5.63/ tomcat
"tomcat" -> "apache-tomcat-8.5.63/"
5、检查tomcat安装是否成功
[root@node1 local]# /usr/local/tomcat/bin/version.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Server version: Apache Tomcat/8.5.63
Server built: Jan 29 2021 11:21:49 UTC
Server number: 8.5.63.0
OS Name: Linux
OS Version: 3.10.0-1062.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_144-b01
JVM Vendor: Oracle Corporation
[root@node1 ~]# cd /usr/local/tomcat/
[root@node1 tomcat]# tree -L 1
.
├── bin # 存放tomcat管理脚本
├── BUILDING.txt # 存放tomcat 配置文件存
├── conf
├── CONTRIBUTING.md
├── lib # web应用调用的jar包存放路径
├── LICENSE
├── logs # tomcat 日志存放目录,catalina.out 为主要输出日志
├── NOTICE
├── README.md
├── RELEASE-NOTES
├── RUNNING.txt
├── temp # 存放临时文件
├── webapps # web程序存放目录
└── work # 存放编译产生的.java与.class文件
[root@node1 ~]# cd /usr/local/tomcat/webapps/
[root@node1 webapps]# tree -L 1
.
├── docs # tomcat 帮助文档
├── examples # web应用实例
├── host-manager # 主机管理
├── manager # 管理
└── ROOT # 默认站点根目录
[root@node1 webapps]# cd /usr/local/tomcat/conf/
[root@node1 conf]# tree -L 1
.
├── catalina.policy
├── catalina.properties
├── context.xml
├── jaspic-providers.xml
├── jaspic-providers.xsd
├── logging.properties
├── server.xml # tomcat 主配置文件
├── tomcat-users.xml # tomcat 管理用户配置文件
├── tomcat-users.xsd
└── web.xml
方法一:命令启动停止
启动:/usr/local/tomcat/bin/startup.sh
停止:/usr/local/tomcat/bin/shutdown.sh
测试:
[root@node1 ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Using CATALINA_PID: /usr/local/tomcat/tomcat.pid
Tomcat started.
[root@node1 ~]# netstat -lnupt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 4274/java
方法二:脚本启动停止
1、配置tomcat环境变量
[root@node1 ~]# vim /etc/profile.d/tomcat.sh
# TOMCAT
export CATALINA_HOME=/usr/local/tomcat
# PATH
export PATH=$PATH:$CATALINA_HOME/bin
[root@node1 ~]# source /etc/profile.d/tomcat.sh
2、设置tomcat pid和java 启动参数
[root@node1 ~]# vim /usr/local/tomcat/bin/setenv.sh
#add tomcat pid
CATALINA_PID="$CATALINA_HOME/tomcat.pid"
#add java opts
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms1024M -Xmx1024M -XX:MaxNewSize=256m"
3、编辑服务脚本
[root@node1 ~]# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application #描述信息
ContainerAfter=syslog.target network.target #等待网络启动之后再启动
[Service]
Type=forking #类型
PIDFile=/usr/local/tomcat/tomcat.pid
ExecStart=/usr/local/tomcat/bin/catalina.sh start #启动命令
ExecReload=/bin/kill -s HUP MAINPID #加载命令
ExecStop=/bin/kill−s QUIT MAINPID #停止命令
PrivateTmp=true #自动解压
[Install]
WantedBy=multi-user.target #运行级别:多用户模式
[root@node1 ~]# systemctl daemon-reload
4、测试启动停止与开机自启
[root@node1 ~]# netstat -lnupt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 4053/java
[root@node1 ~]# systemctl stop tomcat.service
[root@node1 ~]# netstat -lnupt | grep 8080
[root@node1 ~]# systemctl enable tomcat.service
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.
/usr/local/tomcat/logs/catalina.out
发现耗时在这里:是session引起的随机数问题导致的。
Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。
为了提高安全性Tomcat在启动的时候会通过随机生成一个密钥。
查看是否有足够的熵来用于产生随机数
[root@node1 ~]# cat /proc/sys/kernel/random/entropy_avail
1802
解决方法:
[root@node1 ~]# yum install rng-tools -y
[root@node1 ~]# systemctl start rngd
[root@node1 ~]# systemctl enable rngd
测试:
[root@node1 ~]# cat /proc/sys/kernel/random/entropy_avail
3111
重启测试,查看日志
[root@node1 ~]# tail -1 /usr/local/tomcat/logs/catalina.out
21-Feb-2021 19:30:19.556 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 585 ms
建议不要再生产环境中使用
该功能用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。在默认情况下是处于禁用状态的。如果需要开启这个功能,就需要配置管理用户。
1、配置tomcat-users.xml 文件,添加以下几行
[root@node1 ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
"admin-gui"/>
"admin-script"/>
"manager-gui"/>
"manager-jmx"/>
"manager-script"/>
"manager-status"/>
"tomcat" password="tomcat" roles="admin-gui,manager-gui,manager- jmx,manager-script,manager-status,admin-script"/>
</tomcat-users> #前面加上以上几行,注意,不要添加到注释里面去。
2、允许方式Manager APP
[root@node1 ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
"org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
<!-- allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /-->
3、允许访问Host Manager
[root@node1 ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
"org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
<!-- allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /-->
4、修改完毕,重启tomcat
[root@node1 ~]# systemctl restart tomcat.service
server.xml组件类别
顶级组件:位于整个配置的顶层,如server。
容器类组件:可以包含其它组件的组件,如service、engine、host、context。
连接器组件:连接用户请求至tomcat,如connector。
被嵌套类组件:位于一个容器当中,不能包含其他组件,如Valve、logger。
engine-----核心容器组件,catalina引擎,负责通过connector接收用户请求,并处理请求,将请求转至对应的虚拟主机host。
host-------类似于httpd中的虚拟主机,一般而言支持基于FQDN的虚拟主机。
context----定义一个应用程序,是一个最内层的容器类组件(不能再嵌套)。
配置context的主要目的指定对应对的webapp的根目录,类似于httpd的alias,其还能为webapp指定额外 的属性,如部署方式等。
connector--接收用户请求,类似于httpd的listen配置监听端口的。
service----将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine。
service内部有两个connector,一个engine。
因此,一般情况下一个server内部只有一个service,一个service内部只有一个engine,但一个service内部可以有多个connector。
server-----表示一个运行于JVM中的tomcat实例。
Valve------阀门,拦截请求并在将其转至对应的webapp前进行某种处理操作,可以用于任何容器中,比如记录日志(access log valve)、基于IP做访问控制(remote address filter valve)。
logger-----日志记录器,用于记录组件内部的状态信息,可以用于除context外的任何容器中。
realm------可以用于任意容器类的组件中,关联一个用户认证库,实现认证和授权。
可以关联的认证库有两种:UserDatabaseRealm、MemoryRealm和JDBCRealm。
UserDatabaseRealm---使用JNDI自定义的用户认证库。
MemoryRealm--认证信息定义在tomcat-users.xml中。
JDBCRealm----认证信息定义在数据库中,并通过JDBC连接至数据库中查找认证用户。
Connector主要参数说明
"8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
connector-----接收用户请求,类似于httpd的listen配置监听端口.
port----------指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求。
address-------指定连接器监听的地址,默认为所有地址(即0.0.0.0)
protocol------连接器使用的协议,支持HTTP和AJP。AJP(Apache Jserv Protocol)专用于tomcat与apache建立通信的,在httpd反向代理用户请求至tomcat时使用(可见Nginx反向代理时不可用AJP协议)。
minProcessors--服务器启动时创建的处理请求的线程数
maxProcessors--最大可以创建的处理请求的线程数
enableLookups--如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort---指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount----指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout---指定超时的时间数(以毫秒为单位)
host参数详解
"localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
host-----表示一个虚拟主机
name-----指定主机名
appBase-------应用程序基本目录,即存放应用程序的目录.一般为appBase="webapps" ,相对于CATALINA_HOME而言的,也可以写绝对路径。
unpackWARs----如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序autoDeploy 在tomcat启动时,是否自动部署。
xmlValidation------是否启动xml的校验功能,一般xmlValidation="false"。
xmlNamespaceAware--检测名称空间,一般xmlNamespaceAware="false"。
Context参数说明
Context---表示一个web应用程序,通常为WAR文件
docBase---应用程序的路径或者是WAR文件存放的路径,也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径。
path------表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/
reloadable--为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重启tomcat的情况下改变应用程序
jpress官网:http://jpress.io
下载地址:https://github.com/JpressProjects/jpress
1、安装数据库并初始化
[root@node1 ~]# yum install -y mariadb-server
[root@node1 ~]# systemctl enable mariadb.service --now
[root@node1 ~]# mysql -e "create database jpress default character set utf8;"
[root@node1 ~]# mysql -e "grant all on jpress.* to jpress@'localhost' identified by '123456';"
2、将jpress的war传到/usr/local/tomcat/webapps/目录下,并查看
[root@node1 ~]# ll /usr/local/tomcat/webapps/
总用量 70004
drwxr-x---. 15 root root 4096 2月 21 18:51 docs
drwxr-x---. 7 root root 99 2月 21 18:51 examples
drwxr-x---. 6 root root 79 2月 21 18:51 host-manager
drwxr-x---. 6 root root 86 2月 21 20:29 jpress-v3.3.0
-rw-r--r--. 1 root root 71677863 2月 21 13:52 jpress-v3.3.0.war
drwxr-x---. 6 root root 114 2月 21 18:51 manager
drwxr-x---. 3 root root 223 2月 21 18:51 ROOT
点击进入该目录
其他操作:
若想直接通过IP进行访问Jpress站点,将/usr/local/tomcat/webapps/目录下的jpress目录放入到同级的ROOT目录中,并将ROOT目录中的文件删除或备份到其他地方。
[root@node1 ~]# ll /usr/local/tomcat/webapps/
总用量 70004
drwxr-x---. 15 root root 4096 2月 21 18:51 docs
drwxr-x---. 7 root root 99 2月 21 18:51 examples
drwxr-x---. 6 root root 79 2月 21 18:51 host-manager
drwxr-x---. 6 root root 86 2月 21 20:29 jpress-v3.3.0
-rw-r--r--. 1 root root 71677863 2月 21 13:52 jpress-v3.3.0.war
drwxr-x---. 6 root root 114 2月 21 18:51 manager
drwxr-x---. 3 root root 223 2月 21 18:51 ROOT
[root@node1 webapps]# mkdir ROOT.bak
[root@node1 webapps]# mv ROOT/* ROOT.bak/
[root@node1 webapps]# mv jpress-v3.3.0/* ROOT/
修改为80端口:注意,端口不能冲突。
[root@node1 tomcat]# vim conf/server.xml
"80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
[root@node1 ~]# yum install unzip.x86_64 -y
[root@node1 ~]# unzip JspRun\!_6_GBK.zip
[root@node1 ~]# mv JspRun\!_6.0.0_GBK/upload/ /usr/local/tomcat/webapps/jsp
[root@node1 jsp]# cd /usr/local/tomcat/webapps/jsp/
[root@node1 jsp]# vim config.properties
dbhost = localhost
dbport=3306
dbuser = jsp
dbpw = 123456
dbname = jsprun
pconnect = 0
tablepre = jrun_
database = mysql
dbcharset =
charset = gbk
headercharset = 0
tplrefresh = 1
version=5.1
[root@node1 ~]# mysql -e "create database jsprun default character set gbk;"
[root@node1 ~]# mysql -e "grant all on jsprun.* to jsp@'localhost' identified by '123456';"
[root@node1 ~]# cd /usr/local/tomcat/conf/
[root@node1 conf]# cp server.xml server.xml.bak
1、修改配置文件,添加host主机配置
[root@node1 conf]# vim server.xml
"www.aaa.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
"/web/aaa" path="" reloadable="flase" />
"org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="www.aaa.com_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
"www.bbb.com" appBase="webapps"
unpackWARs="true" autoDeploy="true">
"/web/bbb" path="" reloadable="flase" />
"org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="www.bbb.com_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
2、创建访问的网站页面
[root@node1 conf]# mkdir -p /web/{aaa,bbb}
[root@node1 conf]# vim /web/aaa/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP a page</title>
</head>
<% out.println("Welocome to test site,http://www.aaa.com");%>
</body>
</html>
[root@node1 conf]# vim /web/bbb/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP a page</title>
</head>
<% out.println("Welocome to test site,http://www.bbb.com");%>
</body>
</html>
3、添加本地dns解析
[root@node1 conf]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.16.11 www.aaa.com www.bbb.com
4、测试
[root@node1 conf]# curl www.aaa.com:8080
JSP a page</title>
</head>
Welocome to test site,http://www.aaa.com
</body>
</html>
[root@node1 conf]# curl www.bbb.com:8080
JSP a page</title>
</head>
Welocome to test site,http://www.bbb.com
</body>
</html>
[root@node1 ~]# yum install elinks.x86_64 -y
[root@node1 ~]# elinks www.aaa.com:8080
方法一:开发java监控页面
[root@node1 ~]# vim /web/aaa/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 :
");
out.println("Max memory:"+mm+"MB"+"
");
out.println("Total memory:"+tm+"MB"+"
");
out.println("Free memory:"+fm+"MB"+"
");
out.println("Available memory can be used is :"+(mm+fm-tm)+"MB"+"
");
%>
测试:
[root@node1 ~]# elinks www.aaa.com:8080/meminfo.jsp
1、修改配置文件,开启远程监控
[root@node1 ~]# vim /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=2222 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.16.11"
2、重启服务
[root@node1 ~]# systemctl restart tomcat.service
3、测试
[root@node1 ~]# netstat -lnupt | grep 2222
tcp6 0 0 :::2222 :::* LISTEN 3470/java
[root@node1 ~]# netstat -lnupt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 3470/java
测试:
windwos安装jdk环境,运行jconsole.exe或jvisualvm.exe进行监控
建议配置,要求端口配置在8000~8999之间;
1、修改默认的8005管理端口为不易猜测的端口(大于1024);
2、修改SHUTDOWN指令为其他字符串;
保护此端口的目的在于防止线下的测试流量被mod_jk转发至线上tomcat服务器;
1、修改默认的ajp 8009端口为不易冲突的大于1024端口;
2、通过iptables规则限制ajp端口访问的权限仅为线上机器;
对于前段web模块,Tomcat管理端属于tomcat 的高危安全隐患,一 旦被攻破,黑客通过上传web shell的方式将会直接取得服务器的控制权,后果极其严重;
1、 删除默认的{Tomcat安装目 录}/conf/tomcat-users.xml文 件,重启tomcat后将会自动生 成新的文件;
2、 删除{Tomcat 安装目录}/webapps下默认的所有目录和文件;
3、将tomcat 应用根目录配置为tomcat安装目录以外的目录;
避免一旦tomcat服务被入侵,黑客直接获取高级用户权限危害整个server的安全;
1、tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;
2、如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发;
操作:
1、创建一个普通用户tomcat
[root@node2 ~]# groupadd -g 777 tomcat
[root@node2 ~]# useradd -u 777 -g 777 -s /sbin/nologin -d /usr/local/tomcat/ tomcat
2、修改服务脚本 User=tomcat
[root@node2 system]# vim /usr/lib/systemd/system/tomcat.service
User=tomcat
3、修改权限 /usr/local/tomcat
[root@node2 ~]# chown -R tomcat /usr/local/tomcat/*
[root@node2 ~]# ll /usr/local/tomcat/
总用量 132
drwxr-x---. 2 tomcat root 4096 2月 21 23:12 bin
-rw-r-----. 1 tomcat root 19318 1月 29 19:25 BUILDING.txt
drwx------. 3 tomcat root 254 2月 21 22:56 conf
-rw-r-----. 1 tomcat root 5586 1月 29 19:25 CONTRIBUTING.md
drwxr-x---. 2 tomcat root 4096 2月 21 22:52 lib
-rw-r-----. 1 tomcat root 57011 1月 29 19:25 LICENSE
drwxr-x---. 2 tomcat root 197 2月 21 22:56 logs
-rw-r-----. 1 tomcat root 1726 1月 29 19:25 NOTICE
-rw-r-----. 1 tomcat root 3257 1月 29 19:25 README.md
-rw-r-----. 1 tomcat root 7136 1月 29 19:25 RELEASE-NOTES
-rw-r-----. 1 tomcat root 16507 1月 29 19:25 RUNNING.txt
drwxr-x---. 2 tomcat root 30 2月 21 22:52 temp
-rw-r-----. 1 tomcat root 5 2月 21 23:12 tomcat.pid
drwxr-x---. 7 tomcat root 81 1月 29 19:24 webapps
drwxr-x---. 3 tomcat root 22 2月 21 22:56 work
[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl start tomcat.service
1、/usr/local/tomcat/conf/web.xml 文件中default部分listings的配置必须为false;
listings
false
false为不列出目录文件,true为允许列出,默认为false;
在配置中对一些常见错误进行重定向,避免当出现错误时tomcat 默认显示的错误页面暴露服务器和版本信 息;必须确保程序根目录下的错误页面已经存在;
1、修改/usr/local/tomcat/conf/web.xml,重 定向403、404以及500等错误到指定的错误页面;
2、也可以通过修改应用程 序目录下的WEB- INF/web.xml下的配置进 行错误页面的重定向;
403/forbidden.jsp404/notfound.jsp
配置:/usr/local/tomcat/conf/server.xml
文件
参数说明:
maxThreads----------Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。
acceptCount---------指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
connectionTimeout---网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
minSpareThreads-----Tomcat初始化时创建的线程数。
maxSpareThreads-----一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
"8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="30" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" disableUploadTimeout="true" />
1、java.lang.OutOfMemoryError: Java heap space
整体意思是超出内存堆空间的错误使用Java程序从数据库中查询大量的数据时出现异常在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的Heap size 不足2%的时候将抛出此异常信息。
2、java.lang.OutOfMemoryError: PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
3、OutOfMemoryError: unable to create new native thread.
无法创建新的线程。
4、java “Too small initial heap” 错误
Xmx设置小了。
#生产环境设置,假设内存空间为8G,在 /usr/local/tomcat/logs/catalina.out 在文件头部的注释下面,加入下面的内容:
export JAVA_OPTS=’-server –Xms4096m –Xmx4096m -Xmn256m -XX:PermSize=256m -XX:MaxNewSize=512m -XX:MaxPermSize=512m ’
##Tomcat-Apache整合
##Tomcat-nginx整合
1、复制Tomcat到不同的目录,更改server.xml等配置文件
2、部署不停应用实例到webapps目录下或直接将多项目部署到同一Tomcat实例中
1、安装jdk与tomcat包
[root@node2 ~]# yum install jdk-8u144-linux-x64.rpm -y
[root@node2 ~]# tar xf apache-tomcat-8.5.63.tar.gz -C /usr/locala/
2、将tomcat复制分成两个程序目录
[root@node2 ~]# cd /usr/local/
[root@node2 local]# mv apache-tomcat-8.5.63/ tomcat1
[root@node2 local]# cp -a tomcat1 tomcat2
3、修改其中一个tomcat的配置文件中的端口号
[root@node2 tomcat2]# vim conf/server.xml
"8015" shutdown="SHUTDOWN">
"8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
4、启动服务
[root@node2 local]# /usr/local/tomcat1/bin/startup.sh
[root@node2 local]# /usr/local/tomcat2/bin/startup.sh
5、关闭防火墙
[root@node2 tomcat]# systemctl stop firewalld.service
6、测试: