一: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版本相对应。