• tomcat安装及使用详解


      常用软件安装及使用目录

    资料链接:https://pan.baidu.com/s/1XOUlneFqt-_1tOLSmc-E1g     网盘分享的文件在此

    1. Tomcat简介

    Tomcat是一个web服务器

    web服务器:httpdnginx

    web 处理静态文件:html cssjsjpgpng

    Tomcat 处理 html文件

    php软件解析php文件

    jdk处理jsp文件

    tomcat+JDK

    JDK java开发者工具包

    java 写一次,处处使用

    jdk  java虚拟机

    跨平台

    2. tomcat软件版本选择

    生产环境版本和开发协商

    tomcatjdk版本要并行  tomcat8 -- jdk 8  

    3. 安装JDK(以后所有涉及到java应用都需要安装)

    环境 hostname web03   ip 10.0.0.17/172.16.1.17

    mkdir -p /application/tools/

    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
    
    /etc/profile
    source /etc/profile
    java -version

    4. 安装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
    chown -R root.root /application/jdk/ /application/tomcat/
    /application/tomcat/bin/version.sh

    5. 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
    ├── lib
    ├── LICENSE
    ├── logs 日志目录  catalina.out tomcat实时日志
    ├── NOTICE
    ├── RELEASE-NOTES
    ├── RUNNING.txt
    ├── temp
    ├── webapps  站点目录
    └── work
    7 directories, 4 files
    6. 启动关闭tomcat
    /application/tomcat/bin/startup.sh
    /application/tomcat/bin/shutdown.sh
    netstat -tunlp|grep java

    访问http://10.0.0.17:8080/  

    冒号中文无法显示

    6、遇到tomcat启动慢的问题:

    1.现象

    CentOS7启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的。TocmatSession ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥。为了提高安全性Tomcat在启动的时候会通过随机生成一个密钥。

    22-Apr-2017 19:33:07.623 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of

     SecureRandom instance for session ID generation using [SHA1PRNG] took [55,507] milliseconds.

    22-Apr-2017 19:33:07.653 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web appli

    cation directory /application/apache-tomcat-8.0.27/webapps/ROOT has finished in 55,935 ms

    主要原因是生成随机数的时候卡住了,导致tomcat启动不了。

    是否有足够的熵来用于产生随机数,可以通过如下命令来查看

    [root@oldboy tools]# cat /proc/sys/kernel/random/entropy_avail

    为了加速/dev/random提供随机数的速度,你可以通过操作设备的外设,让其产生大量的中断(如网络传输数据,按键,移动鼠标,在命令行敲几个不同的命令,俗称聚气。

    cat /dev/random 会消耗能量

    方法1

    vim $JAVA_HOME/jre/lib/security/java.security

    securerandom.source=file:/dev/random

    改为

    securerandom.source=file:/dev/urandom

    方法2

    vim $TOMCAT_HOME/bin/catalina.sh

    if [[ "$JAVA_OPTS" != *-Djava.security.egd=* ]]; then

        JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"

    fi

    这个系统属性egd表示熵收集守护进程(entropy gathering daemon)

    方法3:(推荐)

    yum install rng-tools # 安装rngd服务(熵服务,增大熵池)

    systemctl start rngd  # 启动服务

    7. tomcat 管理功能

    vim /application/tomcat/conf/tomcat-users.xml
    [root@web03 webapps]# tail -4 /application/tomcat/conf/tomcat-users.xml
    <role rolename="manager-gui"/>
    <role rolename="admin-gui"/>
    <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
    </tomcat-users>
    /application/tomcat/bin/shutdown.sh
    /application/tomcat/bin/startup.sh

    从管理网页可以上传war包,因为是root用户,别人可以上传木马病毒,所以不安全,不建议生产环境使用web界面,不建议公网访问web界面,不安全。测试环境可以给开发使用,省事

    http://10.0.0.17:8080/memtest/meminfo.jsp

    8.Tomcat主配置文件

    vim /application/tomcat/conf/server.xml
    #三个端口
        <Server port="8005" shutdown="SHUTDOWN"> 
    #将shutdown 传给8005会直接停掉tomcat,不安全,可以改掉SHUTDOWN这个默认口令
    #echo shutdown|nc 10.0.0.17 8805
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    
        <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" 
    
    />-->

    9. 自定义url规则(nginx location

    cp /application/tomcat/conf/server.xml{,.ori}
    cp /application/tomcat/conf/server.xml{,.ori}
    
    vim /application/tomcat/conf/server.xml +125
    
    <Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>
    
    <Context path="/40team" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>
    
    /application/tomcat/bin/shutdown.sh
    /application/tomcat/bin/startup.sh

    访问并测试:http://10.0.0.17:8080/meminfo.jsp

    http://10.0.0.17:8080/

    http://10.0.0.17:8080/40team/meminfo.jsp

    # 相当于nginx server root html;

    =============

    nginx  location

    root html

    location   /

    location  /oldboy/

    {

      root /data/oldboy/

    }

    =====

          <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

    <Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

    <Context path="/40team" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

    1应该是虚拟主机 ,2是默认站点目录,不建议直接修改站点目录,想让服务器访问指定目录可以用类似nginxlocation的功能,如下。34war包在站点目录下自动解压的配置   5是相当于locationp匹配/,后面6是相当于 root  html; 即是访问的目录。7是访问这个目录时自动定位到目录8去,由此可以知道,访问的目录并不一定是真实存在的,有可能是重定位的,这样一来,站点目录结构的安全性能够得到加强,

    比较差别:

    diff /application/tomcat/conf/server.xml{,.ori}

    10. 搭建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';

    上传jpresswar到站点目录/application/tomcat/webapps  下,由于tomcat主配置文件设置,他会自动解压war包,当然只要解压包目录还在,内容无论有没有,就不会重新解压

    访问目录 http://10.0.0.17:8080/jpress-web-newest/

    /application/tomcat/bin/shutdown.sh
    /application/tomcat/bin/startup.sh

    首页:  http://10.0.0.17:8080/jpress-web-newest/
    管理页:  http://10.0.0.17:8080/jpress-web-newest/admin

    jpress bug,要先启数据库,不然tomcat的日志会在开机时一直报错,然后过一段时间磁盘空间全被填满

    mv jpress-web-newest/* /tmp/jpress

    11.参考资料

    JAVA企业级应用TOMCAT实战   http://blog.oldboyedu.com/java-tomcat/ 

    原文链接:http://www.zyops.com/java-tomcat

    1. Tomcat多实例

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

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

    cd /application/tools/
    tar xf apache-tomcat-8.0.27.tar.gz
    cp -a apache-tomcat-8.0.27 tomcat8_1
    cp -a apache-tomcat-8.0.27 tomcat8_2
    sed -i 's#8005#8011#;s#8080#8081#' tomcat8_1/conf/server.xml
    sed -i 's#8005#8012#;s#8080#8082#' tomcat8_2/conf/server.xml
    diff tomcat8_1/conf/server.xml tomcat8_2/conf/server.xml

    # 将多实例tomcat模板打包备用

    tar zcf muti_tomcat8.tar.gz ./tomcat8_1 ./tomcat8_2
    cp -a tomcat8_1 tomcat8_2 /application/
    
    /application/tomcat8_1/bin/startup.sh
    /application/tomcat8_2/bin/startup.sh
    
    netstat -tunlp|grep java

    # 将每个实例的网页差异化

    echo 8081 >>/application/tomcat8_1/webapps/ROOT/index.jsp 
    echo 8082 >>/application/tomcat8_2/webapps/ROOT/index.jsp 

    2. Tomcat反向代理集群

    nginx反向代理:LNMP机器  tomcat

    Nginx + LNMP机器

    upstream server_pools{
       server 10.0.0.7:80;
       server 10.0.0.8:80;
    }

    server {

    ……

       location /{

       ……

         proxy_pass http://server_pools;

       }

    }

    Nginx + Tomcat

    upstream server_pools{

       server 10.0.0.17:8081;

       server 10.0.0.17:8082;

       server 10.0.0.18:8081;

       server 10.0.0.18:8082;  

    }

    server {

    ……

       location /{

       ……

         proxy_pass http://server_pools;

       }

    }

    CentOS6 CentOS7 融合

    # CentOS6lb01操作

    mv /application/nginx/conf/nginx.conf{,.ori}
    egrep -v '#|^$' /application/nginx/conf/nginx.conf.default  > /application/nginx/conf/nginx.conf

     

    [root@lb01 ~]# cat /application/nginx/conf/nginx.conf
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
        upstream web_pools {
            server 10.0.0.17:8081;
            server 10.0.0.17:8082;
        }
        server {
            listen       80;
            server_name  localhost;
            location / {
                 root   html;
                 index  index.jsp index.html index.htm;
             proxy_pass http://web_pools;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

    3. Tomcat监控

    jps -lvm   

    排除tomcat故障步骤:

    a. 查看catalina.out

    b. sh show-busy-java-threads.sh       ============       

    远程监控tomcat

    windows软件监控            先安装Java C:Program FilesJavajdk1.8.0_31in

    zabbix 监控

    3.1 tomcat开启远程监控功能

    vim /application/tomcat8_1/bin/catalina.sh +97
    
    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=10.0.0.17"
    
    echo "10.0.0.17 web03" >>/etc/hosts
     
    /application/tomcat8_1/bin/shutdown.sh 
    /application/tomcat8_1/bin/startup.sh 
    netstat -tunlp|grep 12345

     

    右击

    3.2 zabbix监控tomcat

    3.2.1 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

    sed -e 可以执行多条命令,a后面不能用;会被当成字符加进去的

    zabbix c ,tomcat java ,javagateway 翻译官

    3.2.2 安装zabbix_java_gateway(java程序),也需要jdkopenjdk)  (做1次)

    yum  install zabbix-java-gateway
    systemctl start zabbix-java-gateway.service 
    netstat -tunlp|grep java

    需要zabbix安装源的

    3.2.3 tomcat需要开启远程监控功能  (每一个实例都要做)

    4. Tomcat优化

    4.1 安全优化

    关闭端口保护     8005  SHUTDOWN

    ajp连接端口保护  8009 注释

    禁用管理端     ###webapps的内容全移走,再建一个ROOT目录

    降权启动  降低用户权限启动

    [root@web03 ~]# pkill java
    [root@web03 ~]# useradd tomcat
    [root@web03 ~]# cp -a /application/tools/tomcat8_1 /home/tomcat/
    [root@web03 ~]# chown -R tomcat.tomcat /home/tomcat/tomcat8_1/
    [root@web03 ~]# su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat
    Using CATALINA_BASE:   /home/tomcat/tomcat8_1
    Using CATALINA_HOME:   /home/tomcat/tomcat8_1
    Using CATALINA_TMPDIR: /home/tomcat/tomcat8_1/temp
    Using JRE_HOME:        /application/jdk
    Using CLASSPATH:       /home/tomcat/tomcat8_1/bin/bootstrap.jar:/home/tomcat/tomcat8_1/bin/tomcat-juli.jar
    Tomcat started.
    [root@web03 ~]# ps -ef|grep tomcat

    4.2 性能优化   ###瓶颈主要不在cpu,而是内存

    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"

    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms800m -Xmx800m -XX:NewSize=400m -XX:MaxNewSize=400m -XX:PermSize=400m -XX:MaxPermSize=400m"

    下策:加足够大的内存

    下下策:每天0点定时重启tomcat

    vim /home/tomcat/tomcat8_1/bin/catalina.sh +97
    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms800m -Xmx800m -XX:NewSize=400m -XX:MaxNewSize=400m -XX:PermSize=400m -XX:MaxPermSize=400m"
    su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcat
    su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat
  • 相关阅读:
    【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】
    【提问解答】2017-10-18--如果你有什么问题,可以分享出来,让我帮你一起解决=_=
    【sublime Text】sublime Text3安装可以使xml格式化的插件
    【IntelliJ IDEA】idea上安装Translation插件后,需要AppKey才能生效的解决方案
    【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
    【sublime Text】关闭sublime的更新提醒和激活提醒
    【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
    【spring boot】4.spring boot配置多环境资源文件
    java多线程断点下载原理(代码实例演示)
    Google Chrome Developer Tools
  • 原文地址:https://www.cnblogs.com/machangwei-8/p/10421422.html
Copyright © 2020-2023  润新知