Tomcat 常規配置並經過zabbix 監控 jvm狀態

一:jdk和tomcat基礎php

apache有兩種方式運行php,一是使用模塊,二是使用fastcgihtml

nginx也能夠經過fastcgi處理動態請求,也能夠轉發至tomcatjava

tomcat監控主要是監控JVM,優化主要是外部和內部,內部的有最大空閒,最小空閒等node

J2EE:java的企業版和嵌入式linux

J2SEE:java的標準版nginx

JME2:手機版的javac++

jdk和jre:jdk是一個開發工具包,通常會包含jre,jre僅是一個java運行環境,sdk是一個開發工具 web

tomcat 下載地址:apache

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

jdk下載地址:

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

 

二:經過saltstack 批量安裝jdk和tomcat,並配置環境變量:

一、salt客戶端:

yum install salt-minion -y

vim  /etc/salt/minion

master: 192.168.10.205 #salt 服務器的地址

/etc/init.d/salt-minion  start

 

二、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管理端口保護

一、<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 故障排除:

一、jps獲取java進程的PID

二、jstack $PID >> xx.txt 導出佔用CPU比較高的進程線程棧

三、top -H -p $PID  #查看對應進程的那個線程佔用CPU太高

#這裏假如其中一個線程ID 爲9235的CPU使用率高

四、echo  "obase=16;$PID"|bc #將線程較高的的PID轉換爲16進制並在輸出,是由於步驟2是16進制的

#9235的16進製爲2413

五、在第二步導出的xx.txt中查找轉換爲16進制的線程PID,找到對應的線程棧

[root@node6 tomcat]# vim  9213.txt  #找到相對應的16進制2413便可

六、分析負載較高的線程棧都是什麼業務操做,優化程序並處理問題。

 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開始:

一、下載安裝包,與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

 二、修改配置文件:

[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情況

三、zabbix Server端配置文件:

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

四、修改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選項,若是沒有開啓能夠從新編譯便可

五、對編譯安裝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監控

六、分別在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

七、導入jmx監控模板:

 zbx_export_templates.xml

 八、在zabbix 管理界面添加對tomcat jmx的監控:

九、應用模板:

十、等幾分以後,就會有 圖了:

堆內存使用情況:

 線程狀態:

注:在配置過程當中,tomcat端只要在catalina.sh裏面添加第四步的CATALINA_OPTS參數便可,不須要下載lib包,由於我看網上有的教程還要下載lib包,實際是不須要的。zabbix 端開啓java監聽的功能,在編譯安裝的zabbix裏面使用--zabbix-java開啓,rpm安裝的要安裝zabbix-java-gateway包,此包要和zabbix server版本相對應。

相關文章
相關標籤/搜索