一: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監控模板:
八、在zabbix 管理界面添加對tomcat jmx的監控:
九、應用模板:
十、等幾分以後,就會有 圖了:
堆內存使用情況:
線程狀態:
注:在配置過程當中,tomcat端只要在catalina.sh裏面添加第四步的CATALINA_OPTS參數便可,不須要下載lib包,由於我看網上有的教程還要下載lib包,實際是不須要的。zabbix 端開啓java監聽的功能,在編譯安裝的zabbix裏面使用--zabbix-java開啓,rpm安裝的要安裝zabbix-java-gateway包,此包要和zabbix server版本相對應。