系统性能监控常用命令

系统监控

系统监控需要安装psacct,sysstat,SysVinit三个rpm软件安装包

一.
显示系统内核消息
uname -srvmo
显示系统运行时间和平均负载
uptime
显示系统进程列表
ps aux
显示系统物理内存和交换区的使用
free
显示系统的磁盘空间用量
df -h
显示磁盘分区
fdisk -l
显示系统PCI信息,也可以使用-v 或-vv显示更全面的信息,使用lsusb显示usb信息
lspci
显示正在运行的进程,内存,cpu信息:空格更新;K杀死指定的进程;N改变要显示的进程数量;U,M,P分别按用户,内存用量,cpu用量排序
top
watch观察连续不断更新的文件
watch [-dn] <command>    d高亮显示差异的内容,n设置间隔时间;command不能是alias
watch tail /var/log/messages
watch -d -n 10 tail /var/log/messages
watch -d "tail /etc/httpd/logs/access_log;tail /etc/httpd/logs/error_log"
watch "ps aux|grep top|grep -v 'grep'"

二.
lsof工具
lsof [OPTIONS] [names]
-h 显示帮助
-a 逻辑与
-R 显示进程的PPID列
-l 不将UID转化为用户登录名
-n 不将IP转化为主机名
-P 不将服务器端口转化为服务名称
-u Username/UID 显示由指定用户的进程打开的文件
-g gid 显示由指定组进程打开的文件
-d FD 显示指定文件描述符的进程
-c string 显示命令列表中包含指定字符串的进程打开的文件
+d Dirname  显示指定目录下被进程打开的文件
+D Dirname  显示指定目录下被进程打开的文件,会搜索目录下的所有子目录
-i 显示所有网络进程打开的文件,下面详细讨论
-i [46] [protocol][@hostname][hostaddr][:service|port]
示例:
-i 6
-i TCP:25
-i @1.2.3.4
-i @[3ffe:lebc::1]:1234
-i UDP:who
-i
TCP@lsof:itap:513   端口号是513,主机名是lsof:itap
-i TCP:foo:1-10,smtp,99          后面1-10,smtp,99是端口
-i
TCP@bar:smtp-nameserver   TCP协议的端口smtp到nameserver
-i :time  TCP,UDP服务的time端口
lsof命令示例
看谁在使用指定的文件系统
lsof /media/cdrom
显示打开指定文件的所有进程
lsof /var/log/messages
显示由指定用户打开的进程
lsof -u osmond
显示指定目录下被进程打开的文件
lsof +d /var
显示指定文件描述符的进程,多个FD之间用,隔开
lsof -d txt,1
查看属于root用户进程所打开的文件描述符为txt的文件
lsof -a -u root -d txt
查看22端口的进程的当前运行状况
lsof -i :22
查看包含指定IP的进程的当前运行状况
lsof -I @912.168.0.77

三.
sysstat工具
主要观察服务负载,cpu内存占用率,网络使用率,磁盘写入写出读取速度等
sysstat工具包含两类:即使统计工具(iostat,mpstat,sar)和累计统计工具(sar)
sar是sysstat系统的核心工具
在/usr/lib/sa/目录下有三个工具:sa1;sa2;sadc.默认是以如下方式使用的
1.在守护进程/etc/rc.d/init.d/sysstat中使用/usr/lib/sa/sadc -F -L -命令创建当日日志文件,文件为/var/log/sa/saDD;当系统重启后会向该文件中输出相关的行信息
2.在cron任务/etc/cron.d/sysstat中每隔10分钟执行一次/usr/lib/sa/sa1 1 1命令,将信息写入/var/log/sa/saDD中
3.在cron任务/etc/cron.d/sysstat中每天23:53分执行一次/usr/lib/sa/sa2 -A 命令,将当天的汇总信息写入/var/log/sa/saDD中
可以修改/etc/cron.d/sysstat以适应需要
另外:/var/log/sa/saDD是二进制文件,只能使用sa或sadf命令查看

1.sar命令
sar是目前最全面的系统分析工具之一
sar [-A] [-b] [-B] [-c] [-d] [-i interval] [-p] [-q] [-r] [-R] [-t] [-u] [-v] [-V] [-w] [-W] [-y] [-n {DEV|EDEV|NFS|NFSD|SOCK|ALL}] [-x {pid|SELF|ALL}] [-X {pid|SELF|ALL}] [-I {irq|SUM|ALL|XALL}] [-p {cpu|ALL}] [-o [filename]|-f[filename]] [-s hh:mm:ss] [-e hh:mm:ss] [interval [count]]
-A 所有的
-b 显示I/O和传输速率的统计信息
-B 输出内存页面的统计信息
-c 输出进程统计的信息,每秒创建的进程信息
-d 输出每一个块设备的进程信息、
-i 指定时间间隔,s
-p 显示友好设备名称,可以和-n或-d结合使用
-q 输出进程队列长度和平均负载状态统计信息
-r 输出内存和交换空间的统计信息
-R 输出内存页面的统计信息
-t 读/var/log/sa/saDD信息时显示其中记录的原始时间,如果没有这个参数,则使用用户的本地时间
-u 是出cpu使用情况的统计信息
-v 输出inode,文件和其他内核表的统计信息
-V 输出版本信息
-w 输出系统交换活动信息
-W 输出系统交换的统计信息
-y 输出tty设备的活动信息
[-n {DEV|EDEV|NFS|NFSD|SOCK|ALL}]
DEV 报告网络设备的统计信息
EDEV 报告网络设备错误的统计信息
NFS 报告NFS客户端的活动统计信息
NFSD 报告NFS服务器端的活动统计信息
SOCK 报告网络套接字的使用统计信息
ALL 报告所有类型的网络活动统计信息
[-X {pid|SELF|ALL}] 输出指定进程的子进程的统计信息
[-I {irq|SUM|ALL|XALL}] 输出指定中断(中断号,每秒接受到的中断总数,输出的前16个中断,指定输出的全部中断信息)的统计信息
[-p {cpu|ALL}] cpu统计信息
-o [filename] 将输出信息保存到指定的文件
-f[filename] 从指定文件中读取数据信息,该文件是-o选项生成的
-s -e 是输出统计信息的开始和结束时间

示例:
1》从/var/log/sa/saDD中读取累计统计信息
sar

sar -u
输出项说明:
all 表示统计信息为所有CPU的平均值  
%user 在用户级别运行使用CPU总时间的百分比
%nice  在用户级别,用于nice操作,使用CPU总时间的百分比
%system 在核心级别运行所使用CPU总时间的百分比
%iowait 用于等待I/O操作占用CPU的总时间的百分比;值过高,表示硬盘存在I/O瓶颈
%steal  管理程序为另一个虚拟进程提供服务而等待虚拟CPU的百分比
%idle  显示CPU空闲时间占用CPU总时间的百分比;若该值过高但是系统相应慢,表示内存容量低;若该值持续低于10,表示最需要改善的资源是CPU

sar -b 显示I/O 和传输速率的统计信息
输出项说明:
tps 每秒钟物理设备的I/O传输总量
rtps 每秒钟从物理设备读入的数据总量
wtps 每秒钟向物理设备写入的数据总量
bread/s 每秒钟从物理设备读入的数据总量,单位为块/s
bwrtn/s 每秒钟向物理设备写入的数据总量,单位为块/s


输出内存页面的统计信息
sar -B
输出项说明:
pgpgin/s 每秒钟从磁盘读入的系统页面的KB总数
pgpgout/s 每秒钟向磁盘写出的系统页面的KB总数
fault/s 每秒钟产生的页面失效(major+minor)数量
fmajflt/s 每秒钟产生的页面失效(major)数量


输出每秒创建的进程数的进程统计信息
sar -c


输出网络设备状态的统计信息
sar -n DEV |grep eth0
输出项说明:
IFACE 网络设备名
rxpck/s 每秒接受的包总数
txpck/s 每秒传输的包总数
rxbyt/s 每秒接受的字节总数
txbyt/s 每秒传输的字节总数
txcmp/s 每秒传输压缩包的总数
rxmcst/s 每秒接受的多播包的总数


输出网络设备状态的统计信息(查看网络设备故障)
sar -n EDEV |grep 'eth0|IFACE'
输出项说明:
rxerr/s 每秒接受的坏包总数
txerr/s 传输包时每秒发生错误的总数
coll/s 传输包时每秒发生冲突的总数
rxdorp/s 接受包时,由于缺乏缓存,每秒丢弃包的数量
txdorp/s 传输包时,由于缺乏缓存,每秒丢弃包的数量
txcarr/s 传输包时,每秒发生的传输错误的数量
rxfram/s 接收包时,每秒发生帧校验错误的数量
rxfifo/s 接受包时,每秒发生队列溢出包的数量
txfifo/s 传输包时,每秒发生队列溢出包的数量


输出进程队列长度和平均负载状态统计信息
sar -q
输出项说明
runq-sz :运行队列的长度(等待运行的进程数)
plist-sz :进程列表中进程和线程的数量
ldavg-l:最后一分钟的系统平均负载
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载

 

输出内存和交换空间的统计信息
sar -r
输出项说明
kbmemused 不包含内核使用的内存
kbbuffers 内核缓冲区使用的内存数量 单位是kb
kbcached 内核高速缓存数据使用的内存数量
kbswpcad 交换空间的高速缓存使用的内存数量


输出内存页面的统计信息
sar -R
输出项说明:
frmpg/s空闲的内存的页面
bufpg/s 缓冲区附加内存页面数量
campg/s 高速缓存的附加内存页面数量

 

输出inode、文件和其他内核表的信息
sar -v
输出项说明
dentunusd:目录高速缓存中未被使用的条目数量
file-sz:文件句柄的使用数量
inode-sz:i节点句柄的使用数量
super-sz:由内核分配的超块句柄数量
%super-sz:已分配的超级块句柄占总超级块句柄的百分比
dquot-sz:已经分配的磁盘限额条目数量
%dquot-sz:分配的磁盘限额条目数量占总磁盘限额条目的百分比
risig-sz:已排队的RT信号的数量
%risig-sz已排队的RT信息占总RT信号的百分比

 

输出系统交换活动信息
sar  -w
输出项说明
cswch/s:每秒的系统上下文切换数量

 

输出系统交换的统计信息
sar -W
输出项说明
pswpin/s:每秒系统换入的交换页面数量
pswpout/s:每秒系统换出的交换页面数量

 

输出TTY设备的活动信息
sar -y
输出项说明
rcvin/s 每秒接受的中断数量
xmtin/s 每秒传送的中断数量
framerr/s 每秒发生的帧错误数量
prtyerr/s 每秒发生的奇偶校验错误数量
brk/s 每秒发生的暂停数量
ovrun/s 每秒发生的溢出错误数量

 

显示全面的累计统计信息
sar -A

默认配置不提供的累计统计信息
sar -d
sar -x ALL
sar -X ALL

注意:
默认/usr/lib/sa/sadc没有记录每一块设备的统计信息
可以在-d -x -X参数后面添加取样参数获得即时统计信息
带有-x -X的sar命令从来不能被记录到二进制统计数据文件

 

2》查看即时统计信息
使用取样选项查看即时统计信息

例如每30秒取样一次,连续取样5次
sar -n DEV 30 5
sar -u 30 5

输出和读取统计信息文件
sar -u 3 5 -o sar-dump-001
sar -u -f sar-dump-001

输出每一块设备的活动信息
sar -dp 5 2
输出项说明:
tps 每秒物理设备的I/O传输总量
rd_sec/s 每秒从设备读取的扇区(sector)数量
wr_sec/s 每秒向设备写入的扇区数量
avgrp-sz 发给设备请求的平均扇区数量
avgqu-sz 发给设备请求的平均队列长度
await 设备I/O的平均等待时间(单位是毫秒)
svctm 设备I/O的平均服务时间(单位是毫秒)
%util 在I/O发送给设备期间,占用CPU时间的百分比,用于体现设备的带宽利用率
当avgqu-sz值较低时,设备的利用率较高
当%util的值接近100%时,表示设备带宽已经占满

要判断一个系统的瓶颈问题,有时需要将几个sar命令结合起来使用,例如:
怀疑CPU存在瓶颈,可用sar -u和sar -q 等来查看
怀疑内存存在瓶颈,可用sar -B,sar -r和sar -W 等来查看
怀疑I/O存在瓶颈,可用sar -b,sar -u和sar -d等来查看


2.iostat命令
用于输出CPU和磁盘I/O相关的统计信息,命令格式:
iostat [-c |-d] [-k |-m] [-t] [-V] [-x] [device [...]|ALL] [-p [device |ALL]] [interval [account]]
-c 仅显示CPU统计信息;-d仅显示磁盘统计信息,和-c排斥;-k 以k为单位,-m以M为单位,默认都是块;
 [-p [-device |ALL]]显示块设备及系统分区的统计信息,与-x排斥;-t 输出信息时显示搜集时间;-V 显示版本;-x显示扩展信息
输出项说明:
%iowait :CPU等待硬件I/O所占用CPU的百分比
设备扩展部分:
rrqm/s 将读入请求合并后,每秒发送到设备的读入请求数
wrqm/s 将写入请求合并后,每秒发送到设备的写入请求数
r/s 每秒发送到设备的读入请求数
w/s 每秒发送到设备的写入请求数
rsec/s 每秒从设备读入的扇区数
wsec/s 每秒向设备写入的扇区数
rkB/s 每秒从设备读入的数据量,单位是k
wkB/s  rMB/s wMB/s 类似
avgrq-sz 发送到设备的请求的平均大小,单位是扇区
avgqu-sz 发送到设备的请求的平均队列长度
await I/O请求平均执行时间,包括发送请求和执行的时间,单位为毫秒
svctm 发送到设备的I/O请求平均执行时间,单位为毫秒
%util 接近100%,表示设备带宽已经占满

使用示例:
显示一条包含所有的CPU和设备吞吐率的统计信息
iostat

每隔5秒显示一次设备吞吐率的统计信息,默认以块为单位
iostat -d 5

每隔5秒显示一次设备吞吐率的统计信息,单位为k,输出3次
iostat -dk 5 3

每隔2秒显示一次sda及上面所有分区的统计信息,共输出5次
iostat -p sda 2 5

每隔2秒显示一次sda,sdb及上面所有分区的统计信息,共输出5次
iostat -p sda sdb 2 5


3.mpstat命令
输出每一个CPU的运行状态,为多处理器系统中的CPU利用率提供统计信息
mpstat [-P {CPU|ALL}] [-V] [interval [count]]
[-P {CPU|ALL}]用CPU-ID指定CPU,从0开始

使用示例:
mpstat
mpstat -P 0
mpstat 2 5
mpstat -P ALL 2 5
mpstat -P 1 2 5

四 psacct工具
使用此软件包提供的工具监视所有用户使用的命令,包括CPU时间和内存占用,实现进程记账功能。
三个进程活动监视工具:ac,lastcomm,sa
accton用于打开或关闭进程记账功能,是运行lastcomm,sa命令的前提。执行一次,打开;再执行一次,关闭。CentOs提供了一个init脚本执行accton,可以使用service psacct start|stop,默认是关闭的。可以使用chkconfig acct on开机启动
通常使用时才打开此进程记账功能,不用时就关闭
lastcomm和sa默认从进程记账文件/var/account/pacct中读取数据,是为二进制文件;系统提供/etc/logrotate/psacct脚本用cron来实现进程记账功能的滚动
ac 从/var/log/wtmp中读取数据,也是二进制文件

1.lastcomm命令
lastcomm [command] [username] [terminal]
分别是指定命令,指定用户执行的命令,指定有中断发出的命令
参数之间是“或”的关系,可以使用“--strict-match”参数改成“与”的关系,精确匹配

使用示例:
lastcomm
lastcomm tty1 root --strict-match
lastcomm ac osmond pts/1 --strict-match  :显示pts/1终端上ac用户执行的名为ac的命令
说明:后面显示的时间是使用的CPU时间和进程开始的时间;标志:S由超级用户执行;F有fork执行,但是没有exec(执行);D命令终止并生成一个core核心文件;X命令被SIGTERM信号终止

2.sa命令
说明字段含义:
calls--命令的调用次数

记账设备搜集的信息:
re--实际使用时间(分)
cpu--通常简写为cp,表示用户和系统时间之和(分)
k--平均CPU时间(k)
u--用户CPU时间(分)
s--系统CPU时间(分)

command--调用的命令
不带任何参数的sa命令,将显示calls,re,cpu,k和command字段,以CPU字段排序,并将只用过一次的命令放在***other类别中显示
命令格式:sa [参数]
-a 显示所有命令的名称
-c 同时显示百分比字段
-l 将CPU时间字段拆分为系统时间和用户时间两个字段显示
-t 同时显示实际使用时间与CPU总时间之比,即re/cp
-u 忽略所有其他参数并显示每个命令执行时的CPU时间
-m 显示每个用户的汇总信息
--sort-real-time 将输出按实际使用的时间进行排序
-b 按用户和系统时间的总和除以调用次数进行排序,即cp/calls
-k 按平均CPU时间排序
-n 按命令的调用次数进行排序
-r 按逆序排序,可与其他排序参数一起使用
如果在命令中指定了不止一个排序参数,那么只有最后那个参数生效

使用示例:
sa
sa -c
sa -l
sa -t
sa --sort-real-time (按实际使用时间排序)
sa -b
sa -k
sa -n
sa -nr
sa -u
sa -m

注意:可以通过查看re,k,cp/cpu等字段的值找出可疑的活动,如:某个用户或某个命令占用了所有的CPU时间;如果某个命令的CPU时间和内存使用在不断的增加,说明此命令存在问题

3.ac命令
ac命令根据/var/log/wtmp文件中的登陆时间和退出时间记录计算并输出用户的连接时间和总计连接时间
记账文件/var/log/wtmp由init和login维护。ac和login均不生成/var/log/wtmp文件,若记账文件不存在,则不作记账工作
请用info accounting 命令了解GNU ac和其他系统上的ac在输出上的不同
默认CentOs在/etc/logrotate.conf中配置了此文件的日志滚动

命令格式:ac [参数]
-d 为每天输出一个总计时间
-p 为每个用户输出总计时间,并在最后追加一个所有用户的总计时间
-a 输出每天的记录,而不忽略没有登陆活动的日子
-y 在显示时期时输出年份
-z 显示值为0的类别统计(除了全部统计),默认禁止输出值为0的统计
userlist 显示指定用户的连接时间。多个用户之间使用空格间隔,不允许使用通配符

使用示例:
ac
ac crq 显示用户crq的信息
ac crq osmond
ac -p
ac -p crq osmond
ac -d
ac -dyp

为了读取日志文件/var/log/wtmp,CentOs在SysVinit软件包中还提供了last和lastb两个命令

你可能感兴趣的:(系统性能监控常用命令)