监控调优工具详细参数整理


系统性能分析标准
性能影响因素 好 坏 糟糕
CPU user%+sys%<70% user%+sys%=85% user%+sys%>=90%
内存 Swap In(si)=0 Per CPU with 10page/s More Swap In & Swap Out
Swap Out(so)=0
磁盘 iowait% <20% iowait% >30% iowait% >50%
user%:表示CPU处在用户模式下的百分比
sys%:表示CPU处在系统模式下的百分比
iowait%:表示CPU等待输入输出完成时间的百分比
Swap In(si):虚拟内存页的导入,即从SWAP DISK交换到RAM
Swap Out(so):虚拟内存页的导出,即从RAM交换到SWAP DISK
vmstat中 bi+bo参考值为1000 如果大于1000,而且wa值比较大,说明I/O有问题,应该提高磁盘的读写能力

cat /proc/cpuinfo
cat /proc/meminfo
硬盘 fdisk -l
更详细 hdparm -i /dev/sda1
参考:http://salogs.com/category/linux%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86/page/4/

一、sysstat工具包
sysstat 工具包中包含两类工具:
即时查看工具:iostat、mpstat、pidstat、sar
累计统计工具:sar
也就是说,sar 具有这两种功能。因此,sar 是 sysstat 中的核心工具。

1、iostat
http://blog.sina.com.cn/s/blog_5f8238650100sn9a.html
http://www.ha97.com/4546.html

1)选项说明
-c 仅显示CPU统计信息。与-d选项互斥。
-d 仅显示磁盘统计信息。与-c选项互斥。
-k 以KB为单位显示每秒的磁盘请求数。默认单位块。
-m 以MB为单位显示每秒的磁盘请求数。默认单位块。
-p {device|ALL} 用于显示块设备及系统分区的统计信息。与-x选项互斥。
-t 在输出数据时,打印搜集数据的时间。
-V 打印版本号信息。
-x 输出扩展信息
# iostat -x
# iostat -x 1
# iostat -x 1 3 #1秒刷新一次,刷新3次


2)普通输出(直接打iostat的输出)
tps:表示发送至逻辑磁盘的I/O请求数
该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。
“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。
kB_read/s:每秒读写该磁盘逻辑驱动器的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量
kB_wrtn:写入的总数量数据量;

3)-x 输出说明
#-m 单位为MB/s -k 单位为kB/s
# iostat -d -x -m 1 10
# iostat -d -x -k 1 10
Linux 2.6.32-220.el6.i686 (pxe-svr.skylog.cn) 06/25/2013 _i686_ (1 CPU)

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 2.09 1.21 3.60 0.54 88.89 7.03 46.30 0.03 7.47 5.14 2.13
sdb 0.07 0.00 0.21 0.00 0.68 0.00 6.46 0.00 0.37 0.37 0.01
sdc 0.11 0.00 0.29 0.00 0.97 0.00 6.62 0.00 0.48 0.48 0.01
dm-0 0.00 0.00 1.48 0.44 21.77 1.77 24.44 0.02 8.86 3.63 0.70
dm-1 0.00 0.00 0.21 0.00 0.82 0.00 8.00 0.00 1.35 1.35 0.03
dm-2 0.00 0.00 0.08 0.00 0.31 0.00 7.94 0.00 0.82 0.82 0.01
dm-3 0.00 0.00 0.13 0.04 0.52 0.17 7.97 0.00 8.82 1.51 0.03

单个磁盘和单个磁盘和分区
-p为要显示盘下面的分区IO
iostat -d sda -x -m 1 10
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.01 4.64 0.26 6.30 0.00 0.04 12.87 0.04 5.96 4.81 3.16
盘的分区
# iostat -d -p sda -x -m 1 10
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.01 4.64 0.26 6.30 0.00 0.04 12.87 0.04 5.96 4.81 3.16
sda1 0.00 0.00 0.00 0.00 0.00 0.00 43.16 0.00 37.52 3.74 0.00
sda2 0.01 4.63 0.26 5.19 0.00 0.04 15.48 0.02 4.16 2.91 1.58
sda3 0.00 0.00 0.00 0.01 0.00 0.00 21.19 0.00 2.90 2.75 0.00

输出数据解释
rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数.即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数.即 delta(wio)/s
rsec/s: 每秒读扇区数.即 delta(rsect)/s
wsec/s: 每秒写扇区数.即 delta(wsect)/s
rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节.(需要计算)
wkB/s: 每秒写K字节数.是 wsect/s 的一半.(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区).delta(rsect+wsect)/delta(rio+wio) 平均队列长度
avgqu-sz: 平均I/O队列长度.即 delta(aveq)/s/1000 (因为aveq的单位为毫秒).
await: 平均每次设备I/O操作的等待时间 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio) 平均服务时
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的.即 delta(use)/s/1000 (因为use的单位为毫秒)
在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

4)瓶颈排查
别人一个不错的例子.(I/O 系统 vs. 超市排队)
举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5个人总比20人要快吧? 除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了.还有就是收银员的速度了,如果碰上了连钱都点不清楚的新手,那就有的等了.另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的).

I/O 系统也和超市排队有很多类似之处:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例.

我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间.

结论:
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈.
idle小于70% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
另外 await 的参数也要多和 svctm 来参考.差的过高就一定有 IO 的问题.
avgqu-sz 也是个做 IO 调优时需要注意的地方,这个就是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小.如果数据拿的大,才IO 的数据会高.也可以通过 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s.也就是讲,读定速度是这个来决定的.

5)、【总结关注的几个数据】:
rkB/s: 每秒读K字节数
wkB/s: 每秒写K字节数
平均等待时间(await): 一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了
平均I/O数据(avgrq-sz):
%util: 一秒中有百分之多少的时间用于I/O操作,接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈.
这个结合,vmstat 查看查看io参数(等待资源的进程数【io】bi+bo参考值为1000 如果大于1000)和wa参数【top命令】(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)

7)、提高I/O利用率的方法
磁盘I/O利用率,网络I/O利用率
提供磁盘I/O的方法
更改转速的磁
更大磁盘cache
更大的I/O控制器cache
软件raid
硬件RAID


2、mpstat
mpstat 的命令格式
mpstat 输出每一个 CPU 的运行状况,为多处理器系统中的 C PU 利用率提供统计信息。命令格式为:
mpstat [ -P { cpu | ALL } ] [ -V ] [ interval [ count ] ]
mpstat 1 5 #间隔1秒刷新一次,刷新5次 总的
mpstat -P ALL 1
mpstat -P 3 1
# mpstat -P 3 1
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/05/2013 _x86_64_ (4 CPU)

04:03:08 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
04:03:09 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
04:03:10 PM 3 17.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 83.00
04:03:11 PM 3 0.00 0.00 0.00 37.37 0.00 0.00 0.00 0.00 62.63

CPU 在多CPU系统里,每个CPU有一个ID号,第一个CPU为0。all表示统计信息为所有CPU的平均值。
%user 显示在用户级别运行所占用CPU总时间的百分比。
%nice 显示在用户级别,用于nice操作,所占用CPU总时间的百分比。
%sys 显示在kernel级别运行所占用CPU总时间的百分比。注意:这个值并不包括服务中断和softirq。
%iowait 显示用于等待I/O操作时,占用CPU总时间的百分比。
%irq 显示用于中断操作,占用CPU总时间的百分比。
%soft 显示用于softirq操作,占用CPU总时间的百分比。
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle 显示CPU在空闲状态,占用CPU总时间的百分比。
intr/s 显示CPU每秒接收到的中断总数。

3、pidstat 查看进程的各种资源状态
pidstat主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858874.html

pidstat命令指定采样周期和采样次数,命令形式为”pidstat [option] interval [count]”
选项option
-C comm Display only tasks whose command name includes the string comm
-p pid
使用命令字符串不够精准,最好使用pid,比如多个python程,但是在多个进程的程序大有用处
比如apache/nginx 多个进程
1)cup状态
pidstat 不指定类型默认为cpu
pidstat 1 间隔1秒刷新一次
pidstat -p 2288 显示PID为2288进程的cpu状态
pidstat -p 2288 1 间隔1秒刷新显示PID为2288进程的cpu状态 不指定类型默认是cpu
pidstat -u 显示所有进程CPU状态
pidstat -u -p 2288 1 5 【间隔1秒刷新显示PID为2288进程的cpu状态,显示5次】
pidstat -d -C mysqld 1 10 间隔1秒刷新显示命令包含mysqld字符串进程的cpu状态,显示10次】
输出格式
# pidstat -u -p 15914 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

02:47:28 PM PID %usr %system %guest %CPU CPU Command
02:47:29 PM 15914 0.00 0.00 0.00 0.00 1 mysqld
02:47:30 PM 15914 0.00 0.00 0.00 0.00 1 mysqld
%usr 进程用户空间占用CPU百分比 user level (application)
%system 进程内核空间占用CPU百分比 system level (kernel)
%guest 比例的CPU在任务在虚拟机(运行一个虚拟处理器) in virtual machine (running a virtual processor)
%CPU 任务总的CPU百分比,如果使用多CPU环境,CPU使用量还要除总的CPU数量,简单的说就是TASK单个CPU使用量
CPU 程序使用的CPU

2)内存
pidstat -r 显示所有进程内存相关
pidstat -p 15914 -r 1 10 【间隔1秒刷新显示PID为2288进程的内存状态,连续显示10次】
pidstat -r -C mysqld 1 10
输出格式
#pidstat -p 15914 -r 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

03:20:21 PM PID minflt/s majflt/s VSZ RSS %MEM Command
03:20:22 PM 15914 2.00 0.00 1824440 47364 0.81 mysqld
03:20:23 PM 15914 0.00 0.00 1824440 47364 0.81 mysqld
minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数
majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生
VSZ: 该进程使用的虚拟内存(以kB为单位)
RSS: 该进程使用的物理内存(以kB为单位)
%MEM: 该进程使用内存的百分比

3)io状态
pidstat -d 显示所有进程IO
pidstat -d -p 2288 1 【间隔1秒刷新显示PID为2288进程的IO状态】
pidstat -d -p 2288 1 10 【间隔1秒刷新显示PID为2288进程的IO状态,连续显示10次】
pidstat -d -C mysqld 1 10
输出格式
# pidstat -d -p 15914 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

03:02:16 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command
03:02:17 PM 15914 0.00 36.00 32.00 mysqld
03:02:18 PM 15914 0.00 0.00 0.00 mysqld
kB_rd/s:每秒进程从磁盘读取的数据量(以kB为单位)
kB_wr/s:每秒进程向磁盘写的数据量(以kB为单位)
kB_ccwr/s:man的说明为 写入磁盘的已取消的任务的字节数量,这可能发生在当任务有些脏pagcache截断。

4)其他
-w上下文交换
pidstat -p 15914 -w 1

-l 显示命令和完整参数
Display the process command name and all its arguments.
# pidstat -p 15914 -l
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

03:27:01 PM PID %usr %system %guest %CPU CPU Command
03:27:01 PM 15914 0.02 0.01 0.00 0.02 0 /usr/libexec/mysqld --basedir=/usr --datadir=/data/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysql

pidstat -I as displayed by option -u
以为是指定使用那个CPU的进程状态,结果不是。man描述的也不好理解
pidstat -u -I 1
pidstat -I 1
看到的信息,应该活跃进程CPU信息
要看单个CPU使用信息使用:mpstat -P 3 1


4、sar
http://www.ctohome.com/FuWuQi/1b/688.html
为了实现sar的累计统计,系统必须周期地记录当时的信息,这是通过调用 /usr/lib/sa/(/usr/lib64/sa/)中的三个工具实现的:
sa1 :收集并存储每天系统动态信息到一个二进制的文件中,用作sadc的前端程序
sa2 :收集每天的系统活跃信息写入总结性的报告,用作sar的前端程序
sadc :系统动态数据收集工具,收集的数据被写入一个二进制的文件中,它被用作 sar 工具的后端
在 CentOS 系统的默认设置中,以如下的方式使用这三个工具:
在守护进程 /etc/rc.d/init.d/sysstat 中使用 /usr/lib/sa/sadc -F -L - 命令创建当日记录文件,文件为 /var/log/sa/saDD,其中 DD 为当天的日期。当系统重新启动后,会向文件 /var/log/sa/saDD 输出类似 11:37:16 AM LINUX RESTART 这样的行信息。
在 cron 任务 /etc/cron.d/sysstat 中每隔10分钟执行一次 /usr/lib/sa/sa1 1 1 命令,将信息写入文件 /var/log/sa/saDD
在 cron 任务 /etc/cron.d/sysstat 中每天 23:53 执行一次 /usr/lib/sa/sa2 -A 命令,将当天的汇总信息写入文件 /var/log/sa/saDD

累计统计工具:sar
常用选项:
选项 说明
-A 等价于 -bBcdqrRuvwWy -I SUM -I XALL -n ALL -P ALL
-b 显示I/O和传送速率的统计信息
-B 输出内存页面的统计信息
-c 输出进程统计信息,每秒创建的进程数
-d 输出每一个块设备的活动信息
-i interval 指定间隔时长,单位为秒
-p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np
-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 报告网络套接字(sockets)的使用统计信息
ALL 报告所有类型的网络活动统计信息
-x {pid|SELF|ALL} 输出指定进程的统计信息。 【6的版本不支持该参数,5的支持,程序版本一样】
pid 用 pid 指定特定的进程
SELF 表示 sar 自身
ALL 表示所有进程
-X {pid|SELF|ALL} 输出指定进程的子进程的统计信息
-I {irq|SUM|ALL|XALL} 输出指定中断的统计信息。
irq 指定中断号
SUM 指定输出每秒接收到的中断总数
ALL 指定输出前16个中断
XALL 指定输出全部的中断信息
-P {cpu|ALL} 输出指定 CPU 的统计信息
-o filename 将输出信息保存到文件 filename
-f filename 从文件 filename 读取数据信息。filename 是使用-o 选项时生成的文件。
-s hh:mm:ss 指定输出统计数据的起始时间
-e hh:mm:ss 指定输出统计数据的截至时间,默认为18:00:00


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

sar -R 输出内存页面的统计信息
输出信息说明:
frmpg/s 每秒系统中空闲的内存页面(memory page freed)数量
bufpg/s 每秒系统中用作缓冲区(buffer)的附加内存页面(additional memory page)数量
campg/s 每秒系统中高速缓存的附加内存页面(additional memory pages cached)数量

sar -w 输出系统交换活动信息
输出信息说明:
proc/s
cswch/s 每秒的系统上下文切换数量
sar -w
pswpin/s 每秒系统换入的交换页面(swap page)数量
pswpout/s 每秒系统换出的交换页面(swap page)数量

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

sar -c 输出每秒创建的进程数的进程统计信息
[root@cnetos5 ~]# sar -c
Linux 2.6.18-53.el5 (cnetos5) 01/22/2008
这里参数5上有,6上面没有了


几个重点CPU/内存/IO
1)CPU
sar -C 1 10
sar -u 输出CPU使用情况的统计信息 5版本可以指定-x pid
# sar -u 1 10 #1秒输出1次信息,输出10次
# sar -u 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

04:44:13 PM CPU %user %nice %system %iowait %steal %idle
04:44:14 PM all 0.00 0.00 0.00 0.00 0.00 100.00
04:44:15 PM all 0.25 0.00 0.50 0.00 0.00 99.25
CPU all 表示统计信息为所有 CPU 的平均值。
%user 显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle 显示 CPU 空闲时间占用 CPU 总时间的百分比。

1). 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
2). 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
3). 若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU输出内存页面的统计信息输出内存页面的统计信息


-P 指定CPU
# sar -P ALL 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

05:07:49 PM CPU %user %nice %system %iowait %steal %idle
05:07:50 PM all 5.75 0.00 0.25 2.00 0.00 92.00
05:07:50 PM 0 5.00 0.00 0.00 0.00 0.00 95.00
05:07:50 PM 1 0.98 0.00 0.98 0.00 0.00 98.04
05:07:50 PM 2 1.01 0.00 0.00 0.00 0.00 98.99
05:07:50 PM 3 16.83 0.00 0.00 8.91 0.00 74.26

# sar -P 2 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

05:08:05 PM CPU %user %nice %system %iowait %steal %idle
05:08:06 PM 2 0.00 0.00 0.00 0.00 0.00 100.00
05:08:07 PM 2 0.00 0.00 0.00 0.00 0.00 100.00
05:08:08 PM 2 0.00 0.00 0.00 0.00 0.00 100.00

2)内存相关
(1)输出内存和交换空间的统计信息
sar -r 输出内存和交换空间的统计信息
[root@control ~]# sar -r 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/05/2013 _x86_64_ (4 CPU)

02:19:38 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
02:19:39 PM 748008 5120484 87.25 301384 2302060 4059852 33.80
02:19:40 PM 748000 5120492 87.25 301384 2302060 4059852 33.80
02:19:41 PM 748000 5120492 87.25 301384 2302060 4059852 33.80
02:19:42 PM 748000 5120492 87.25 301384 2302060 4059852 33.80

输出信息说明:
kbmemfree 可用的空闲内存数量,单位为 KB
kbmemused 已使用的内存数量(不包含内核使用的内存),单位为 KB
%memused 已使用内存的百分数
kbbuffers 内核缓冲区(buffer)使用的内存数量,单位为 KB
kbcached 内核高速缓存(cache)数据使用的内存数量,单位为 KB
kbswpfree 可用的空闲交换空间数量,单位为 KB
kbswpused 已使用的交换空间数量,单位为 KB
%swpused 已使用交换空间的百分数
kbswpcad 交换空间的高速缓存使用的内存数量
注意:%memused的百分比为kbmemfree/kbmemfree+kbmemused


(2)输出内存页面的统计信息
5版本可以指定-x pid
# sar -B 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

04:49:32 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
04:49:33 PM 0.00 15.84 35.64 0.00 83.17 0.00 0.00 0.00 0.00
04:49:34 PM 0.00 121.21 65.66 0.00 116.16 0.00 0.00 0.00 0.00
04:49:35 PM 0.00 84.00 37.00 0.00 87.00 0.00 0.00 0.00 0.00
pgpgin/s 每秒钟从磁盘读入的系统页面的 KB 总数
pgpgout/s 每秒钟向磁盘写出的系统页面的 KB 总数
fault/s 系统每秒产生的页面失效(major + minor)数量
majflt/s 系统每秒产生的页面失效(major)数量

(3)输出内存页面的统计信息
# sar -R
frmpg/s 每秒系统中空闲的内存页面(memory page freed)数量
bufpg/s 每秒系统中用作缓冲区(buffer)的附加内存页面(additional memory page)数量
campg/s 每秒系统中高速缓存的附加内存页面(additional memory pages cached)数量
cswch/s 每秒的系统上下文切换数量

(4)输出系统交换活动信息
# sar -w
cswch/s 每秒的系统上下文切换数量

(5) 输出系统交换的统计信息
sar -W
pswpin/s 每秒系统换入的交换页面(swap page)数量
pswpout/s 每秒系统换出的交换页面(swap page)数量

3) 显示I/O和传送速率的统计信息
5版本可以指定-x pid
# sar -b 1 10
Linux 2.6.32-279.22.1.el6.x86_64 (control.skylog.com) 07/04/2013 _x86_64_ (4 CPU)

04:52:22 PM tps rtps wtps bread/s bwrtn/s
04:52:24 PM 0.00 0.00 0.00 0.00 0.00
04:52:25 PM 44.44 0.00 44.44 0.00 339.39
04:52:26 PM 14.00 0.00 14.00 0.00 112.00
tps 每秒钟物理设备的 I/O 传输总量
rtps 每秒钟从物理设备读入的数据总量
wtps 每秒钟向物理设备写入的数据总量
bread/s 每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s 每秒钟向物理设备写入的数据量,单位为 块/s

4) 输出每一个块设备的活动信息
sar -d 1 10 输出每一个块设备的活动信息
05:08:04 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
05:08:05 AM dev8-0 346.53 2788.12 26724.75 85.17 41.37 143.47 2.86 99.21
05:08:05 AM dev8-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
05:08:05 AM dev8-2 346.53 2788.12 26724.75 85.17 41.37 143.47 2.86 99.21
05:08:05 AM dev253-0 640.59 2661.39 27976.24 47.83 58.81 108.07 1.55 99.21
05:08:05 AM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00


5)输出网络设备状态的统计信息 sar -n DEV
[root@cnetos5 ~]# sar -n DEV |grep eth0
12:00:01 AM IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
12:10:01 AM eth0 0.59 0.92 41.57 893.98 0.00 0.00 0.00
12:20:01 AM eth0 0.55 0.88 37.50 859.56 0.00 0.00 0.00
12:30:01 AM eth0 0.55 0.86 38.17 871.98 0.00 0.00 0.00
Average: eth0 0.29 0.42 21.05 379.29 0.00 0.00 0.00
IFACE 网络设备名
rxpck/s 每秒接收的包总数
txpck/s 每秒传输的包总数
rxbyt/s 每秒接收的字节(byte)总数
txbyt/s 每秒传输的字节(byte)总数
rxcmp/s 每秒接收压缩包的总数
txcmp/s 每秒传输压缩包的总数
rxmcst/s 每秒接收的多播(multicast)包的总数

5) 输出网络设备状态的统计信息(查看网络设备故障) sar -n EDEV
[root@control ~]# sar -n EDEV |egrep 'em1|IFACE'
12:00:01 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
12:10:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:20:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:30:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:40:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:50:01 AM em1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IFACE 网络设备名
rxerr/s 每秒接收的坏包总数
txerr/s 传输包时每秒发生错误的总数
coll/s 传输包时每秒发生冲突(collision)的总数
rxdrop/s 接收包时,由于缺乏缓存,每秒丢弃(drop)包的数量
txdrop/s 传输包时,由于缺乏缓存,每秒丢弃(drop)包的数量
txcarr/s 传输包时,每秒发生的传输错误(carrier-error)的数量
rxfram/s 接收包时,每秒发生帧校验错误(frame alignment error)的数量
rxfifo/s 接收包时,每秒发生队列(FIFO)一出错误的数量
txfifo/s 传输包时,每秒发生队列(FIFO)一出错误的数量

6)通过关键字 查看关键字信息
-n { keyword [,...] | ALL }
Report network statistics.

Possible keywords are DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6.

常用的参数:
cpu
sar -u
sar -u -P 1 1 10
内存
sar -r 1 10
IO
sar -b 1 10
sar -d 1 10
网络
sar -n DEV 1 10

二、procps 工具包
包括
/bin/ps
/sbin/sysctl
/usr/bin/free
/usr/bin/pgrep
/usr/bin/pkill
/usr/bin/pmap
/usr/bin/pwdx
/usr/bin/skill
/usr/bin/slabtop
/usr/bin/snice
/usr/bin/tload
/usr/bin/top
/usr/bin/uptime
/usr/bin/vmstat
/usr/bin/w
/usr/bin/watch

1、free
total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608
其中第一行用全局角度描述系统使用的内存状况:
total——总物理内存
used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存
free——完全未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加) ,对块文件读写才需要缓存
cached——缓存,用于已打开的文件 ,对文件系统缓存。
注意:
total=used+free
used=buffers+cached (maybe add shared also)
第二行描述应用程序的内存使用:

前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值
后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值
注意
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached

第三行表示swap的使用:
used——已使用
free——未使用

2、vmstat
使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。
http://os.51cto.com/art/201005/200672.htm
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。引申閱讀: http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
vmstat delay count
-d:显示磁盘相关统计信息。
-t:显示时间戳
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。
# vmstat 2 5 #间隔2秒,显示5次
vmstat -a 1
bi 从块读数据
bo 写入数据到块
bi+bo参考值为1000 如果大于1000,而且wa值比较大,说明I/O有问题,应该提高磁盘的读写能力

3、pmap
观察到系统中的指定进程的地址空间分布情况显示一个目标文件或者链接库文件中的目标文件的各个段的大小
pmap pid
-x show details
-d show offset and device number
-q quiet; less header/footer info
-V show the version number
-A limit results to the given range

4、其他工具
slabtop 动态显示内核 slab 缓存信息
tload
top
http://www.jb51.net/LINUXjishu/34604.html
uptime

三、lsof
参考:http://club.topsage.com/thread-234763-1-1.html
是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件
lsof
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

其中FD 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。其次数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为10。u 表示该文件被打开并处于读取/写入模式,而不是只读 ? 或只写 (w) 模式。同时还有大写 的W 表示该应用程序具有对整个文件的写锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2,分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 FD 都是从 3 开始。与 FD 列相比,Type 列则比较直观。文件和目录分别称为 REG 和 DIR。而CHR 和 BLK,分别表示字符和块设备;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。
常用的参数列表:
lsof filename 显示打开指定文件的所有进程 #lsof /data/mysql/ibdata1
lsof +d /DIR/ 显示目录下被进程打开的文件 [fuser] #lsof +d /data/mysql/
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长 #lsof +d /data/mysql/
lsof -a 表示两个参数都必须满足时才显示结果 #lsof -c http -a -u apache
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件 #lsof -c http
lsof -u username 显示所属user进程打开的文件 #lsof -umysql
lsof -g gid 显示归属gid的进程情况 #lsof -g 1
lsof -d FD 显示指定文件描述符的进程 #lsof -d mem#内存# lsof -d mem -a -u apache#httpd加载到内存中的库
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不只一个)
port --> 端口号 (可以不只一个)
lsof -i tcp:80 显示tcp80
lsof -i @192.168.1.1 显示IP的
lsof -i @192.168.1.20:62233 显示IP和端口
lsof -i tcp@192.168.1.200:1-10,smtp,99

在 FreeBSD 上有一个工具非常好用,叫做 sockstat。但是 Linux 过去一直没有人写这样的工具,
可以用 ‘lsof -i -n’ 或是 ‘netstat -anpe‘ 等指令来满足

关于文件描述符的补充
FD列中的文件描述符
cwd current working directory;
Lnn library references (AIX);
err FD information error (see NAME column);
jld jail directory (FreeBSD);
ltx shared library text (code and data);
Mxx hex memory-mapped type number xx.
m86 DOS Merge mapped file;
mem memory-mapped file;
mmap memory-mapped device;
pd parent directory;
rtd root directory;
tr kernel trace file (OpenBSD);
txt program text (code and data);
v86 VP/ix mapped file;
文件权限
r for read access;
w for write access;
u for read and write access;

与FD列相比,Type列则比较直观。
REG 文件
DIR 目录
CHR 字符 和 BLK,分别表示字符和块设备;
BLK 块设备
UNIX UNIX套接字
FIFO 先进先出FIFO队列
IPv4 网际协议IP套接字。
其他可以man


四、iotop
iotop 使用 Python 语言编写而成,要求 Python 2.5(及以上版本)和 Linux kernel 2.6.20(及以上版本)
可以用左右箭头操作,按r是相反方向,按o是只显示在IO的
用法 iotop -参数
-o, –only 只显示实际在IO的
-b, –batch 批量处理 用来记录日志的 打开非交互式模式。用于日志I/O使用时间。
-n NUM 设定循环几次 显示多少次后退出
-d SEC, –delay=SEC 设定显示时间间隔
-p PID, --pid=PID 显示指定进程的IO信息
-u USER, --user=USER 显示指定用户的IO信息
-P 显示进程,默认显示线程
-a 显示累计I/O而不是带宽。在这种模式下,iotop显示了数量的I / O过程所做的iotop以来开始。
-k 指定单位为K
-t, --time 每次都显示时间
-q, --quiet
suppress some lines of header (implies --batch). This option can be specified up to three times to remove header lines.
-q column names are only printed on the first iteration, 列名称只是印在第一次迭代,
-qq column names are never printed, 列名是从来没有打印
-qqq the I/O summary is never printed.不打印总结


常用
iotop -d 10 设置刷新时间
iotop -p 9816 -k 看单个进程
iotop -u root -k 看单个用户的
iotop -P 显示进程,默认显示线程
iotop -p 15914 -k -b -qqq -d 10 >> log1
写个脚将每天都记录到一个文本,然后再用另外一个脚本导入mongodb或者csv文件里

五、dstat
六、网络流量
iptraf
ntop一个python写的网络流量查看器 ,需要配置一些ip地址和启动服务
iptraf
ntop
服务端
[root@control ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
客户端
[root@compute01 ~]# iperf -c 192.168.1.100 -t 60 -i 5
------------------------------------------------------------
Client connecting to 192.168.1.100, TCP port 5001
TCP window size: 23.2 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.110 port 34324 connected with 192.168.1.100 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 5.0 sec 58.8 MBytes 98.6 Mbits/sec
[ 3] 5.0-10.0 sec 56.1 MBytes 94.2 Mbits/sec
[ 3] 10.0-15.0 sec 56.0 MBytes 94.0 Mbits/sec
[ 3] 15.0-20.0 sec 56.1 MBytes 94.2 Mbits/sec
行UDP 丢包率测试
iperf -c 192.168.1.100 -b 10M


七、tcptrace
netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输

十、strace
是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统呼叫及它所接收的系统信息。 strace是一个有用的小工具
参数说明:
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出.
-a column
设置返回值的输出位置.默认为40.

优质内容筛选与推荐>>
1、DIRECTX 9.0 家族成员
2、黄连解毒汤治疗月经过多
3、越过山丘才发现无人等候 倒计时84
4、TCP三次握手与Tcpdump抓包分析过程
5、亲爱的,你已够好,请为自己的好点赞


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号