一: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="" 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="" protocol="HTTP/1.1" server="webserver"
connectionTimeout="" redirectPort="" />

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= #监听的端口
PID_FILE="/var/run/zabbix/zabbix_java.pid" #pid保存路径
START_POLLERS= #这是默认启动的监听jmx的线程数,可以根据监控的jmx数量修改成一致的,这样一次就可采集完成所有的jmx状况

3、zabbix Server端配置文件:

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

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

Tomcat 常规配置并通过zabbix 监控 jvm状态的更多相关文章

  1. Security基础(六):部署Zabbix监控平台、配置及使用Zabbix监控系统、自定义Zabbix监控项目、实现Zabbix报警功能

    一.部署Zabbix监控平台 目标: 本案例要求部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 在监控服务器上安装LAMP环境    修改PHP配置文件,满足Zab ...

  2. Zabbix 监控 Nginx 状态

    简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) shell > /usr/local/nginx/sbin/ngi ...

  3. Zabbix 监控 Mysql 状态

    简介: 如何使用 Zabbix 来监控 Mysql 状态 ? Zabbix 有自带监控 Mysql 的模板,但是却不能直接使用.. 需要我们根据模板提供的 Key 自己写脚本获取数据 1.查看都有哪些 ...

  4. zabbix 监控jvm

    tomcat 机器配置: [root@wx03 lib]# pwd /usr/local/apache-tomcat-7.0.55/lib [root@wx03 lib]# ls -ltr *jmx* ...

  5. 四、配置及使用Zabbix监控系统

    要求: 沿用练习- - -,使用Zabbix监控平台监控Linux服务器,实现以下目标:1.监控CPU2.监控内存3.监控进程4.监控网络流量5.监控硬盘 方案:通过Zabbix监控平台,添加被监控z ...

  6. Zabbix 监控端口状态并邮件报警

    Zabbix监控端口 前提 zabbix安装 zabbix邮件报警 添加监控项 添加触发器 添加动作 设置完成后,在配置过报警媒介后也就是 邮件报警  后就完成了.

  7. zabbix 监控TCP状态连接数

    1.zabbix客户端,监控TCP状态脚本,并保存到的定路径.(/usr/local/zabbix-agent/shells) # cat zabbix_linux_plugin.sh #!/bin/ ...

  8. Zabbix监控JVM内存

    上篇最后提到了jstat,jstat可以查看统计JVM内存信息,那么结合Zabbix,就可以监控多实例的JVM内存了. 1.下面两个脚本部署在被监控主机: vm.py 用于JVM实例PID查找,ps命 ...

  9. zabbix监控tcp状态

    Tcp的连接状态对于我们web服务器来说是至关重要的,从TCP的连接状态中可以看出网络的连接情况,服务器的压力情况,对服务器的并发有很好的直观反映:尤其是并发量ESTAB:或者是syn_recv值,假 ...

随机推荐

  1. A Byte of Python 笔记(4)控制流:if、for、while、break、continue

    第6章  控制流 3种控制流语句-- if  for  while 默认pyhon使用ASCII码来解释程序的,默认不支持中文,需要在程序的第一行或者第二行声明编码.官方参考具体参考以下三种方式:1. ...

  2. php不同版本特性记录

    最近在用php开发时项目中遇到了版本问题,特此记录下php不同版本的一些特性记录,以备忘. 一:php5.3中的新特性 1)开始支持命名空间(Namespace) 2)支持延迟静态绑定(Late St ...

  3. IOS 表视图(UITableVIew)的使用方法(6)表视图的编辑功能(新增Add)

    表视图的新增功能和删除功能虽然目的不同,但是工作流程是相似的 下面列出在处理新增的回调函数时,与删除所不同的逻辑部分代码. 显示下过如下: #pragma mark #pragma mark Tabl ...

  4. Qt中QFtp获取带有中文的文件名称出现乱码的解决方法(执行操作前就转换编码)

    今天研究了一下QFtp这个类,发现访问得到的文件名称中一旦出现中文,不管怎么转换编码格式,最终显示出来的始终都是乱码.由于编码错误,我写了两个函数用于互相转换编码. 一个是由正常编码转为QFTP上所谓 ...

  5. 调色板QPalette类用法详解(附实例、源码)(很清楚:窗口背景色 前景色 按钮的颜色 按钮文本的颜色 )

    http://blog.csdn.net/rl529014/article/details/51589096

  6. python2.6升级到2.7

    开发部需要使用python2.7,由于公网的环境python版本都是系统自带的,版本是2.6,需要升级,最好是通过RPM升级. Linux系统:CentOS CentOS 6.4升级Python后yu ...

  7. javascript - C++, Qt, QtWebKit: How to create an html rendering window so that your application would get callbacks from JS calls? - Stack Overflow

    javascript - C++, Qt, QtWebKit: How to create an html rendering window so that your application woul ...

  8. Dropping tests(01分数规划)

    Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8176   Accepted: 2862 De ...

  9. android api 中文 (74)—— AdapterView.AdapterContextMenuInfo

    前言 本章内容是android.widget.AdapterView.AdapterContextMenuInfo,版本为Android 2.3 r1,翻译来自"cnmahj",欢 ...

  10. GridView事件分析

    GridView事件分析 (转) P1默认数据绑定过程 编号 事件名称 作用 E1 DataBinding 数据绑定之前触发,在这个事件之前(第一次生成GridView),GridView不存在行数据 ...