如何监控服务器的磁盘性能
Linux服务器性能监测是很重要的工作,服务器运行应该提供最有效的系统性能。当服务器系统性能突然低于平均应有的情况,问题可能来自在执行的进程、内存的使用率、磁盘的性能、网络流量和CPU 的压力。在预算短缺的今天,理解如何优化系统性能比以往任何时候都重要。 要实现它的前提是,你必须充分了解自己的计算机和网络,从而找到真正的瓶颈所在。本文提供一些基础的工具来辨别和处理一些性能问题。使用的Linux 发行版本是Red Hat Enterprise Linux 4,工作过程是:首先查看整个系统的状态,然后是检查特定的子系统。 Linux服务器进行性能监控有几种方法,每种方法都各有其优缺点。 使用SNMP等标准工具 标准及非标准工具能执行一个或多个收集、合并及传输阶段,如rstatd或SNMP工具,然而标准的rstat后台程序提供的信息是有限的,速度慢而且效率低。 内核模块 几个系统监控工程利用内核模块来存取监控数据。一般情况下,这是很有效的收集系统数据的方法。然而这种方法存在的问题是,当主内核源内有其它改变时,必须保持代码一致性。一个内核模块可能与用户想使用的其它内核模块相冲突。此外,在使用监控系统之前,用户必须获得或申请模块。 /proc虚拟文件系统 /proc虚拟文件系统是一个较快的、高效率执行系统监控的方法。使用/proc的主要缺点是必须保持代码分析与/proc 文件格式改变的同步。事实表明,Linux内核的改变比/proc 文件格式的改变要更频繁,所以,用/proc虚拟文件系统比用内核模块存在的问题要少。本文介绍的方法即基于/proc虚拟文件系统。 一、 /proc文件系统特点 Linux 系统向管理员提供了非常好的方法,使他们可以在系统运行时更改内核,而不需要重新引导内核系统。这是通过 /proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。不用重新启动而去看 CMOS ,就可以知道系统信息。这就是 /proc 的妙处之一。 小提示: 每个Linux系统根据软硬件不同/proc 虚拟文件系统的内容也有些差异。/proc 虚拟文件系统有三个很重要的目录:net,scsi和sys。Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。
Monit安装与配置
一、简介
Monit是一个在类unix平台下用于监视进程、文件、目录和设备的软件,可以修复停止运作或运作异常的程序,适合处理那些由于多种原因导致的软件错误。
二、安装
假定下面的安装和配置均在root身份下进行。
安装很简单,下载monit的源代码(现在最新版本是4101)monit-4101targz,将其放到适合的目录中,然后解压,configure(默认设置即可),make,make install 。具体在终端中使用如下命令:
tar –xzf monit-4101targz
cd monit-4101
/configure
make
make install
很快就可以安装完毕。
三、配置
安装完毕后,在monit源代码的目录将monit的配置文件monitrc拷贝到/etc目录下,使用命令:
cp monitrc /etc
注意/etc/monitrc这个文件的访问权限不能大于0700,所以可能还需要修改它的访问权限:
chmod 600 /etc/monitrc
然后打开/etc/monitrc这个文件进行配置,monit已经将大部分的配置的例子放在了里面,多数配置只需将配置前面的#(注释)去掉再做相应修改即可。我们主要用monit来监视tomcat服务器,所以配置如下:
set daemon 120 # 设置monit作为守护进程运行,并且每2分钟监视一次
# 2分钟是默认的时间间隔,从网上的看到的多个配置的例子
# 看到的时间间隔也是2分钟,应该是比较合理的
set logfile /var/log/monitlog # 设置日志文件的位置,如果要写入系统日志可以
# set logfile syslog
set httpd port 3000 and # monit内置了一个用于查看被监视服务
# 状态的http服务器,注意在防火墙中开启
# 该端口1,否则非localhost无法访问
use address 1921681184 # 设置这个http服务器的地址
# 若设置成localhost则只允许本地访问
allow localhost # 允许本地访问
allow 19216811/2552552550 # 允许内网访问
allow admin:monit11 # 设置使用用户名admin和密码monit11
# 来访问这个地址
set mailserver localhost # 设置邮件服务,设置后monit会将提示以
# 邮件的方式发送这里使用localhost为邮
# 件服务器地址,前提是本地已安装并开启
# 了sendmail服务
set alert 88fly@163com # 收邮件地址,如果要发送到多个地址
# 可以写多条这样的设置
# 下面设置监视tomcat
check process tomcat with pidfile /var/run/catalinapid # 这个要另外说明2
start program = "/etc/initd/tomcat start" # 设置启动命令
stop program = "/etc/initd/tomcat stop" # 设置停止命令
if 9 restarts within 10 cycles then timeout # 设置在10个监视周期内重
# 启了9次则超时,不再监视
# 这个服务。原因另外说明3
if cpu usage > 90% for 5 cycles then alert # 如果在5个周期内该服务
# 的cpu使用率都超过90%
# 则提示
# 若连续5个周期打开url都失败(120秒超时,超时也认为失败)
# 则重启服务
if failed url timeout 120 seconds for 5 cycles then restart
if failed url timeout 120 seconds for 5 cycles then restart
1可以使用命令:
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 2812 -j ACCEPT
/sbin/service iptables save
2使用/var/run/catalinapid这个pid文件来检查tomcat这个服务(服务名可以随便起),tomcat进程默认是不使用pid文件的,pid文件需要显式为tomcat设置,可以打开tomcat目录下的bin目录,打开catalinash文件,在开头(但不是第一行)处加入:
CATALINA_PID=/var/run/catalinapid
即可指定pid文件,然后重启tomcat,这样就可以monit的配置中指定pid文件了。
3设置超时后不再监视是为了让服务不要一直重启,如果连续重启多次不成功,极有可能再重启下去也不会成功的。并且tomcat的重启需要占用大量系统资源,假如一直重启下去,反而会使其它服务也无法正常运作。
如果要监视其它服务,可以加入更多的监视逻辑,例如要监视mysql服务,可以:
check process mysql with pidfile /var/run/mysqld/mysqldpid
start program = /etc/initd/mysqld start"
stop program = "/etc/initd/mysqld stop"
if failed host 127001 port 3306 then restart
if 5 restarts within 5 cycles then timeout
监视ssh服务:
check process sshd with pidfile /var/run/sshdpid
start program "/etc/initd/sshd start"
stop program "/etc/initd/sshd stop"
if failed port 22 protocol SSH then restart
if 5 restarts within 5 cycles then timeout
如果监视的服务比较多,可以将各个服务的监视逻辑放在不同的文件,然后使用include命令包含进来,使配置文件更加清晰。例如:
include /etc/monit/includes/mysqld
上面的设置完后,设置monit随系统启动,在/etc/inittab文件的最后加入
# Run monit in standard run-levels
mo:2345:respawn:/usr/local/bin/monit -Ic /etc/monitrc
然后使用命令
telinit q
启动monit。
四、要注意的问题
由于将monit设置成了守护进程,并且在inittab中加入了随系统启动的设置,则monit进程如果停止,init进程会将其重启,而monit又监视着其它的服务,这意味着monit所监视的服务不能使用一般的方法来停止,因为一停止,monit又会将其启动要停止monit所监视的服务,应该使用monit stop name这样的命令,例如要停止tomcat:
monit stop tomcat
要停止全部monit所监视的服务可以使用monit stop all
要启动某个服务可以用monit stop name这样的命令,启动全部则是monit start all
以上转自:
今天研究了下monit 如上兄弟写的很详细,就直接拿来主义了,补充下短信告警
因公司有短信接口所以就直接发送告警,如下:
监控本机部分性能:
check system 127001
if loadavg (5min) > 4 for 4 times 5 cycles then exec "/etc/monit/script/sendsms sysload 5min >4"
if memory usage > 90% then exec "/etc/monit/script/sendsms 127001 memory useage>90%"
if cpu usage (user) > 70% for 4 times within 5 cycles then exec "/etc/monit/script/sendsms cpu(user) >70%"
if cpu usage (system) > 30% for 4 times within 5 cycles then exec "/etc/monit/script/sendsms cpu(system) >30% "
if cpu usage (wait) > 20% for 4 times within 5 cycles then exec "/etc/monit/script/sendsms system busy! cpu(wait) >20%"
监控远程机器的部分端口:
check host Unicom_mobi with address 2119024651
if failed icmp type echo count 10 with timeout 20 seconds then exec "/etc/monit/script/sendsms Unicom_mobi 2119024651 ping failed!"
if failed port 22 type tcp with timeout 10 seconds for 2 times within 3 cycles then exec "/etc/monit/script/sendsms unicom 2119024651:2222 connect failed!"
if failed port 9528 type tcp with timeout 10 seconds for 2 times within 3 cycles then exec "/etc/monit/script/sendsms unicom 2119024651:9528 connect failed!"
if failed port 9529 type tcp with timeout 10 seconds for 2 times within 3 cycles then exec "/etc/monit/script/sendsms unicom 2119024651:9529 connect failed!"
if failed port 9530 type tcp with timeout 10 seconds for 2 times within 3 cycles then exec "/etc/monit/script/sendsms unicom 2119024651:9530 connect failed!"
monit好处是可以在监控故障设置重启服务和执行自定义脚本,如下
check file passwd path /etc/passwd
# if failed md5 checksum
# then exec "/usr/bin/killall -q monit"
2 check filesystem root with path /dev/mapper/VolGroup00-LogVol00
if space usage > 80% for 5 times within 15 cycles then exec "/etc/monit/script/clear_coresh"
else if succeed for 1 times within 2 cycles then exec "/etc/monit/script/sendsms '/dev/sda1 usage > 90% clear core file succeed!'>/dev/null 2"
用Nmon监控Linux系统性能的方法请参见下面介绍(配图):
1、安装Nmon
2、一旦安装完成,则可以通过在终端执行 nmon 命令启动它。
Nmon命令执行之后,大家可以看到如下输出:
3、从上图中大家可以看到,Nmon 命令行工具是一个用户交互的应用程序,大家可以非常方便地使用键盘快捷键来查看相关统计信息。
q : 停止并退出Nmon
h : 查看帮助信息
c : 查看 CPU 统计信息
m : 查看内存统计信息
d : 查看磁盘统计信息
k : 查看内核统计信息
n : 查看网络统计信息
N : 查看 NFS 统计信息
j : 查看文件系统统计信息
t : 查看 Top 进程统计信息
V : 查看虚拟内存统计信息
v : 详细输出模式
4、查看 CPU 统计信息
如果你想查看 CPU 性能信息,可以直接按 c 键:
5、查看 Top 进程统计信息
如果你想查看 Top 进程统计信息,可以直接按 t 键:
6、查看网络统计信息
如果你想查看网络统计信息,可以直接按 n 键:
7、磁盘I/O图
使用 d 键可以查看磁盘统计信息:
8、查看内核统计信息
如果你想查看内核统计信息,可以直接按 k 键:
9、获取系统信息
如果要查看 Linux 的系统信息,如:系统架构、操作系统版本、Linux 版本则可以使用 r 键,这对系统管理员非常有用。
以上是基础使用方法。下面再补充一些命令和方法:
1、启动
打开nmon所在的目录:cd /usr/local/nmon修改启动文件的访问权限:chmod 755 nmon_x86_rhel52启动nmon:/nmon_x86_rhel52如果要采样nmon的数据保存成文件,可以/nmon_x86_rhel52 -fT -s 30 -c 120其中30表示每隔30秒nmon取一次系统性能数据,120表示取120次;这样nmon将会在运行开始算起连续取得30sX120=60分钟,可根据实际需要时间调整;当运行以上命令后该目录下会生成一个nmon文件,该文件会根据间隔时间被写入性能数据,当一段时间后再查看该文件,文件字节变大
利用nmonanalyser分析nmon文件
当测试结束的同时ftp到服务器上将nmon文件get下来,打开nmon_analyserzip 包下的nmon analyser v338xls 文件,点击Analyse nomn data按钮,选择之前get来下的nmon文件。(如果报告以下宏的安全级别太高错误,则在“工具 -- 宏 --安全性”里把级别调低,然后重新打开 nmon analyser v338xls 文件)待分析结束后会生成性能分析结果文件(文件格式为xls,其中包括CPU,IO,内存等性能分析报告)。分析结果中有很多数据和图形,简要介绍主要的性能参数图像
41 系统汇总(对应excel标签的‘SYS_SUMM’)蓝线为cpu占有率变化情况;粉线为磁盘IO的变化情况;
42磁盘读写情况汇总(对应excel标签的‘DISK_SUMM’)蓝色为磁盘读的速率KB/sec紫色为磁盘写的速率KB/sec
43内存情况汇总(对应excel标签的‘MEM’)曲线表示内存剩余量(MB)分析数据得到的报告文件(xls)中包含很多性能分析结果数据,根据自己的需要查看。
2、nmon运行本身就消耗系统资源的;另外如果取到nmon文件后确定不再需要nmon继续收集信息则应kill掉nmon;命令:
ps -A | grep nmon #得到pid
kill -9 pid
suse10 enterprise sp2:
nmon_x86_rhel3
使用对应的操作系统文件:chmod +x nmon_x86_ubuntu810mv nmon_x86_ubuntu810 /usr/local/bin/nmon
对于 Debian 还要做以下操作(不做也同样能运行):apt-get install lsb-releaselsb_release -d | sed 's/Description:\t//' > /etc/debian_release
然后直接运行 nmon 即可。
采集数据并生成报表:采集数据:nmon -s10 -c60 -f -m /home/
参数解释:-s10 每 10 秒采集一次数据。-c60 采集 60 次,即为采集十分钟的数据。-f 生成的数据文件名中包含文件创建的时间。-m 生成的数据文件的存放目录。
这样就会生成一个 nmon 文件,并每十秒更新一次,直到十分钟后。生成的文件名如: hostname_090824_1306nmon ,"hostname" 是这台主机的主机名。
0条评论