Tomcat介绍

Tomcat服务器是一个免费的开放源代码的Web应用服务器,
在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP网页的首选。 Tomcat和Nginx、Apache(httpd)、lighttpd等Web服务器一样,
具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,
独立的Servlet容器是Tomcat的默认模式。
不过,Tomcat处理静态HTML的能力不如Nginx/Apache服务器。 目前Tomcat最新版本为9.0。Java容器还有resin、weblogic等。
Tomcat官网:http://tomcat.apache.org/

常见的JAVA应用架构模型

tomcat处理JSP动态,还需要nginx处理静态的,要动静分离

JVM是tomcat中的核心

JVM介绍

JVM是Java Virtual Machine(Java虚拟机)的缩写。实现程序可移植

只要有JVM,就可以运行java程序,而JVM可以在任何系统运行
Java的特性:一次编译,到处运行
类比Vmware WorkStation的Linux系统

JDK(Java 语言的软件开发工具,包含JVM)种类:

  • Oracle JDK:商业软件
  • openjdk:开源软件

环境准备以及软件选择

从CentOS7模板机全新克隆2台新主机
  第1台:IP规划为10.0.0.17/172.16.1.17,主机名为web03
  第2台:IP规划为10.0.0.18/172.16.1.18,主机名为web04
准备好lb01(CentOS6),需要其上的nginx反向代理功能
创建目录/server/tools
将apsche-comcat和jdk上传到web服务器中/server/tools
注:jdk和Tomcat的版本对运维来说没什么区别,安装方法高度一致。

下载软件

mkdir -p /server/tools
cd /server/tools 下载comcat wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz 下载jdk https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html

安装JDK

创建目录/application
重要提示:所有涉及到java应用都需要安装 tar xf jdk-8u60-linux-x64.tar.gz -C /application/
ln -s /application/jdk1.8.0_60 /application/jdk
sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
source /etc/profile # 让环境变量生效 java -version # 查看是不是安装好了 # 注意:用echo想文件中添加多行的时候忙不解析内容中的$ 要使拥‘EOF,上面也可以用这种方法

安装Tomcat

tar xf apache-tomcat-8.0.27.tar.gz -C /application/
ln -s /application/apache-tomcat-8.0.27 /application/tomcat
echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile
source /etc/profile
# 有一个坑,我们正常解压出来的文件是属于root的,但是有的时候会显示成数字,表示用户不存在
chown -R root.root /application/jdk/ /application/tomcat/ /application/tomcat/bin/version.sh # 显示版本和系统配置

Tomcat目录结构说明

[root@web03 tools]# cd /application/tomcat/
[root@web03 tomcat]# tree -L 1
.
├── bin #命令 startup.sh shutdown.sh catalina.sh(核心)
├── conf # server.xml(主配置文件) tomcat-users.xml(配置外部页面管理tomcat)
├── lib 库文件,插件和功能
├── LICENSE
├── logs # 日志目录 catalina.out tomcat实时日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp
├── webapps # 站点目录
└── work 工作目录 7 directories, 4 files

目录中的文件中的bat是windows中用的,sh是Linux中用的

启动和关闭tomcat

/application/tomcat/bin/startup.sh
/application/tomcat/bin/shutdown.sh
启动后,可以查看日志
tail -f /application/tomcat/logs/catalina.out netstat -tunlp|grep java 不要输成tomcat 在浏览器中输入http://10.0.0.17:8080/
# 关闭的时候,要检查端口和进程都没有了,才是真的关闭了
# 否则在重新启动的时候,会启动几个一样的进程,会报错
ss -lntup|grep jave
ps -ef |grep java

查看日志目录

通过md5 和 diff 对比catalina.20xx-xx-xx 和 catalina.out 发现这两个日志中的内容是一样的

查看日志,读懂日志
/application/tomcat/logs
catalina.out # 实时记录tomcat运行信息,文件会越来越大,定时清空
catalina.时间.log # catalina.out文件每天的日志切割文件 # 每个站点访问日志
host-manager.时间.log 管理主机操作日志
localhost_access_log.时间.txt 访问日志
localhost.时间.log 访问日志
manager.时间.log 管理日志

Tomcat在CentOS7启动慢的原因

查看实时日志,发现原因是生成随机数的时候卡住了,导致tomcat启动慢。

是否有足够的熵来用于产生随机数,可以通过如下命令来查看
[root@oldboy tools]# cat /proc/sys/kernel/random/entropy_avail
7
为了加速/dev/random提供随机数的速度,你可以通过操作设备的外设,
让其产生大量的中断(如网络传输数据,按键,移动鼠标,在命令行敲几个不同的命令,俗称聚气。
cat /dev/random 会消耗能量 yum install rng-tools # 安装rngd服务(熵服务,增大熵池)
systemctl start rngd # 启动服务

tomcat 管理功能(测试环境使用)

生产环境不要开启这个功能

[root@web03 webapps]# tail -4 /application/tomcat/conf/tomcat-users.xml
到文件最后添加下面内容
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<role rolename="host-gui">
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui,host-gui"/>
</tomcat-users> /application/tomcat/bin/shutdown.sh
ss -lntup|grep jave
ps -ef |grep java
/application/tomcat/bin/startup.sh

在web页面中点击管理按钮,输入账号密码,默认都是tomcat

搭建Jpress

类似wordpess博客站点
环境:Linux Tomcat JDK MySQL(Mariadb) yum -y install mariadb-server
systemctl start mariadb.service mysql
create database jpress DEFAULT CHARACTER SET utf8;
grant all on jpress.* to jpress@'localhost' identified by '';
grant all on jpress.* to jpress@'172.16.1.%' identified by '123456';
flush privileges;
# 可以连接另一台的mysql,只需要有命令文件即可,没有可以推一个或者拉一个过来
# 是为了避免重复安装
[root@web04 ~]# mysql -ujpress -p123456 -h 172.16.1.17 上传jpress-web-newest.war到/application/tomcat/webapps目录,过一会自动节解压了
这是自动部署的功能,可以在日志中看到信息
http://10.0.0.17:8080/jpress-web-newest/
网页安装
跟着向导走,因为没有启动数据库服务器,暂时就使用本地服务器了

jpress不会自动重启,需要手动重启tomcat

[root@web03 webapps]# /application/tomcat/bin/shutdown.sh

[root@web03 webapps]# ss -lntup|grep java
[root@web03 webapps]# ps -ef |grep java
#确保没有残留的进程,有就杀掉pkill java #重新启动 [root@web03 webapps]# /application/tomcat/bin/startup.sh #浏览器显示博客页面,部署成功 http://10.0.0.17:8080/jpress-web-newest/admin/login需要输入admin才能登陆 # 输入刚刚设置的账号密码,登陆,就可以发布文章了

Tomcat主配置文件介绍

文件位置/application/tomcat/conf/server.xml

    <Server port="8005" shutdown="SHUTDOWN">
  # 向8005端口发送SHUTDOWN 就关闭了tomcat <Connector port="8080" protocol="HTTP/1.1"
  # 默认的访问端口,
connectionTimeout="20000" 单位是毫秒
redirectPort="8443" /> 和http配置有关 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  # 用来和apache通信 ,我们后面用nginx,可以不用管   # Host中的内容 就是虚拟主机
       <Host name="localhost"  appBase="webapps"
149             unpackWARs="true" autoDeploy="true">
150
151         <!-- SingleSignOn valve, share authentication between web applications
152              Documentation at: /docs/config/valve.html -->
153         <!--
154         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
155         -->
156
157         <!-- Access log processes all example.
158              Documentation at: /docs/config/valve.html
159              Note: The pattern used is equivalent to using pattern="common" -->
160         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
161                prefix="localhost_access_log" suffix=".txt"
162                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
163
164       </Host>
详细说明:http://blog.oldboyedu.com/java-tomcat/

现在来简化一下我们的访问路径

将http://10.0.0.17:8080/jpress-web-newest 改为http://10.0.0.17:8080/jpress

在配置文件中加上下面这行,记在Host标签内部

<Context path="/jpress" 
docBase="/application/tomcat/webapps/jpress-web-newest"
debug="" reloadable="false" crossContext="true"/>

重启后访问http://10.0.0.17:8080/jpress。确保都关闭了

访问成功!

Tomcat多实例

多虚拟主机:nginx 多个Server标签(域名,ip,端口),进程数量固定 master+worker

多实例(多进程):同一个程序启动多次,分为两种情况:
第一种:一台机器跑多个站点;
第二种:一个机器跑一个站点多个实例,配合负载均衡

应用场景:一台服务器部署多个网站,启动多个tomcat程序

再将tomcat复制两份

[root@web03 tools]# tar xf apache-tomcat-8.5.38.tar.gz
[root@web03 tools]# cp apache-tomcat-8.5.38 tomcat_1 -a
[root@web03 tools]# cp apache-tomcat-8.5.38 tomcat_2 -a
#修改端口
[root@web03 tools]# sed -i "s#8005#8006#g" tomcat_1/conf/server.xml
[root@web03 tools]# sed -i "s#8080#8081#g" tomcat_1/conf/server.xml
[root@web03 tools]# sed -i "s#8009#8010#g" tomcat_1/conf/server.xml [root@web03 tools]# sed -i "s#8005#8007#g" tomcat_2/conf/server.xml
[root@web03 tools]# sed -i "s#8080#8082#g" tomcat_2/conf/server.xml
[root@web03 tools]# sed -i "s#8009#8011#g" tomcat_2/conf/server.xml
#移动到application下 [root@web03 tools]# mv tomcat_* /application/
#启动! [root@web03 tools]# /application/tomcat_1/bin/startup.sh
[root@web03 tools]# /application/tomcat_2/bin/startup.sh
#创建测试文件!在webapps/ROOT 是默认的访问目录
[root@web03 tools]# echo default-8080 >/application/tomcat/webapps/ROOT/index.jsp
[root@web03 tools]# echo default-8081 >/application/tomcat_1/webapps/ROOT/index.jsp
[root@web03 tools]# echo default-8082 >/application/tomcat_2/webapps/ROOT/index.jsp 浏览器访问:http://10.0.0.17:8080/ http://10.0.0.17:8081/ http://10.0.0.17:8082/

Tomcat反向代理集群

# 在CentOS6的lb01操作
mv /application/nginx/conf/nginx.conf{,.ori}
egrep -v '#|^$' /application/nginx/conf/nginx.conf.default > /application/nginx/conf/nginx.conf cat /application/nginx/conf/nginx.conf
……
upstream web_pools {
server 10.0.0.17:8081;
server 10.0.0.17:8082;
}
……
location / {
root html;
index index.jsp index.html index.htm;
proxy_pass http://web_pools;
}

Tomcat监控

1、Tomcat自带函数检测:meminfo.jsp(不建议使用)
  将函数写入文件,在浏览器访问?
2、jps命令:jdk包带的命令,jps主要用来输出JVM中运行的进程状态信息。
语法格式:jps [options] [hostid]
如果不指定hostid就默认为当前主机或服务器。
参数说明:
-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全名
-v 输出传入JVM的参数 jps -lvm #→快速获取Java进程的pid,不用ps和grep
3、jstack:主要用来查看某个Java进程内的线程堆栈信息。
jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,
所以它在JVM性能调优中使用得非常多。 排除tomcat故障步骤
a. 查看catalina.out
b. sh show-busy-java-threads.sh
4、jconsole和jvisualvm
这是windows安装完jdk后的图形监控工具。
C:\Program Files\Java\jdk1.8.0_31\bin

tomcat开启远程监控

vim /application/tomcat8_1/bin/catalina.sh +97 修改文件第97行,版本不同行数也会不同
# OS specific support.  $var _must_ be set to either true or false.在这一行之前
#加上下面的代码
CATALINA_OPTS="$CATALINA_OPTS # 额外的参数
-Dcom.sun.management.jmxremote # 开启远程监控
-Dcom.sun.management.jmxremote.port=12345 # 监控功能的端口
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=172.16.1.17" # 监听的IP 要用内网,这个功能还是很危险的
# 主机名解析
echo "172.16.1.17 web03" >>/etc/hosts /application/tomcat8_1/bin/shutdown.sh
/application/tomcat8_1/bin/startup.sh
netstat -tunlp|grep 12345

java不是通过安装zabbix agent 来开启客户端监控的

而是用java-gateway,在zabbix服务器上安装

第一步:Zabbix Server 需要开启java监控功能(做1次)
sed -i -e '220a JavaGateway=127.0.0.1' -e '236a StartJavaPollers=5' /etc/zabbix/zabbix_server.conf
systemctl restart zabbix-server.service 第二步:安装zabbix_java_gateway(java程序),也需要jdk(openjdk) (做1次)
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum -y install zabbix-java-gateway
systemctl start zabbix-java-gateway.service
netstat -tunlp|grep java

在http://10.0.0.61/zabbix/的WEB页面上添加主机
移除agent代理
添加JMX接口
第三步:Tomcat需要开启远程监控功能 (每一个实例都要做)

Tomcat安全优化

关闭端口保护     8005  SHUTDOWN
ajp连接端口保护 8009 注释
禁用管理端
降权启动:降低用户权限启动
pkill java
useradd tomcat
cp -a /application/tools/tomcat8_1 /home/tomcat/
chown -R tomcat.tomcat /home/tomcat/tomcat8_1/
su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat

更详细的优化查看文档,点击下载

Tomcat性能优化

tomcat性能取决于你的内存大小。

上策:优化代码
中策:jvm优化机制--垃圾回收机制,把不需要的内存回收
优化jvm--优化垃圾回收策略
优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码:
#tomcat分配1G内存模板
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" 下策:加足够大的内存
下下策:每天0点定时重启tomcat

部署Java和Tomcat的更多相关文章

  1. Linux部署java和tomcat的运行环境

    Linux部署java和tomcat的运行环境 1.上传下载的jdk的rpm包和tomcat的tar包,我是放到/opt目录了,文件直接去官网下载即可. 2.如果之前安装过其他版本的jdk,最好先现在 ...

  2. 如何在tomcat中如何部署java EE项目

    如何在tomcat中如何部署java EE项目 1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法.2.在tomcat安 ...

  3. 阿里云部署Java web项目初体验(转)/linux 上配置jdk和安装tomcat

    摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在阿里云上部署Java web项目. 一.准备工作 购买了阿里云的云解析,和云服务器ecs. 2.下载put ...

  4. 【转】Tomcat中部署java web应用程序

    http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...

  5. 在Tomcat中部署Java Web应用程序

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  6. tomcat部署java项目

    tomcat部署java项目 1.启动tomcat 进入到tomcat安装目录下的bin #cd /opt/tomcat/bin #./startup.sh // 执行重启命令 2.重建一个新目录导入 ...

  7. RedHat Linux 5.5安装JDK+Tomcat并部署Java项目

    与大家分享下RedHat Linux 5.5安装JDK+Tomcat并部署Java项目的步骤,希望对大家有用. 1.下载并安装jdk 虚拟机中安装RedHat Linux 5.5 64位企业版, 这里 ...

  8. 在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  9. CentOS7下 Java、Tomcat、MySQL、Maven热部署

    本文介绍了CentOS7 64位下Java.Tomcat.MySQL.Maven热部署等服务器环境的搭建和调试过程. 学生服务器资源获取方法: 云+校园计划 - 腾讯云 阿里云云翼计划 github ...

随机推荐

  1. 从锅炉工到AI专家(1)

    序言 标题来自一个很著名的梗,起因是知乎上一个问题:<锅炉设计转行 AI,可行吗?>,后来就延展出了很多类似的问句,什么"快递转行AI可行吗?"."xxx转行 ...

  2. TypeScript 素描 - 高级类型、迭代器

    /* 交叉类型,在TypeScrpt中是很特有的.所以值得认真学习 交叉类型是将多个类型合并为一个类型,这让我们可以把现有的多种类型叠加到一起成为一种 类型 交叉类型同时拥有 Person 和 Emp ...

  3. API网关模式

    什么是网关 网关一词来源于计算机网络中的定义,网关(Gateway)又称网间连接器.协议转换器.网关的准确定义是: 两个计算机程序或系统之间的连接,网关作为两个程序之间的门户,允许它们通过不同计算机之 ...

  4. Jenkins持续集成01—Jenkins服务搭建和部署

    一.介绍Jenkins 1.Jenkins概念 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Je ...

  5. Spring Boot 2.x(六):优雅的统一返回值

    目录 为什么要统一返回值 ReturnVO ReturnCode 使用ReturnVO 使用AOP进行全局异常的处理 云撸猫 公众号 为什么要统一返回值 在我们做后端应用的时候,前后端分离的情况下,我 ...

  6. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(3)- KBOOT配置(FOPT/BOOT Pin/BCA)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT配置. KBOOT是支持配置功能的,配置功能可分为两方面:一.芯片系统的启动配置:二.KBO ...

  7. web缓存策略之HTTP缓存大全

    一. web缓存总分类 数据库数据缓存 Web应用,特别是SNS类型的应用,往往关系比较复杂,数据库表繁多,如果频繁进行数据库查询,很容易导致数据库不堪重荷.为了提供查询的性能,会将查询后的数据放到内 ...

  8. 浅谈cookie和session

    Cookie简介 Cookie(复数形态Cookies),中文名称为“小型文本文件”,指某些网站为了辨别用户身份或存储用户相关信息而存储在用户本地终端(Client Side) 上的数据(通常为加密数 ...

  9. 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅

    <一统江湖的大前端>系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你真的是有 ...

  10. 分享PowerDesigner使用的设置

    用PowerDesigner比较直观, 方便管理,修改数据库,分享 Oracle的逆向工程,和模型图的显示设置 https://blog.csdn.net/u011781521/article/det ...