• 部署Java和Tomcat


    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 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export 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 '123456';
    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="0" 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 FilesJavajdk1.8.0_31in

    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
  • 相关阅读:
    Mac部署hadoop3.2.1(伪分布式) ,Hadoop自带的MapReduce程序(wordcount),,,,安装scala,hadoop安装启动问题,Pyspark开发环境搭建,MAC Spark安装和环境变量设置
    使用objdump objcopy查看与修改符号表
    alias, bg, bind, break, builtin, caller, cd, command,
    virtualbox端口转发
    CMake快速入门教程-实战
    内存管理
    http调试工具,linux调试工具
    CSS Background
    RadioButton的check改变的时候
    Docs-->.NET-->API reference-->System.​Web.​UI.​Web​Controls-->Repeater
  • 原文地址:https://www.cnblogs.com/yxiaodao/p/10545021.html
Copyright © 2020-2023  润新知