zoukankan      html  css  js  c++  java
  • Tomcat 常规配置并通过zabbix 监控 jvm状态

    一:jdk和tomcat基础

    apache有两种方式运行php,一是使用模块,二是使用fastcgi

    nginx也可以通过fastcgi处理动态请求,也可以转发至tomcat

    tomcat监控主要是监控JVM,优化主要是外部和内部,内部的有最大空闲,最小空闲等

    J2EE:java的企业版和嵌入式

    J2SEE:java的标准版

    JME2:手机版的java

    jdk和jre:jdk是一个开发工具包,一般会包含jre,jre仅是一个java运行环境,sdk是一个开发工具 

    tomcat 下载地址:

    http://tomcat.apache.org/download-80.cgi

    jdk下载地址:

    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    二:通过saltstack 批量安装jdk和tomcat,并配置环境变量:

    1、salt客户端:

    yum install salt-minion -y

    vim  /etc/salt/minion

    master: 192.168.10.205 #salt 服务器的地址

    /etc/init.d/salt-minion  start

    2、salt 服务端:

    yum install salt-minion -y

    vim  /etc/salt/master

    file_roots: #指定工作目录
      base:
        - /srv/salt

    cd /srv/

    mkdir salt

    /etc/init.d/salt-master  restart

    salt-key  -A

    cd /srv/salt/

    [root@node5 salt]# mkdir jdk tomcat

    [root@node5 salt]# vim  jdk/install.sls 

    jdk-install:
      file.managed:
        - name: /usr/local/src/jdk-8u77-linux-x64.tar.gz
        - source: salt://jdk/files/jdk-8u77-linux-x64.tar.gz
        - user: root
        - group: root
        - mode: 755 
      cmd.run:
        - name: cd /usr/local/src/ && tar xvf jdk-8u77-linux-x64.tar.gz && mv  jdk1.8.0_77  /usr/local/jdk && chown -R root.root /usr/local/jdk -R 
        - unless: test -d /usr/local/jdk
        - require:
          - file: jdk-install
    
    jdk-conconfig:
      file.append:
        - name: /etc/profile
        - text: 
          - export JAVA_HOME=/usr/local/jdk
          - export PATH=$JAVA_HOME/bin:$PATH
          - export PATH=$TOMCAT_HOME/bin:$PATH

    [root@node5 salt]# mkdir  jdk/files

    [root@node5 salt]# cp  /root/jdk-8u77-linux-x64.tar.gz  jdk/files/

    include:
      - jdk.install
    
    tomcat-install:
      file.managed:
        - name: /usr/local/src/apache-tomcat-8.0.33.tar.gz
        - source: salt://tomcat/files/apache-tomcat-8.0.33.tar.gz
        - user: root
        - group: root
        - mode: 755 
    
      cmd.run:
        - name: cd  /usr/local/src  && tar xvf apache-tomcat-8.0.33.tar.gz && mv    apache-tomcat-8.0.33  /usr/local/tomcat &&  chown -R root.root /usr/local/tomcat
        - unless: test -d /usr/local/tomcat
        - require:
          - file: tomcat-install
    
    tomcat-config:
        file.append:
          - name: /etc/profile
          - text:
            - export TOMCAT_HOME=/usr/local/tomcat

    [root@node5 salt]# mkdir  tomcat/files

    [root@node5 salt]# cp /root/apache-tomcat-8.0.33.tar.gz  tomcat/files/

    [root@node5 salt]# vim top.sls 

    base:
      '*':
        - tomcat.install

    执行即结果:
    [root@node5 salt]#  salt "*" state.highstate

    三:客户端验证:

    server.xml ,对服务和引擎的配置文件:

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" reloadable="true" docBase="/opt/apache-tomcat-6.0.37/webapps/mobile/" />

    tomcat-users.xml web管理,不建议打开:

    [root@node6 tomcat]# vim conf/tomcat-users.xml 

      <role rolename="manager-gui"/>
      <role rolename="admin-gui"/>
      <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

     四:tomcat安全规范:

    1.telnet管理端口保护

    1、<Server port="8005" shutdown="SHUTDOWN">  #将端口和 命令改了,或不启用,因为telnet到本端口可以使用默认SHUTDOWN将tomcat关闭。
    
    #例如:
    [root@node6 tomcat]# ss -tnl | grep 8080 
    LISTEN     0      100                      :::8080                    :::*     
    [root@node6 tomcat]# telnet 127.0.0.1 8005
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'
    SHUTDOWN #会将tomcat服务停止
    Connection closed by foreign host.
    [root@node6 tomcat]# ss -tnl | grep 8080 

     2.ajp连接端口保护

    #更改ajp的端口,在8000-8999之间,如不使用ajp可以禁用

    3.禁用管理端

    #可以删除webapp里面的所有默认目录文件

    4.降权启动

    #使用非root启动tomcat

    5.文件列表访问控制

    #conf/web.conf文件中default部分listing的配置必须为false,false为不能列出目录文件,true为允许,默认为false

    6.版本信息隐藏

    7.server header重写

    #在server.conf中的http部分加入 server=“xxx”,隐藏tomcat包头息信息
    <Connector port="8080" protocol="HTTP/1.1" server="webserver"
     connectionTimeout="20000" redirectPort="8443" />

    8.启停脚本权限回收

    #将启动和关闭的脚本权限改为744

    9.访问日志格式规范

    五:tomcat监控:

    tomcat监控主要是监控jvm,JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

    jps命令:是jdk包里面的,只显示java进程

      -m输出传递给main方法的参数,如果是内嵌的JVM则使出为null
    
      -l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径
    
      -v 输出传给JVM的参数

    jstack:jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:

    如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的

    jstack [ option ] pid
    jstack [ option ] executable core
    jstack [ option ] [server-id@]remote-hostname-or-IP
    
    1)、options: 
    executable Java executable from which the core dump was produced.
    (可能是产生core dump的java可执行程序)
    core 将被打印信息的core dump文件
    remote-hostname-or-IP 远程debug服务的主机名或ip
    server-id 唯一id,假如一台主机上多个远程debug服务 
    2)、基本参数:
    -F当’jstack [-l] pid’没有相应的时候强制打印栈信息
    -l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
    -m打印java和native c/c++框架的所有栈信息.
    -h | -help打印帮助信息
    pid 需要被打印配置信息的java进程id,可以用jps查询.

     JVM 故障排除:

    1、jps获取java进程的PID

    2、jstack $PID >> xx.txt 导出占用CPU比较高的进程线程栈

    3、top -H -p $PID  #查看对应进程的那个线程占用CPU过高

    #这里假如其中一个线程ID 为9235的CPU使用率高

    4、echo  "obase=16;$PID"|bc #将线程较高的的PID转换为16进制并在输出,是因为步骤2是16进制的

    #9235的16进制为2413

    5、在第二步导出的xx.txt中查找转换为16进制的线程PID,找到对应的线程栈

    [root@node6 tomcat]# vim  9213.txt  #找到相对应的16进制2413即可

    6、分析负载较高的线程栈都是什么业务操作,优化程序并处理问题。

     zabbix监控tomcat:

    从Zabbix 2.0开始,软件包中自带了一个用于监控JMX应用的程序,称为"Zabbix Java GateWay",非常方便使用其来监控JMX

    六:tomcat优化:

    外部调优:

    操作系统:

    JVM:

    代理-Nginx:

    内部调优:

    禁用DNS查询:

    调整线程数:

    压缩

    七:通过zabbix监控jmx

    通过java tomcat gateway: zabbix 想知道某主机的java 具体使用情况,需要去zabbix java gateway询问,然后java gateway通过management的API去应用程序查询,然后应用程序需要开启jmx的远程连接,查询到结果之后将结果保存并参会给zabbix server展示,因此zabbix必须要通过java gateway进行协助,zabbix 可以配置启动多个探测进程,默认yum源没有java gateway。

    java gateway可以安装在任何一台机器,即可以不和zabbix server安装在一个主机上。

    如果是使用yum 安装的zabbix执行以下步骤,如果是编译安装的zabbix 跳过此步骤从3开始:

    1、下载安装包,与zabbix server版本一致:

    下载地址:http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/  #注意这是2.2的版本哦,如果你是安装的其他版本,比如2.0的版本,我是不会告诉你把2.2换成2.0就可以下载了的!

    [root@zabbix ~]# wget http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-java-gateway-2.2.9-1.el6.x86_64.rpm
    [root@zabbix ~]# wget  wget http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-2.2.9-1.el6.x86_64.rpm
    [root@zabbix ~]# yum localinstall *.rpm -y

     2、修改配置文件:

    [root@zabbix ~]# grep '^[a-zA-Z]' /etc/zabbix/zabbix_java_gateway.conf 
    LISTEN_IP="0.0.0.0" #监听的IP
    LISTEN_PORT=10052 #监听的端口
    PID_FILE="/var/run/zabbix/zabbix_java.pid" #pid保存路径
    START_POLLERS=5  #这是默认启动的监听jmx的线程数,可以根据监控的jmx数量修改成一致的,这样一次就可采集完成所有的jmx状况

    3、zabbix Server端配置文件:

    JavaGateway=JavaGateway= 127.0.0.1  #java gateway的地址
    JavaGatewayPort=10052
    StartJavaPollers=5

    4、修改tomcat的catalina.sh启动脚本:

    [root@Server1 apache-tomcat-6.0.37]# vim bin/catalina.sh
    CATALINA_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10052 #jmx监听的端口,需要和jmx服务端指定的一直 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.0.201" #tomcat 自己的主机地址

    如果是编译安装的zabbix,请确保编译的时候使用了--enabled-java选项,如果没有开启可以重新编译即可

    5、对编译安装zabbix 并启用了JAVA参数的配置文件进行配置 并启动java脚本:

    [root@zabbix ~]# cd /usr/local/sbin/zabbix_java/
    [root@zabbix zabbix_java]# grep  "^[a-Z]" settings.sh  #配置如下
    LISTEN_IP="0.0.0.0"
    LISTEN_PORT=10052
    PID_FILE="/tmp/zabbix_java.pid"
    [root@zabbix zabbix_java]# ./startup.sh  #启动java监控

    6、分别在tomcat 主机重新启动 tomcat,在zabbix Server重启zabbix

    [root@Server1 bin]# ./catalina.sh  stop && eleep 5 && ./catalina.sh  start 
    [root@zabbix zabbix]# /etc/init.d/zabbix_server restart

    7、导入jmx监控模板:

     zbx_export_templates.xml

     8、在zabbix 管理界面添加对tomcat jmx的监控:

    9、应用模板:

    10、等几分之后,就会有 图了:

    堆内存使用状况:

     线程状态:

    注:在配置过程中,tomcat端只要在catalina.sh里面添加第四步的CATALINA_OPTS参数即可,不需要下载lib包,因为我看网上有的教程还要下载lib包,实际是不需要的。zabbix 端开启java监听的功能,在编译安装的zabbix里面使用--zabbix-java开启,rpm安装的要安装zabbix-java-gateway包,此包要和zabbix server版本相对应。

  • 相关阅读:
    在java中有关于反射的皮毛----自己的简略认知
    在java中异常中的题目---重要的一点
    在一个陌生的环境里学习新的-----单例
    在java开发环境中,快捷键的使用及用法
    指针(一)
    #ifdef、#ifndef、#else、#endif执行条件编译
    oc中的数组
    控制循环结构
    oc中的枚举
    oc中类的实例化及方法调用
  • 原文地址:https://www.cnblogs.com/zhang-shijie/p/5328669.html
Copyright © 2011-2022 走看看