Tomcat服务配置

1.Tomcat简介

Apache软件基金会的Jakarta项目中的一个核心项目,是一个免费开源代码的web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,处理jsp,html格式的网页页面(包括手机页面),处理静态html页面的能力不如nginx,Apache服务器

2. tomcat安装

2.1 软件准备

JDK下载:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Tomcat下载:
http://tomcat.apache.org/

2.2 部署Java环境jdk

2.2.1 jdk介绍:

  • JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
  • SE(JavaSE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
  • EE(JavaEE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。从2018年2月26日开始,J2EE改名为Jakarta EE

###2.2.2 jdk部署
#jkd解压安装
tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_60 /usr/local/jdk

#配置java环境变量(配置后,会有jar命令)
tail -3 /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export CLASSPATH=. C L A S S P A T H : CLASSPATH: CLASSPATH:JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

#让java环境变量立刻生效
source /etc/profile

#查询命令,版本成功才算部署成功
which java
java -version
#例如:
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

2.3 安装Tomcat

#解压安装Tomcat
tar xf apache-tomcat-8.0.27.tar.gz -C /usr/local/
ln -s /usr/local/apache-tomcat-8.0.27/ /usr/local/tomcat

#配置Tomcat环境变量
echo 'export TOMCAT_HOME=/usr/local/tomcat' >> /etc/profile
source /etc/profile

#对jdk及Tomcat安装目录递归授权root
chown -R root.root /usr/local/jdk/ /usr/local/tomcat/

2.4 Tomcat目录介绍

2.4.1 /usr/local/tomcat/

├── bin         #用以启动,关闭Tomcat或者其他功能的脚本(.bat文件和.sh文件)
├── conf        #用以配置Tomcat的XML及DTD文件
├── lib         #存放web应用能访问的JAR包
├── LICENSE
├── logs        #Catalina和其他Web应用程序的日志文件,tomcat本身的日志文件是catalina.out
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp        #临时文件
├── webapps     #Web应用程序根目录/网页目录
└── work        #用以产生有JSP编译出的Servlet的.java和.class文件

2.4.2 webapps目录

├── docs            #tomcat帮助文档
├── examples        #web应用实例
├── host-manager    #管理
├── manager         #管理
└── ROOT            #默认网站根目录,将程序放在此目录下,也可加载至内存

2.5 测试tomcat安装是否成功

#启动服务,查看端口信息
/usr/local/tomcat/bin/startup.sh
ss -antup | grep java
#出现8080,8005,8009属于正常
#然后关闭服务,开始配置虚拟主机
/usr/local/tomcat/bin/shutdown.sh

3. 虚拟主机配置及配置文件详解

3.1 tomcat主配置文件server.xml

3.1.1 Server.xml结构,组件

<server>    #表示一个运行与JVM中的tomcat实例,在这里可以指定接收关闭tomcat服务指令“SHUTDOWN”的端口,一般要做修改,避免恶意破坏
    <service>       #服务,将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine
    <connector />   #接收用户请求,类似监听端口,多个端口可推送至同一虚拟主机
    <engine>        #默认引擎为catalina,通过connector接收请求并处理,可在此行设置默认虚拟主机
    <host>          #可看做是httpd中的虚拟主机,可配置多个可指定网页根目录
    <context></context>     #容器类组件
    </host>
    ......
    </engine>
    </service>
</server>

3.3.2 配置文件详解

  • server组件:最顶级组件,代表整个容器,相当于整个tomcat软件,port指定Tomcat监听shutdown命令端口,该端口需要做修改,为了安全
  • service组件:相当于JVM,是容器类组件,包含其他组件
  • connector组件:可指定port监听端口来接收请求,protocol指定连接器使用的协议,支持http与AJP,默认两个协议都开一个端口,一般不用AJP,注释掉<!-- *** -->
  • engine组件:容器组件,默认引擎为catalina,defaultHost指定默认虚拟主机
  • host组件:容器组件,表示一个虚拟主机,name表示主机名/域名,appBase表示网页根目录,一般为webapps,也可写绝对路径,unpackWARs为true则自动解压war包,否则直接从war文件中运行应用程序,autoDeploy="true"则在tomcat启动时,自动部署此主机

4. web站点部署

4.1 代码上线

两种方式,第一种方式是直接将程序目录放在webapps目录下面。第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面。

4.2 使用war包部署web站点

#将war包拷贝到网页目录,然后启动tomcat(war会自动解压)
cp memtest.war /usr/local/tomcat/webapps/
/usr/local/tomcat/bin/startup.sh 
#使用浏览器访问“域名/memtest/meminfo.jsp”,该文件作用是检查内存

5 多实例部署,集群及反向代理

5.1 单服务器多实例部署

#复制tomcat服务目录
cp -a /usr/local/apache-tomcat-8.0.27 tomcat8_1
cp -a /usr/local/apache-tomcat-8.0.27 tomcat8_2

#修改多实例配置文件,需要注意:每个实例指定不同监听端口,接收SHUTDOWN端口也设置为不同,域名,网页根目录等,分别在22,69,123行
<Server port="8011" shutdown="SHUTDOWN"> 
    <Connector port="8081" protocol="HTTP/1.1"
        <Host name="localhost"  appBase="/data/www/www"

#然后分别启动多实例并检查启动情况
/usr/local/tomcat8_1/bin/startup.sh
/usr/local/tomcat8_2/bin/startup.sh
ss -antup | grep java

5.2 反向代理

#修改nginx配置文件,加入代理的集群资源池,由于tomcat的监听端口不同,需要指定
upstream tomcat_pools {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
    }

#server模块修改,需要指定.jsp主页
server {
    listen       80;
    server_name  localhost;
    location / {
        root   html;
        index  index.jsp index.html index.htm;
        proxy_pass http://tomcat_pools;

6.Tomcat优化

6.1 安全优化

  • 降权启动
    降权的原则就是利用普通用户来启动Tomcat
    (1)将Tomcat程序目录拷贝到普通用户家目录下
    (2)修改家目录下程序的配置文件(启动端口,检测端口等),并重新指定网页根目录路径。
    (3)递归授权拷贝后的Tomcat程序的属主属组为普通用户,使用su命令切换为普通用户启动tomcat
  • 修改接收SHUTDOWN指令的端口
  • 修改接收请求的端口,默认是8080
  • AJP连接端口保护,注释掉
  • 禁用管理端,清空webapps目录下的ROOT目录,或者移走,避免可能的代码漏洞

6.2 性能优化

6.2.1 屏蔽DNS反向查询

  • 在接收请求的connector组件中,在超时参数后,添加enableLookups="false"

6.2.2 JVM调优

6.2.2.1 JVM介绍
  • JVM,java virtual machine,虚拟器,用来运行java代码,而JVM包括两个组成,Class loader类装载器,执行引擎.
  • 类装载器将.class字节码文件中的代码,加载到内存中,再由解释器装换为机器语言,通过执行引擎来执行代码,当代码加载到内存后,就不在向文件获取内容,所以tomcat网页文件有改动,需要重启服务来重新加载代码
  • war包通常都包含两种文件:依赖包文件pom.xml,字节码文件.class,依赖包文件便于类装载器装载代码
  • 综上,tomcat是基于java应用级语言的服务,所以最需要内存的支持,使得代码加载最优
6.2.2.2 优化方案
#优化catalina.sh初始化脚本。在catalina.sh初始化脚本中添加以下代码:
#catalina.sh的路径为:/usr/local/tomcat/bin/catalina.sh
#此行优化代码需要加在脚本的最开始,声明位置。不要放在后边,且“-server”一定要作为第一个参数,在多个CPU时性能更佳

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

7. 企业案例:linux下java/http进程高占用结局案例

  • 问题描述:
    生产环境下某台tomcat7服务器,在刚发布的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。诸如此类问题,请排查!

  • 问题分析:
    (1)程序属于CPU密集型,和开发沟通过,排除此类情况
    (2)程序代码有问题,出现死循环,可能性极大

  • 问题解决:
    (1)开发那边无法排查代码某个模块有问题,从日志上也无法分析得出
    (2)我们可以尝试通过jstack命令来精确定位出现错误的代码段,从而拿给开发排查。

  • 步骤:
    (1)首先查找进程高的PID号(先找到是哪个PID号的进程导致的)
    top -H
    (2)查看这个进程所有系统调用(再找到是哪个PID号的线程导致的)
    strace -p 进程的PID
    (3)如果是Web应用,可以继续打印该线程的堆栈信息(找出有问题的代码块)
    printf "%x\n" 线程的PID
    #将有问题的线程的PID号转换成16进制格式
    jstack 进程的PID | grep 线程PID号的十六进制格式 -A 30 #过滤出有问题的线程的堆栈信息,找出问题代码块,将代码复制发给开发排查

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值