1、JVM监控
现实企业级 Java 开发中,有时候我们会碰到下面这些问题:OOM内存不足、内存泄露、线程死锁、锁争用(Lock Contention)
Java 进程消耗 CPU 过高jvm 有着非常棒的小块内存虚拟化技术,这会让你产生一种拥有无限内存的错觉感,其实它的开销非常大。有时候jvm 需要找出此刻堆上数据是如何被使用的,并把剩余的空间扩大——这就是垃圾回收。产生这种情况的原因是,jvm 实际获得的物理内存是有限的,因此需要在不被使用时进行内存回收和复用。在一些时间敏感的应用中,比如交易系统和通信程序,这些暂停是不能容忍的。有很多 GC 调优方法可以避免这种暂停发生。貌似上面的讨论已经跑题了。让 GC 变少的方法当然是尽量减少分配内存。有时候,你希望找出在你的程序中哪些地方导致了内存分配的压力。引起这种压力的原因有很多种。最普通的一种情况可能是jvm需要经常GC,并且时间远超过你认为的合理值。这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),跟踪 Java 应用程序瓶颈来源一直以来都是很麻烦的。当应用程序性能受到损害时,我们必须要通过一些方法来定位问题的所在,剔除安全隐患,下面就介绍一些可以帮助我我们监控 Java 信息图形化工具。
Visual VM JDK自带的,在性能压测中用的比较多。(JDK安装目录/bin目录下,双击jvisualvm.exe文件启动)
Jconsole (JDK安装目录/bin目录下,双击jconsole.exe文件启动)
jmc.exe (JDK安装目录/bin目录下,双击jmc.exe文件启动)
Tprofiler 可以看到JVM整个堆栈方法耗时信息。
1.1、VisualVm
1、简介
VisualVM 是 Netbeans 的 profile 子项目,自从JDK 6 Update 7以后已经作为JDK的一部分(java启动时不需要特定参数,监控工具为在${JAVA_HOME}/bin/jvisualvm),是一款免费的Java虚拟机监控和性能分析工具。能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。
jvisualvm 从界面上看还是比较简洁的,左边是树形结构,自动显示当前本机所运行的 Java 程序,还可以添加远程的 Java VM,其中括号里面的 PID 指的是进程 ID。OverView 界面显示 VM 启动参数以及该 VM 对应的一些属性。Monitor 界面则是监控 Java 堆大小,Permgen 大小,Classes 和线程数量。
该工具提供了一个图形界面窗口,并且可以直观的了解Java应用程序的运行时信息。jvisualvm 集成了许多工具,比如像 jmp、jinfo、jstat、jstack、JConsole 等。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。
2、安装插件并启动 Java VisualVM
配置好 JDK 环境变量,执行 jvisualvm 就可以打开软件了,在 VisualVM 插件中心安装插件安装步骤如下 :
从主菜单中选择“工具”>“插件”,在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”,逐步完成插件安装程序。这些插件都是 .nbm 文件,也可以提前下好,在已下载标签中点击“添加插件按钮”,选择已下载的插件文件 (.nbm) 并打开,逐步完成插件安装程序。
安装好插件后,相应的功能就可以使用了。
3、通过 Java VisualVM 连接到服务器监控 Java 程序
监控本地进程,双击左侧本地下边的进程名字就可以查看监控信息了。
接下来就是远程监控 Java 程序了,默认是使用 Jstatd 连接到远程主机的,所以在远程主机上,必须要一直运行着 jstatd 守护程序,启动方法可以参考上一篇文章。
右键点击远程-添加远程主机-输入主机ip地址,确认提交后即可看到相应的远程主机和在上面运行的 Java 程序,连接成功后应该会显示 Jstatd 及其 PID。
通过以上方式连接服务器发现一个问题,不能监控 CPU ,提示不受此 JVM 支持,所以我们还是要使用 JMX 方式来连接远程主机,如果远端服务开启了 JMX,只需在远程主机那里右键添加一个 JMX 连接就可以了。连接成功,现在我们可以远程监控服务器性能。
在上图中可以看到cpu利用率和垃圾回收活动(这个在分析tomcat性能时也很重要)。然后是堆栈使用情况。下面是类的使用情况,最后一个是线程活动情况。
点击线程标签可以看到:
上图可以非常清晰的看到线程活动情况,那些线程正在执行,哪些线程正在等待中,以及执行完毕的线程等。JDK 1.7 中的这个工具线程监控页面功能减少了,只剩时间线了(Timeline),JDK 1.6 内置的工具,还表(tab)、详细信息(Details)功能,可以右键选择查看单个进程的详细的状态信息。部分监控页还可以 Dump 出来状态文件保存下来,然后分析,如将 Heap Dump 出的远程文件 *.hprof ,拷贝到本地导入后分析。
加载后的 Dump 分析:
这可是一个性能分析利器哦!暂时就介绍这些功能。
1.2、JConsole
1、简介
JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行,从 Java 5 开始 引入了 JConsole。您可以轻松地使用 JConsole、来监控 Java 应用程序性能和跟踪 Java 中的代码。
使 JDK 在 PATH 上,运行 jconsole 即可。当分析工具弹出时(取决于正在运行的 Java 版本以及正在运行的 Java 程序数量),可能会出现一个对话框,要求输入一个进程的 URL 来连接,也可能列出许多不同的本地 Java 进程(有时包含 JConsole 进程本身)来连接。如图所示:
想分析哪个程序就双击哪个进程,然后选择”insercure“就会连接上了。
2、设置 JAVA 程序运行时可以被 JConsolse 连接分析
本地程序(相对于开启JConsole的计算机),无需设置任何参数就可以被本地开启的JConsole连接(Java SE 6开始无需设置,之前还是需要设置运行时参数 -Dcom.sun.management.jmxremote ,启动 JMX 服务)
无认证连接 (下面的设置表示:连接的端口为8099、无需认证就可以被连接)
1
2
3
4
5
|
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=8099 \
-Dcom.sun.management.jmxremote.authenticate=
false
\
-Dcom.sun.management.jmxremote.ssl=
false
\
-Djava.rmi.server.
hostname
=IP
|
JMX:Java Management Extensions ,即 Java 管理扩展 , 是一个为应用程序、设备、系统等植入管理功能的框架。 JMX 可以跨越一系列异构操作系统平台、系统体系结构和 网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用 。
-Dcom.sun.management.jmxremote 可以不加,默认值是 ture;
-Dcom.sun.management.jmxremote.port 是端口号,随便设置一个就可以了;
-Dcom.sun.management.jmxremote.ssl 是否启动 ssl 连接,默认值是 true,没有配置ssl证书就设置为 false 也可是访问;
-Dcom.sun.management.jmxremote.authenticate 是否启动身份验证,默认值是 true,默认的验证文件在 ${JAVA_HOME}/jre/lib/management/ 下,可以用 -Dcom.sun.management.jmxremote. access.file 与 -Dcom.sun.management.jmxremote. password.file 来指定配置用户访问权限文件与配置用户信息的文件位置(包括用户名和密码),如果不需要配置访问用户名及密码,设置为 false 就可以了,
jmxremote.access 、jmxremote.password 这个文件最小权限要设置为 600,组和其它用户没有任何权限,否则会禁止访问;
-Djava.rmi.server.hostname 该选项是设置访问地址的,必须设置,设置为本机 IP 或 主机名,如果设置为 127.0.0.1,那么远程主机就无法访问了。
详细的安全设置参数,请参考:http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html#gden
3、JConsole 如何连接远程机器的 JAVA 程序
1
2
3
4
5
6
7
8
9
10
|
用法: jconsole [ -interval=n ] [ -notile ] [ -pluginpath
-interval 将更新间隔设置为 n 秒 (默认值为 4 秒)
-notile 初始不平铺窗口 (对于两个或多个连接)
-pluginpath 指定 jconsole 用于查找插件的路径
-version 输出程序版本
connection = pid || host:port || JMX URL (service:jmx:<协议>:
//
...)
pid 目标进程的进程 ID
host 远程主机名或 IP 地址
port 远程连接的端口号
-J 指定运行 jconsole 的 Java 虚拟机的输入参数
|
写一个简单的一直运行的 Java 程序,运行在某台机器上如 (172.16.100.253),也可用 Tomcat 测试
1
|
java -
cp
. -Dcom.sun.management.jmxremote.port=8099 -Dcom.sun.managent.jmxremote.authenticate=
false
-Dcom.sun.management.jmxremote.ssl=
false
-Djava.rmi.server.
hostname
=172.16.100.253 JConsoleTest
|
在另外一台机器上进行连接,也可以直接使用命令:
1
|
jconsole 172.16.100.253:8099
|
也可以在已经打开的 JConsole 界面操作 连接->新建连接->选择远程进程->输入远程主机IP和端口号->点击“连接”,如图:
然后就会进入分析界面:
(1)性能分析
下面说说如何分析,如何使用这六个标签
Overview(概述): Displays overview information about the Java VM and monitored values.
Memory(内存): 显示内存使用信息
Threads(线程): 显示线程使用信息
Classes(类): 显示类装载信息
VM Sumary(VM摘要):显示java VM信息
MBeans: 显示 MBeans.
(2)概述
概述中将各个时间资源使用情况绘制成图表显示,不过值得一提的是对着图点击右键可以保存数据到 CSV 文件,所有图都可以导成 CVS 文件,以后可以使用其他工具来分析这些数据,。
(3)内存
这个比较有价值,参看堆内存,非堆内存,内存池的状况总体内存的分配和使用情况以及不同的 GC 进行垃圾回收的次数和时间。可以手动进行 GC 查看内存变化。在分析 JAVA 内存问题进行调优时候非常有用,你要学习 JVM 内存模型,之后会发现这里的每个值都具有意义。 GC 的算法和参数对性能有显著的影响,注意垃圾回收次数、时间、以及 partial GC 和 full GC,调整你所使用的不同 GC 和以及各个 GC 下的参数,然后在这个视图下观察,以得到好的性能。
这里贴一下 Java HotSpot VM garbage collector 下generational GC 的各代的划分图:
关于GC,可以参考:http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
(4)线程
左下角显示所有的活动线程(如果线程过多,可以在下面的过滤栏中输入字符串过滤出你想要观察的线程)。点击某个显示会显示这个线程的名称、状态、阻塞和等待的次数、堆栈的信息。
统计图显示的是线程数目的峰值(红色)和当前活动的线程(蓝色)。
另外下面有个按钮“检测到死锁”,有时候会有用处。
(5)类
这个没什么可解释的了。
(6)VM摘要
这里可以看到,操作系统,内存,线程等全部信息,方便我们调整系统资源的分配。
(7)MBean
这里可以有一些额外的操作,方便调试代码。
(8)插件
1
|
jconsole -pluginpath
/usr/local/jdk1
.7.0_79
/demo/management/JTop/JTop
.jar
|
1
|
JTop 插件在 JDK 的 demo 包中,还有许多其它的样例,该插件的功能一目了然。
|
1.3、Jmc
1、简介
Oracle 发布了 Java 7 update 40,该修订版增加了一些重要的新特性,包括 JVM 监控工具、任务控制,Java applet 规则集、Web Start 应用程序以及大量的 bug 修复。新增的一个非常好用的工具,就是 Java Mission Control(JMC 任务控制工具) 。 JRockit Misson Control 用户应该会对 mission control 的很多功能十分熟悉,JRockit 也是一款很棒的工具。Java 任务控制(JMC)是一个产品时间工具套件,它的根源是 JRockit JVM 工具。该工具套件的目的是提供不张扬的 Java 监控和管理,适合在开发和产品环境中使用。JMC 与 Java Flight Recorder 一起工作,适用于 HotSpot JVM,用来记录核心数据和事件。它是一个调优工具,一旦出现问题,这些数据就可以用来分析。
该工具套件由三个主要的组件组成:Java 进程浏览器、JMX 控制台和 Java Flight 记录器。
Java 进程浏览器:允许用户列出并连接到本地和远程运行的Java应用程序。它能够使用 Java发现协议(JDP)自动地发现本地和远程运行的 Java 进程。
JMX 控制台:能够通过 JMX 接口管理并监控 JDK。它提供了实时集合、堆使用情况、CPU 负载以及其他通过 MBeans 暴露的和在 MBean 服务器中注册的信息。
Java Flight 记录器:提供了一种从操作系统层、JVM 和 Java 应用程序层收集事件的方式。收集的事件包括线程延时事件,例如休眠(sleep)、等待(wait)、锁竞争、I/O、GC 和方法分析。Oracle 估计对大多数应用程序而言运行 Flight 记录器的性能开销大约在 2% 左右。
2、Jmc 使用方法
打开以后界面如下:
Jmc 既可以连接本地 Java 程序,也可以连接本地 Java 程序,远端要开启 jmxremote 访问。本地程序在左侧想查看的的程序名那里,右键点击启动 JMX 控制台就可以了。远程访问在左侧空白处右键点击新建连接,如图填写好主机和端口,这里的主机和端口就是我们前面在远程服务器配置的服务器 IP 和端口。
创建完成之后我们就能看到服务器的概要信息了。通过下面的选项卡就可以切换显示其它的详细的信息了。
概览:
MBean 浏览器:
触发器:
系统:
内存:
线程:
诊断命令:
Jmc 还可以安装一些插件,增加一些功能。所有的功能都可以点击右上角的 "? " ,会通过浏览器访问本地的帮助文件。
飞行记录器使用前,需要在 Java 程序启动前加 2 个参数“ -XX:+UnlockCommercialFeatures -XX:+FlightRecorder ”,如果没有添加,无法使用飞行记录器。飞行记录器启动后,可以记录服务器一段时间内的运行状况,还可导成文件备份,需要 Java 程序启动前在加一个参数“ -XX:FlightRecorderOptions=defaultrecording=true”才可以导出,方便随时分析,这个是查找服务器性能的利器。
飞行记录器记录成功之后可以看到下面的一些信息:
JMeter 性能监测插件
JMeter 插件网址:http://jmeter-plugins.org/
一、插件一
1、下载
首先进入网址 http://jmeter-plugins.org/downloads/all/ 下载资源
ServerAgent-2.2.1.zip
JMeterPlugins-Standard-1.3.1.zip
JMeterPlugins-Extras-1.3.1.zip
其中JMeterPlugins-Standard和JMeterPlugins-Extras是客户端的,ServerAgent是服务端的。
2、配置
将 JMeterPlugins-Standard-1.3.1.zip 中 lib\ext 目录下的 JmeterPlugins-Standard.jar 文件都放到apache-jmeter-2.13\lib\ext目录中。
将 JMeterPlugins-Extras-1.3.1.zip 中 lib\ext 目录下的 JMeterPlugins-Extras.jar 文件放到apache-jmeter-2.13\lib\ext目录中。
将 ServerAgent-2.2.1 放到要监控的服务器中待使用。
3、监控
1) apache-jmeter-2.12\bin\jmeter.bat 启动JMeter
正常启动成功后截图如下:
如果不能启动查看jdk版本或者jdk是否安装正确。
2) 查看插件是否正常加载,如图:
其中jp@gc 开头的为加载插件后出现的。
3) 运行 ServerAgent-2.2.1\bin\startAgent.bat(Linux使用startAgent.sh)
(默认端口为4444,也可以参数指定 –udp-port 4445 –tcp-port 4445)
可以看到输出内容如下:
INFO 2016-02-23 21:21:37.209 [kg.apc.p] (): Binding UDP to 4444 INFO 2016-02-23 21:21:38.208 [kg.apc.p] (): Binding TCP to 4444 INFO 2016-02-23 21:21:38.210 [kg.apc.p] (): JP@GC Agent v2.2.0 started
4) 在JMeter 中的测试计划中,按上面的截图,添加监听器 “jp@gc - PerfMon Metrics Collector”
点击上面的启动按钮后,查看ServerAgent日志出现:
INFO 2016-02-23 21:34:46.966 [kg.apc.p] (): Accepting new TCP connection INFO 2016-02-23 21:34:46.969 [kg.apc.p] (): Yep, we received the 'test' command INFO 2016-02-23 21:34:46.971 [kg.apc.p] (): Starting measures: cpu: INFO 2016-02-23 21:34:47.123 [kg.apc.p] (): Client disconnected
运行jmeter时,成功连接然后立刻断开了,并没有获取我们想要的数据。猜想需要一个时间控制的元器件,使其能够获取一段时间的数据。
解决方法:
添加线程组,设置循环次数为”永远”;
为线程组任意添加一个Sampler(并不设置参数);
添加一个PerfMon Metrics Collector监听器;点击运行。(上面如果已经添加过,可直接使用无需再添加)
然后在 jp@gc - PerfMon Metrics Collector 界面,启动。
结果:成功获取chart图,点击stop,即结束监听数据,下面是截图。
你就可以得到系统运行时,你所需要的常用的性能值了。
二、增强型监控插件plugins-manager.jar
在https://jmeter-plugins.org/中下载插件,下载后可以解压缩,将plugins-manager.jar放入jmeter安装目录lib/exe,然后重启jmeter即可。
可以通过点击下图圈出来的按钮检验是否成功安装:
无论是对服务器资源使用率还是测试数据报表生成,甚至TPS、TRT等的监听,该插件都提供了组件支持
三、监控3
一、安装InfluxDB
下载路径:https://portal.influxdata.com/downloads,以windows安装为例,linux可网上搜索;
1、配置influxdb.conf文件
2、启动influxdb
打开cmd,切换到influxdb安装目录;启动命令:influxd -config influxdb.conf
启动成功后,通过http://localhost:8083/即可访问influxdb;创建jmeter数据库;
二、安装Grafana
下载路径:http://docs.grafana.org/installation/,以windows安装为例,linux可网上搜索;
1、通过bin目录下的grafana-server.exe启动grafana-server;
2、配置端口号(conf目录下的defaults.ini),如不想使用默认端口,可以拷贝一份sample.ini为custom.ini,并重新配置custom.ini的端口号;
3、通过http://localhost:8081访问grafana;(ps:默认端口是3000)
4、配置datasource,并测试连通性;
5、添加dashboard并配置相关查询条件等;
三、安装Telegraf
Telegraf用于监控服务器cpu、硬盘、内存等参数;
1、下载:
wgethttp://get.influxdb.org/telegraf/telegraf-0.11.1-1.x86_64.rpm
2、服务器上安装:
yum localinstall telegraf-0.11.1-1.x86_64.rpm -y
3、启动服务、添加开机启动
systemctl start telegraf.service
service telegrafstart
systemctl enable telegraf.service
4、配置文件位置:/etc/telegraf/telegraf.conf
修改telegraf配置文件添加监控项
vim /etc/telegraf/telegraf.conf
5、telegraf安装步骤:
1、切换root权限,切换到telegraf-1.0.1.x86_64.rpm并安装
[@HWTVM-165058 ~]$sudo su -
[root@HWTVM-165058 ~]# cd ..
[root@HWTVM-165058 /]# ls
[root@HWTVM-165058 wanglei]# yum localinstall telegraf-1.0.1.x86_64.rpm
2、切换到etc/telegraf/telegraf.conf目录,修改telegraf.conf文件的[[outputs.influxdb]]
[root@HWTVM-165058 telegraf]#vim telegraf.conf
3、切换root权限,启动服务
[root@HWTVM-165059 ~]#service telegraf start
Starting the process telegraf [ OK ]
telegraf process was started [ OK ]
杀进程:(比如某个jmeter脚本运行一直没有停止,可通过以下命令查找进程并杀掉)
[@HWTVM-138194 ~]$ps -ef|grep java
26995 26915 5 17:14 pts/5 00:01:20 java -server -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=250 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -jar /home/wanglei/apache-jmeter-3.2/bin/ApacheJMeter.jar -n -t P2P-F0300001-fronteamst-184.jmx
27451 27312 0 17:39 pts/0 00:00:00 grep java
[@HWTVM-138194 ~]$kill 26995
[@HWTVM-138194 ~]$ps -ef|grep java
27457 27312 0 17:39 pts/0 00:00:00 grep java
四、Jmeter例子示范
1、添加Backend Listener监听器,配置graphiteHost;
2、运行脚本,根据配置的查询条件监控测试报告;
五、InfluxDB常用语句
打开cmd,通过命令启用influx.exe:.\influx --host localhost --port 8083
select * from /.*/ limit 1---查询所有表,显示一条记录
show measurements---显示所有表
show databases ---展示所有数据库
help ---帮助命令
nmon监控
一、检查安装环境
# uname –a (查看操作系统信息,所检查服务器为64位操作系统)
Linux iZ94pmb2p24Z 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
# lsb_release –a (查看linux发行商版本,所检查服务器linux版本为:CentOS6.5)
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final
二、下载软件
nmon:
版本:nmon_linux_14i.tar.gz (下载适合服务器的版本)
地址:https://osdn.jp/projects/sfnet_nmon/releases/
nmonanalyser:
版本:nmon_analyser_v47.zip
地址:https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power+Systems/page/nmon_analyser
三、安装
安装位置:/home/nmon (任意目录)
1、 在home 目录下创建nmon文件夹:# mkdir nmon
2、 上传nmon_linux_14i.tar.gz 到nmon目录
3、 解压:# tar –zxvf nmon_linux_14i.tar.gz
4、 赋权限:# chmod –R 755 nmon
5、 启动nmon:# ./nmon_x86_64_sles11(在nmon目录下执行命令)
安装成功显示以下界面:
四、实时监控
输入以下命令:
c 可显示CPU的信息
m 对应内存
n 对应网络
d 可以查看磁盘信息
t 可以查看系统的进程信息
五、配置环境变量
1、修改启动文件名称:
# mv nmon_x86_64_sles11 nmon
# ./nmon
2、 添加到环境变量中:
# vim /etc/profile (在profile中写入以下两行内容)
PATH=$PATH:/home/nmon/nmon ($PATH:后为命令的路径)
export PATH
3、 保存退出
4、 使配置文件立即生效
# source /etc/profile
# nmon (在任何目录下执行nmon命令启动nmon)
六、采集监控数据
在实际的性能测试中我们需要把一段时间之内的数据记录下来,如:
1、采集数据
# nmon -s1 -c60 -f -m /home/nmon
# ll /home/nmon/
total 15220
-rw-r--r-- 1 root root 23923 Oct 14 16:59 chen_151014_1659.nmon
参数说明:
-s1 每隔n秒抽样一次,这里为1秒
-c60 取出多少个抽样数量,这里为60,即监控=1*60/60=1分钟
-f 按标准格式输出文件名称:
-m 指定监控文件的存放目录,-m后跟指定目录
七、生成图形化报表
1、将.nmon文件转化成.csv文件
# sort chen _151014_1659.nmon > chen _151014_1659.csv
# ll /home/nmon
total 15300
-rw-r--r-- 1 root root 51999 Oct 14 17:09 chen_151014_1659.csv
-rw-r--r-- 1 root root 51999 Oct 14 17:00 chen _151014_1659.nmon
2、将.csv文件下载到本地
3、打开nmon analyser工具
在本地解压nmon_analyser_v47.zip
双击打开:nmon analyser v47.xlsm
点击Analyse nmon data按钮,加载之前下载的chen_151014_1659.csv文件。
补充说明:本地安装的excle是2010版本
八、结果分析
九、结果nmon运行
nmon运行本身是会消耗系统资源,如需关闭nmon,直接kill掉
# ps -ef | grep nmon (得到pid)
# kill -9 pid (安全kill)
zabbix
Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于CS架构。可用于监视各种网络服务、服务器和网络机器等状态。使用MySQL, PostgreSQL, SQLite, Oracle 或 IBM DB2 等数据库储存资料。Server 端基于C语言、Web 管理端则是基于 PHP 所制作的。Zabbix 可以使用多种方式监视。可以只使用 Simple Check 不需要安装 Client 端,亦可基于 SMTP 或 HTTP ... 各种协定做死活监视。在客户端如 UNIX, Windows 中安装 Zabbix Agent 之后,可监视 CPU Load、网络使用状况、硬盘容量等各种状态。而就算没有安装 Agent 在监视对象中,Zabbix 也可以经由 SNMP、TCP、ICMP、利用 IPMI、SSH、telnet 对目标进行监视。另外,Zabbix 包含 XMPP 等各种 Item 警示功能。
zabbix官网: https://www.zabbix.com
zabbix 主要由2部分构成 zabbix server和 zabbix agent
zabbix proxy是用来管理其他的agent,作为代理
zabbix监控范畴
² 硬件监控 :Zabbix IPMI Interface
² 系统监控 :Zabbix Agent Interface
² Java 监控:ZabbixJMX Interface
² 网络设备监抟:Zabbix SNMP Interface
² 应用服务监控:Zabbix Agent UserParameter
² MySQL 数据库监控:percona-monitoring-pldlgins
² URL监控:Zabbix Web监控
说明:
操作系统:CentOS
IP地址:192.168.21.127
Web环境:Nginx+MySQL+PHP
zabbix版本:Zabbix 2.2 LTS
备注:Linux下安装zabbix需要有LAMP或者LNMP运行环境
准备篇:
一、Web环境:Nginx+MySQL+PHP
CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14
http://www.osyunwei.com/archives/7891.html
二、zabbix软件包下载
zabbix-2.2.6
http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.2.6/zabbix-2.2.6.tar.gz
上传zabbix-2.2.6.tar.gz到服务器/usr/local/src目录下面
安装篇
一、创建、导入zabbix数据库
cd /usr/local/src #进入软件包下载目录
tar zxvf zabbix-2.2.6.tar.gz #解压
cd /usr/local/src/zabbix-2.2.6/database/mysql #进入mysql数据库创建脚本目录
ls #列出文件,可以看到有schema.sql、images.sql、data.sql这三个文件
mysql -u root -p #输入密码,进入MySQL控制台
create database zabbix character set utf8; #创建数据库zabbix,并且数据库编码使用utf8
insert into mysql.user(Host,User,Password) values('localhost','zabbix',password('123456')); #新建账户zabbix,密码123456
flush privileges; #刷新系统授权表
grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by '123456' with grant option; #允许账户zabbix能从本机连接到数据库zabbix
flush privileges; #再次刷新系统授权表
use zabbix #进入数据库
source /usr/local/src/zabbix-2.2.6/database/mysql/schema.sql #导入脚本文件到zabbix数据库
source /usr/local/src/zabbix-2.2.6/database/mysql/images.sql #导入脚本文件到zabbix数据库
source /usr/local/src/zabbix-2.2.6/database/mysql/data.sql #导入脚本文件到zabbix数据库
注意:请按照以上顺序进行导入,否则会出错。
exit #退出
或者这样导入
mysql -uzabbix -p123456 -hlocalhost zabbix < /usr/local/src/zabbix-2.2.6/database/mysql/schema.sql
mysql -uzabbix -p123456 -hlocalhost zabbix < /usr/local/src/zabbix-2.2.6/database/mysql/images.sql
mysql -uzabbix -p123456 -hlocalhost zabbix < /usr/local/src/zabbix-2.2.6/database/mysql/data.sql
cd /usr/lib64/mysql #32位系统为/usr/lib/mysql,注意系统版本同,文件版本可能不一样,这里是16.0.0
ln -s libmysqlclient.so.16.0.0 libmysqlclient.so #添加软连接
ln -s libmysqlclient_r.so.16.0.0 libmysqlclient_r.so #添加软连接
二、安装zabbix
1、添加用户:
groupadd zabbix #创建用户组zabbix
useradd zabbix -g zabbix -s /bin/false #创建用户zabbix,并且把用户zabbix加入到用户组zabbix中
2、安装依赖包 #CentOS使用yum命令安装
yum install net-snmp-devel curl curl-devel mysql-devel
备注:以上软件包如果在安装Web环境LAMP或者LNMP时已经安装过,此步骤可忽略
3、安装zabbix
ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2 #添加软连接
/sbin/ldconfig #使配置立即生效
cd /usr/local/src/zabbix-2.2.6 #进入安装目录
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-net-snmp --with-libcurl --enable-proxy --with-mysql=/usr/bin/mysql_config #配置
make #编译
make install #安装
ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/ #添加系统软连接
ln -s /usr/local/zabbix/bin/* /usr/local/bin/ #添加系统软连接
说明:find / -name mysql_config 查找位置,如果没有mysql_config,需要安装yum install mysql-devel
4、添加zabbix服务对应的端口
vi /etc/services #编辑,在最后添加以下代码
# Zabbix
zabbix-agent 10050/tcp # Zabbix Agent
zabbix-agent 10050/udp # Zabbix Agent
zabbix-trapper 10051/tcp # Zabbix Trapper
zabbix-trapper 10051/udp # Zabbix Trapper
:wq! #保存退出
5、修改zabbix配置文件
cd /usr/local/zabbix/etc
vi /usr/local/zabbix/etc/zabbix_server.conf
DBName=zabbix #数据库名称
DBUser=zabbix #数据库用户名
DBPassword=123456 #数据库密码
ListenIP=127.0.0.1 #数据库ip地址
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts #zabbix运行脚本存放目录
:wq! #保存退出
vi /usr/local/zabbix/etc/zabbix_agentd.conf
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
UnsafeUserParameters=1 #启用自定义key
:wq! #保存退出
6、添加开机启动脚本
cp /usr/local/src/zabbix-2.2.6/misc/init.d/fedora/core/zabbix_server /etc/rc.d/init.d/zabbix_server #服务端
cp /usr/local/src/zabbix-2.2.6/misc/init.d/fedora/core/zabbix_agentd /etc/rc.d/init.d/zabbix_agentd #客户端
chmod +x /etc/rc.d/init.d/zabbix_server #添加脚本执行权限
chmod +x /etc/rc.d/init.d/zabbix_agentd #添加脚本执行权限
chkconfig zabbix_server on #添加开机启动
chkconfig zabbix_agentd on #添加开机启动
7、修改zabbix开机启动脚本中的zabbix安装目录
vi /etc/rc.d/init.d/zabbix_server #编辑服务端配置文件
BASEDIR=/usr/local/zabbix/ #zabbix安装目录
:wq! #保存退出
vi /etc/rc.d/init.d/zabbix_agentd #编辑客户端配置文件
BASEDIR=/usr/local/zabbix/ #zabbix安装目录
:wq! #保存退出
三、配置web站点
cd /usr/local/src/zabbix-2.2.6
cp -r /usr/local/src/zabbix-2.2.6/frontends/php /usr/local/nginx/html/zabbix
chown www.www -R /usr/local/nginx/html/zabbix
备注:/usr/local/nginx/html为Nginx默认站点目录 www为Nginx运行账户
service zabbix_server start #启动zabbix服务端
service zabbix_agentd start #启动zabbix客户端
四、修改php配置文件参数
1、vi /etc/php.ini #编辑修改
post_max_size =16M
max_execution_time =300
max_input_time =300
:wq! #保存退出
2、vi /usr/local/php/etc/php-fpm.conf #编辑修改
request_terminate_timeout = 300
:wq! #保存退出
service php-fpm reload #重启php-fpm
五、安装web
在浏览器中打开:
http://192.168.21.127/zabbix/setup.php
Next
检查系统环境设置,必须全部都为ok,才能继续
Next
配置MySQL数据库信息
Database:MySQL
Database host:127.0.0.1
Database port:use default port
Database name:zabbix
User:zabbix
Password:123456
Test connection #测试数据库连接是否正常,显示ok表示通过
Next 默认
Next
Finish 安装完成
六、更改zabbix默认语言为简体中文、替换监控图像上系统默认的中文字体
1、修改系统配置文件,让web页面支持简体中文显示
vi /usr/local/nginx/html/zabbix/include/locales.inc.php #编辑修改
'zh_CN' => array('name' => _('Chinese (zh_CN)'), 'display' => false),
修改为
'zh_CN' => array('name' => _('Chinese (zh_CN)'), 'display' => true),
:wq! #保存退出
2、替换监控图像上系统默认的字体 #默认字体不支持中文,如果不替换,图像上会显示乱码
在Windows系统中的C:\Windows\Fonts目录中复制出一个中文字体文件,例如msyh.ttf
把字体文件msyh.ttf上传到zabbix站点根目录下fonts文件夹中
例如:/usr/local/nginx/html/zabbix/fonts
备份默认的字体文件:DejaVusSans.ttf-bak
修改msyh.ttf名称为DejaVusSans.ttf
3、在浏览器中打开:
http://192.168.21.127/zabbix
账号:admin
密码:zabbix
Sign in 登录
如下图所示
点击Profile
如下图所示
Language:Chinese(zh_CN) #简体中文
点Save 保存
退出站点,重新登录之后,如下图所示
默认界面已经是中文显示
至此,Zabbix安装图解教程完成。