《Linux 性能及调优指南》2.3 监控工具

时间:2020-12-14 04:32:16

翻译:飞哥 (http://hi.baidu.com/imlidapeng)

版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明。

原文名称:《Linux Performance and Tuning Guidelines》

原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html

-------------------------------------------------------------------------------------------

本章我们将讨论监控工具,这些工具大部分都来源于Linux企业版。你应该熟练掌握这些工具。

2.3.1 top

top命令显示实际进程的运行情况。在默认情况下,它显示服务器上占用CPU最多的任务并每5秒刷新列表一次。
​你也可以按PID(数值)、age(最新的排第一)、time(累计的时间)、常驻内存或时间(自启动开始进程所占用的CPU时间)排序。

《Linux 性能及调优指南》2.3 监控工具

你可以使用renice命令来修改进程的优先级。如果进程挂起或占据过多的CPU,你可以使用kill命令杀死此进程。

输出的栏位有:

PID:         进程ID

USER:      进程所有者的用户名

PRI:         进程优先级(参见1.1.4“进程优先级和Nice值”)

NI:           Nice值(Whether the process tries to be nice by adjusting the priority by the number given. See below for details.)

SIZE:       进程使用的内存大小(code+data+stack),单位为KB

RSS:        所使用的物理内存大小,单位为KB

SHARE:   与其它进程共享的内存大小,单位为KB

STAT:      进程状态:S=sleeping, R=running, T=stopped or traced,D=interruptible sleep, Z=zombie。在1.1.7“进程状态”讨论关于进程的状态

%CPU:    使用的CPU百分比

%MEM:    物理内存百分比

TIME:          进程使用的CPU时间(自从此启动)

COMMAND:启动任务所使用的命令(包括参数)

​top支持多个有用的热键,如下:

t:  隐藏或显示摘要信息

m:隐藏或显示内存信息

A:分类显示各种系统资源,可用于快速找出系统中影响性能的任务。

o:在交互模式下选择排序的栏位

r: renice命令

k: kill命令


2.3.2 vmstat

​vmstat能提供进程、内存、分页、块I/O、traps和CPU活动相关信息。
​vmstat命令可以显示平均值或实际取样值。使用取样频率和取样时间等参数启用vmstat取样模式。

注意:在取样模式中需要考虑实际数据搜集中存在误差的可能,设定较低的取样频率能减少这样的可能。

​实例2-2 vmstat输出示例

《Linux 性能及调优指南》2.3 监控工具

注释:vmstat输出结果中第一行展示的是自最后一次启动以来的平均值,所以此行可以忽略。

输出栏位如下:

Process(procs)

r :等待运行时间的进程数。
b :处于不可中断睡眠状态的进程数。

Memory

swpd :虚拟内存使用量(KB)。
free :空闲内存量(KB)。
buff :用作buffer的内存量(KB)。
cache :用作cache的内存量(KB)。

swap

si :从硬盘交换到内存的数量(KBps)。
so :交换到硬盘的内存数量(KBps)。

IO

bi:发送到块设备的块的数量(blocks/s)。
bo:从块设备获取的块的数量(blocks/s)。

System

in :每秒钟的中断数量,包括时钟中断。
cs :每秒钟上下文交换的数量。

CPU(整个CPU时间的百分比)

us :花费在非内核代码的CPU时间(用户时间,包括Nice时间)。
sy :花费在内核代码的CPU时间(系统时间)。
id :空闲时间。在2.5.41内核以前,还包括I/O等待时间。
wa :IO等待时间。在2.5.41内核以前,显示为0。

vmstat命令提供了许多命令行参数,使用man手册查看参数的详细文档。常用的参数有:

-m :显示内核的内存使用情况(slabs)

-a :显示活动和非活动内存分页相关信息

-n :只显示一次栏位名称行,当在取样模式通下将输出信息存储到文件时非常有用。(例如,root#vmstat –n 2 10 以每2秒钟的频率执行10次取样)

当使用-p{分区}参数时,vmstat也可以提供I/O相关统计信息。​

2.3.3 uptime

uptime命令可以用来查看服务器已经运行了多久和曾经登录过的用户有多少,以及服务器的平均负载值是多少
​(参见1.6.1“处理器性能指标”)。
​它可以显示过去1分钟、5分钟、15分钟的系统平均负载值。

平均负载的最佳值是1,这意味着每个进程都可以立即执行不会错过CPU周期。
​负载的正常值在不同的系统中有着很大的差别。在单处理器的工作站中,1或2都是可以接受的。然而在多处理器的服务器上你可能看到8到10。

​你能使用uptime来确定是服务器还是网络出了问题。
​例如如果网络应用程序运行,运行uptime来了解系统负载是否很高。如果负载不高,这个问题很有可能是由于网络引起的而你也非服务器。

提示:你可以使用w命令来代替uptime。w也提供关于当前系统登录用户和用户所进行工作的相关信息。

​例子2-3:uptime输出示例

《Linux 性能及调优指南》2.3 监控工具

2.3.4 ps和pstree

ps和pstree是用于系统分析的基本命令。
​ps有3中不同风格的命令选项,UNIX风格、BSD风格和GNU风格。这里我们只介绍UNIX风格选项。

ps命令可以显示当前运行的进程列表。
​top命令也可以显示进程信息,但ps可以提供更加详细的内容。
​使用相应选项可以影响进程显示的数量。
​ps -A命令可以列出所有进程及其相应的进程ID(PID),当我们使用如pmap或renice等工具时会用到此PID。

当系统运行java应用时,ps -A产生的输出结果很容易填满整个显示区域,这导致很难得到所有运行中进程的完整视图。

​在这种情况下,pstree命令就派上用场了,它使用树状显示所有运行中的进程并合并所有的子进程(例如java线程),
​pstree命令有助于确认原始进程。还有另一个ps变种pgrep也非常有用。

​例子2-4:ps输出示例

《Linux 性能及调优指南》2.3 监控工具

下面我们来了解一些常用的选项

-e :所有进程。等同于-A
-l :显示长格式
-F :附加全格式
-H :显示进程的层次结构
-L :显示线程,可能出现LWP和NLWP栏位
-m :在进程后显示线程

​下面的命令演示输出进程的详细信息:

ps -elFL

例子2-5:输出进程详细信息示例

《Linux 性能及调优指南》2.3 监控工具

​输出栏位说明:

F :进程标志
S :进程状态。S=sleeping,R=running,T=stopped/traced,D=interruptable sleep,Z=zombie。参见1.1.7“进程状态”中关于这些状态的介绍。
UID :进程所有者(可能是启动者)用户名
PID :进程ID
PPID :父进程ID
LWP :LWP(轻量级进程【light weight process】,也称作线程)ID
C :处理器使用率百分比
NLWP :进程中lwp(线程)的数量。(别名thcount)
PRI :进程的优先级。(参看1.1.4“进程优先级和Nice值”)
NI :Nice值(whether the process tries to be nice by adjusting the priority by the number given; see below for details)
ADDR :进程地址空间(不显示)
SZ :进程所有内存(code+data+stack)总数,单位为KB。
WCHAN :内核功能名称,如果进程正在运行中
RSS :常驻集大小,任务所使用的非交换物理内存(KB)
PSR :当前执行进程的处理器
STIME :开始时间
TTY :终端名称
TIME :进程所用的CPU时间总数(自从启动)
CMD :启动任务的命令行(包括参数)

线程信息

你可以使用ps -L查看线程信息。

例子2-6:使用ps -L查看线程信息

《Linux 性能及调优指南》2.3 监控工具


​​2.3.5 free
​命令/bin/free显示系统中内存空闲及使用情况。它也包括内核使用的buffer与cache的相关信息。

例子2-7:free命令输出结果示例

《Linux 性能及调优指南》2.3 监控工具

在使用free命令时,回忆一下Linux内存架构和虚拟内存管理方法。
​空闲内存值的用处市非常有限的,单纯统计交换空间使用率也不表示存在内存瓶颈。

​图2-1:描述了free命令输出结果的基本含义。

《Linux 性能及调优指南》2.3 监控工具
图2-1:free命令的输出结果

​free命令常用的参数包括:

-b, -k, -m, -g :分别使用byte、KB、MB、GB为单位显示。

-l :区分低内存和高内存(参见1.2“Linux内存架构”)

-c <count> :显示输出结果的次数

​内存区【Zone】中使用的内存

使用-l选项,你可以了解到在每个内存区中有多少内存被使用。
​例子2-8和例子2-9分别展示了在32位系统和64位系统中free -l的输出结果。注意在64位系统中不再使用高内存。

​例子2-8:32位系统中free命令的输出结果

《Linux 性能及调优指南》2.3 监控工具

​例子2-9:64位系统中free命令的输出结果

《Linux 性能及调优指南》2.3 监控工具

​你可以从/proc/buddyinfo文件中了解到每个内存区中有多少块内存可以使用。
​每列数值代表所需求大小的块可用的数量。
​例子2-10中,在ZONE_DMA中有5块2^2*PAGE_SIZE可用,在ZONE_DMA32中有16块2^3*PAGE_SIZE可用。
​回忆一下伙伴系统是怎样分配内存分页的(参见“伙伴系统”)。
​下面输出结果显示系统内存碎片的具体情况并让我们了解有到底多少分页可以分配。

​例子2-10:64位系统中伙伴系统相关信息

《Linux 性能及调优指南》2.3 监控工具


2.3.6 iostat

iostat名利可以显示自从系统启动开始的CPU平均时间(与uptime相似)。

它也可以产生关于服务器硬盘子系统活动情况的报告,

报告包括两部分内容:CPU使用情况和硬盘使用情况。

iostat可以用来获得I/O瓶颈的详细信息和系统性能调优,参见3.4.1“查找硬盘瓶颈”。

iostat是sysstat工具包的一部分。

例子2-11:iostat输出结果

《Linux 性能及调优指南》2.3 监控工具

CPU使用情况分为四个部分:

%user :显示用户级别(应用)所占用CPU的百分比。
%nice :显示拥有Nice优先级用户级别所占用CPU的百分比。(优先级和nice级别会在2.3.7“nice,renice”中做相应介绍)
%sys :显示系统级别(内核)所占用CPU的百分比。
%idle :显示空闲CPU的百分比。

​设备使用情况分为下面几个部分:

Device :块设备名称
tps :设备每秒钟传输的数量(每秒钟I/O请求数)。多个单独的I/O请求可以合并到一个传输请求中,因为每个传输请求可以有不同的大小。
Blk_read/s,Blk_wrtn/s :每秒钟块设备读写块的数量。可以设置不同的块大小,一般为1024,2048,4048字节,这取决于分区的容量。
​例如使用下面的命令来获得/dev/sda1的块大小:
dumpe2fs -h /dev/sda1 |grep -F "Block size"
产生类似如下的输出:
dumpe2fs 1.34 (25-Jul-2003)
Block size: 1024
Blk_read,Blk_wrtn :显示自系统启动后读写块的总数。

​iostat提供很多选项,对于性能来说最为常用的就是-x,它可以显示进阶的统计信息,示例如下。

例子2-12:iostat -x输出结果
《Linux 性能及调优指南》2.3 监控工具

rrqm/s,wrqm/s :每秒钟合并的读写请求数。多个单独的I/O请求可以合并到一个传输请求中,因为每个传输请求可以有不同的大小。
r/s,w/s :             每秒钟读写请求数。
rsec/s,wsec/s :   每秒钟读写的扇区数。
rkB/s,wkB/s :     每秒钟读写了多少KB。
avgrq-sz :            请求的平均大小,此值是以扇区为单位。
avgqu-sz :           请求队列的平均长度。
await :                 显示系统级别(内核)所占用CPU的百分比。
svctm :               I/O请求的平均服务时间(单位为毫秒)。
%util :                 I/O请求过程中CPU时间的百分比(设备的带宽使用率)。当接近100%时设备处于饱和状态。

计算I/O平均大小对于调整硬盘子系统访问模式非常有用。如下使用iostat -x -d,只显示有关于硬盘子系统的相关信息。

例子2-13:使用iostat -x -d分析I/O平均大小
《Linux 性能及调优指南》2.3 监控工具

在例子2-13的输出结果中,设备dasdc每秒钟写入12300.99KB的数据(kB_wrtn/s),这些数据被在一秒钟内分为2502.97次(w/s)I/O写入硬盘。
​I/O平均大小或请求平均大小为9.83块(avgrq-sz),本例中块大小为512字节。
​异步写操作平均I/O大小通常为奇数,然而大多数应用程序是以4KB的倍数(例如4KB,8KB,16KB,32KB等)来执行读写操作的。
​在上面的例子中应用程序随机写操作请求的大小为4KB,然而iostat显示平均请求大小为4.915KB,
​这种差别主要是由于Linux文件系统引起的,尽管我们执行的是随机写操作,确发现一些I/O被合并以便更有效地向硬盘写入数据。

注释:当文件系统使用默认的异步模式时,在iostat中只有请求平均大小的显示是正确的。
​尽管应用程序在执行写操作时求有明确请求的大小,但I/O层仍可能将大多数请求合并从而导致I/O平均大小的改变。


2.3.7 sar

sar命令用来搜集、报告和保存系统活动信息。

sar命令由3个应用程序组成:sar,用来显示数据;sa1和sa2,用来搜集和保存数据。

sar有非常多的选项,关于这些选项可以参看man手册。sar是sysstat工具包的一部分。

利用sa1和sa2,可以配置获得系统相关信息并记录下来用于后续的分析。

提示:我们建议在你的绝大多数系统上运行sar。
​这样一旦系统出现性能方面的问题,你手头就可以有个非常详细的系统信息,而这只需要少量的系统开销而且并不会增加额外的成本。

为达成这样的目的,需要在/etc/crontab添加相应配置(例子2-14)。在系统安装sar后,会自动建立一个cron工作每天执行sar。

​例子2-14:使用cron启动日志自动报告

《Linux 性能及调优指南》2.3 监控工具

sar的原始数据保存于/var/log/sa/并根据月日分别保存在不同的文件中。
​要查阅你的结果,可以选择日期和所需的性能数据。
​例如要想显示从21日开始的网络计数器,使用sar -n DEV -f sa21命令并通过管道传给less,如例子2-15。

​例子2-15:使用sar显示系统相关信息
《Linux 性能及调优指南》2.3 监控工具

你也可以通过命令行执行sar获得接近实时的报告(例子2-16)。

​例子2-16:监控特定CPU

《Linux 性能及调优指南》2.3 监控工具

通过搜集到的数据,你可以看到CPU使用率(%user,%nice,%system,%idle)、内存分页、网络I/O和传输情况、进程创建活动、块设备活动和每秒钟的中断数量。

2.3.8 mpstat

在多处理器服务器上使用mpstat命令可以显示所有可用处理器的使用情况,也会显示所有CPU活动的平均值。
​mpstat是sysstat工具包的一部分。

​mpstat能显示每个CPU的全面信息。mpstat也可以像vmstat命令设定取样频率和取样次数来使用取样模式生成相关统计信息。
​在例子2-17中执行mpstat -P ALL来显示所有处理器的CPU平均使用率。

​例子2-17:多处理器系统中mpstat命令的输出结果

《Linux 性能及调优指南》2.3 监控工具

使用下面的命令,每间隔一秒钟显示一次所有处理器的使用情况:

mpstat -P ALL 1 2

​例子2-18:在两路服务器中mpstat的输出示例

《Linux 性能及调优指南》2.3 监控工具

要了解mpstat完整的语法规则,输入:

mpstat -?

2.3.9 numastat

使用非一致性内存架构(NUMA)的系统如IBM
System x 3950,如今NUMA架构在企业数据中心已经成为主流。

然而NUMA却为性能调优过程带来新的挑战。如内存局部性问题在NUMA系统出现前是不用考虑的。

幸运的是,企业版Linux提供监控NUMA架构行为的工具。numastat能提供关于使用本地内存与远端内存的比例和各节点内存配置的相关信息。

在numa_miss栏中显示分配失败的本地内存,在numa_foreign栏中显示分配的远端内存(较慢的内存)。

过多分配远端内存会增加系统延迟并可能降低整体性能。绑定节点的进程使用本地RAM的内存映射可以大大提高系统性能。

例子2-19:numastat输出结果示例

《Linux 性能及调优指南》2.3 监控工具

2.3.10 pmap

pmap命令可以显示一个或多个进程所使用的内存数量。

你可以使用这个工具来了解服务器上的某个进程分配了多少内存,并以此来判断这是否是导致内存瓶颈的原因。

要得到更加详细的信息,使用pmap -d选项。

例子2-20:init进程相关的内存信息

《Linux 性能及调优指南》2.3 监控工具

在输出结果的最后一行显示了一些重要的信息,如下:

mapped :映射到文件的内存数量

writable/private :进程所占用的私有地址空间数量

shared :与其它进程共享的地址空间数量

你也可以查看地址空间所存储的信息。当分别在32位和64位系统中执行pmap,你能发现一个有趣差异。

​关于pmap的完整语法,请执行:

pmap -?

2.3.11 netstat

netstat是常用工具之一。

如果你在网络环境中工作,应该对它非常熟悉。

它可以显示许多网络相关信息如套接字使用情况、路由、接口、协议、网络数据统计等。

下面是以下基本的选项:

-a :显示所有套接字信息

-r :显示路由信息

-i :显示网络接口信息

-s :显示网络协议信息

还有很多其他有用的选项,请查看man手册。下面的例子显示了套接字相关信息的输出结果。

例子2-21:使用netstat显示套接字相关信息

《Linux 性能及调优指南》2.3 监控工具

套接字信息

Proto :套接字使用的协议(tcp,udp,raw)。

Recv-Q :连接此套接字的用户程序为复制的字节数量。

Send-Q :远程主机未确认的字节数量。

Local Address :本地套接字的地址和端口。除非使用--numeric(-n)选项,否则套接字地址将被解析成域名(FQDN)端口号则被转换成相应的服务名称。

Foreign Address :远程主机套接字的地址和端口号。

State :套接字状态。由于在原始模式【raw mode】和UDP没有状态,此列显示为空。
​关于可能显示的状态,请参见图1-28或者查看man手册。

2.3.12 iptraf

iptraf可以实时监控TCP/IP网络流量并实时产生相关报告。
​它可以以接口和协议来显示每个会话的TCP/IP流量的统计信息。
​iptraf是由iptraf工具包提供的。

iptraf为我们提供如下信息:

▶ IP traffic monitor:                  TCP连接相关的网络传输统计信息
▶ General interface statistics:     网络接口的网络传输统计信息
▶ Detailed interface statistics:    按协议分类显示网络传输统计信息
▶ Statistical breakdowns:          按TCP/UDP和封包大小分类显示网络传输统计信息
▶ LAN station monitor:             按第二层地址分类显示网络传输统计信息

下面是由iptraf产生的报告。
《Linux 性能及调优指南》2.3 监控工具

​图2-2:使用iptraf按协议分类显示TCP/IP网络传输统计信息

《Linux 性能及调优指南》2.3 监控工具
图2-2:使用iptraf按封包大小分类显示TCP/IP网络传输统计信息

2.3.13 tcpdump / ethereal

tcpdump和ethereal可以用来获取和分析网络通讯活动,他们都是使用libpcap库来捕获网络封包的。
​在混杂模式下他们可以监控网络适配器的所有通讯活动并捕获网卡所接收的所有帧。
​要想设置网络接口为混杂模式并执行这些命令来捕获所有的网络封包,需要具有超级用户的权限。

你可以使用这些工具来探究网络相关问题。你可以发现TCP/IP重发、窗口大小的缩放、名字解析的问题、网络配置错误等。
​注意这些工具只能监控网络适配器所接收到的帧,并不能监控到整个网络的通讯情况。

​tcpdump

tcpdump是一个简单却很强大的工具。
​它提供基本协议的分析功能,让你获得网络使用的概况。
​tcpdump支持许多选项和复杂的表达式用于过滤所要捕获的帧(捕获过滤器【Capture filter】),下面让我们一起来了解一下。

选项:

-i <接口> :网络接口

-e :打印链路层【link-level】头信息

-s <snaplen> :从每个封包中截取<snaplen>字节

-n :不执行DNS解析

-w <文件名> :写入文件

-r <文件名> :从文件中读取

-v, -vv, -vvv :输出详细的结果

​捕获过滤器表达式:

关键字:host dst, src, port, src port, dst port, tcp, udp, icmp, net, dst net, src net, 等

下面操作符可以用来合并多个Primitive:

非('!'或者'not')

与('&&'或者'and')

或('||'或者'or')

​常用表达式示例:

▶ DNS查询封包

tcpdump -i eth0 'udp port 53'

​▶ 连接192.168.1.10的FTP控制和数据会话。

tcpdump -i eth0 'dst 192.168.1.10 and (port ftp or ftp-data)'

​▶ 连接到192.168.2.253的HTTP会话

tcpdump -ni eth0 'dst 192.168.2.253 and tcp and port 80'

​▶ 连接到192.138.2.0/24子网的Telnet会话

tcpdump -ni eth0 'dst net 192.168.2.0/24 and tcp and port 22'

​▶ 源地址与目的地址不在192.168.1.0/24子网内并且TCP SYN或TCP FIN标志开启(TCP连接建立或结束)

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net 192.168.1.0/24'

​例子2-22:tcpdump输出结果示例

《Linux 性能及调优指南》2.3 监控工具

关于更多详细内容参见man手册

​ethereal

ethereal与tcpdump有着相似的功能但更加复杂,有进阶的协议分析和报告功能。它可以通过图形化界面或命令行来使用,
​它属于ethereal工具包的一部分。

像tcpdump一样它也可以使用捕获过滤器,并且还支持显示过滤器,这样可以减少帧。

​这里有一些常用表达式例子:

▶ IP

ip.version == 6 and ip.len > 1450
ip.addr == 129.111.0.0/16
ip.dst eq www.example.com and ip.src == 192.168.1.1
not ip.addr eq 192.168.4.1

▶ TCP/UDP

tcp.port eq 22
tcp.port == 80 and ip.src == 192.168.2.1
tcp.dstport == 80 and (tcp.flags.syn == 1 or tcp.flags.fin == 1)
tcp.srcport == 80 and (tcp.flags.syn == 1 and tcp.flags.ack == 1)
tcp.dstport == 80 and tcp.flags == 0x12
tcp.options.mss_val == 1460 and tcp.option.sack == 1

▶ Application

http.request.method == "POST
smb.path contains \\\\SERVER\\SHARE

《Linux 性能及调优指南》2.3 监控工具
图2-4:ethereal图形化界面

2.3.14 nmon
​nmon是Nigel's Monitor的简称,由Nigel Griffitchs开发的一款常用系统性能监控工具。
​因为nmon包含多种子系统的性能信息,可以用作性能监控的单一来源。
​使用nmon可以多得任务的相关性能信息包括处理器使用率、内存使用率、运行队列信息、硬盘I/O相关统计信息、网络I/O相关统计信息、分页活动情况和进程性能指标。

​要运行nmon,只需启动该工具并输入所感兴趣子系统对应的字母即可。例如要获得CPU、内存、硬盘的相关信息,启动nmon并输入c m d。

在nmon中一个非常有用的功能就是将性能相关统计信息保存到CSV文件中用于后续分析。
​在表格处理软件中导入nmon输出的CSV文件来产生图形化报表。要达成这样的目的,nmon启动时需要使用-f参数(使用nmon -h查看详细内容)。
​例如执行nmon每30秒钟快照一次连续一个小时获取数据,可以使用例子2-23的命令。

​例子2-23:使用nmon来记录性能相关数据

《Linux 性能及调优指南》2.3 监控工具

上面例子的输出结果将被存储在当前目录的一个文本文件中,文件名为<hostname>_date_time.nmon。

关于nmon的更多信息,我们建议你访问

http://www-941.haw.ibm.com/collaboration/wiki/display/WikiPtype/nmon

下载nmon,访问

http://www.ibm.com/collaboration/wiki/display/WikiPtype/nmonanalyser


2.3.15 strace

​strace命令可以拦截并记录进程所使用的系统调用和进程所接收到的信号。
​这是一个非常有用的诊断、指导和调试工具。系统管理员使用其来解决应用程序相关问题。

要跟踪某个进程,需要指定被监控进程的进程ID(PID):

strace -p <pid>

例子2-24展示了strace的输出结果。

例子2-24:strace监控httpd进程的输出结果

《Linux 性能及调优指南》2.3 监控工具

注意:当针对某个进程执行strace命令,此进程的性能将大大降低,所以只有在搜集数据时才执行此命令。

这里有另外一个有趣的用法。此命令可以报告在执行某个命令时被系统调用消耗了多少内核时间。

strace -c <command>

​例子2-25:strace关于系统时间的计算结果

《Linux 性能及调优指南》2.3 监控工具

关于strace命令的完整用法,输入:

strace -?


2.3.16 proc文件系统

​proc文件系统并不是一个实际的文件系统,然而他却非常有用。
​它并不是用来存储数据的,而是提供了运行中内核的接口。
​proc文件系统能让管理员随时监控和调整内核。

​图2-5展示了proc文件系统的示例。大多数Linux性能量度工具都要依靠/proc所提供的信息。

《Linux 性能及调优指南》2.3 监控工具

在proc文件系统中,有几个子目录我们从名字就能辨别出他们的用途,但proc目录中的大部分信息是很难读懂的,
​你最好使用像vmstat这样的工具通过更易读的方式来显示各种统计信息。
​注意在不同的系统架构中proc文件系统的布局和所包含信息有所不同。

▶ /proc目录中文件
proc根目录下的文件涉及多种有关系统的统计信息。你可以使用如vmstat和cpuinfo来显示这些信息。

▶ 数字1到X
有一些以数字命名的子目录,代表运行中进程和相应的进程ID(PID)。目录结构总是以PID 1开始,它代表init进程。每个以数字命名的子目录都存储着所对应进程的统计信息,如进程所映射的虚拟内存。

​▶ acpi

ACPI表示高级配置和电源管理接口,大多数台式电脑和笔记本电脑现在都支持此技术。因为ACPI主要为PC技术,在服务器系统中通常被禁用。关于更多ACPI的资料参考:http://www.apci.info

​▶ bus

这个子目录包含总线子系统的相关信息,如PCI总线或USB接口。

​▶ net

net子目录包含关于网络接口的大量原始统计数据,如接收的广播封包或每个网络接口的路由信息。

​▶ scsi

此目录包含SCSI子系统相关信息,如连接的设备或驱动的版本。在大多数IBM System x服务器中会有一个名叫ips的目录用来记录IBM ServeRAID控制器相关信息。

​▶ sys

在sys子目录下你能找到可以调整的内核参数如虚拟内存管理或网络堆栈。我将在4.3“Changing kernel parameters”中介绍一些选项和可调值。

​▶ tty

tty子目录包含系统各虚拟终端相关信息和它们连接了哪些物理设备。

2.3.17 KDE System Guard

​KDE
System Guard (KSysguard)是KDE的任务管理和性能监控工具。
​它采用client/server架构,可以监控本机也可以监控远端主机。

《Linux 性能及调优指南》2.3 监控工具
图2-6:KDE System Guard默认的窗口

​前端图形界面使用传感器(sensors)获得要显示的信息。传感器返回的可以是一个简单的数值或更复杂的信息如表格。
​针对不同的信息类型都提供了一个或多个显示界面。这些显示界面被组织在多个工作表中,工作表可以独立存储和加载。

KSysguard主窗体包括菜单栏、工具栏和状态栏、传感器浏览区以及工作区。
​当初次启动后,你可以看到默认的界面:本机localhost列在传感器浏览区中,在工作区中有两个标签。

​每个传感器监控一个特定的系统值。所有的传感器都可以拖拽至工作区。

▶ 在工作区中删除和覆盖传感器
▶ 编辑工作表属性,增加行和列的数量
▶ 创建一个新的工作表,放入你所需要的传感器

​工作区【Workspace】

图2-7中工作区有两个标签:

▶ 系统负载,首次启动KSysguard时默认的视图。
▶ 进程表

《Linux 性能及调优指南》2.3 监控工具
图2-7:KDE System Guard传感器浏览

​系统负载【System Load】

系统负载工作表有四个传感器窗口:CPU负载,平均负载(1分钟),物理内存,和交换内存。多个传感器可以显示在同一窗口中。
​要了解窗口显示的是哪些传感器,将鼠标移动到图形上就会显示对应的说明。你也可以在图形上右键点击Properties,然后点击Sensors标签(图2-8)。
​这里也显示了各传感器在图形中所对应的颜色。

《Linux 性能及调优指南》2.3 监控工具

图2-8:传感器相关信息

进程表【Process Table】

点击Process Table标签可以显示服务器中所有运行中进程的相关信息(图2-9)。
​默认情况下此表格是按系统CPU使用率进行排序的,但也可以通过点击不同表头使用相应的栏位排序。

《Linux 性能及调优指南》2.3 监控工具
图2-9:进程表视图

​设置工作表
对于你希望监控的环境或特定区域,你可能需要使用多个不同的监控传感器。最好的方法就是创建一个自定义的工作表。

在本节中,我们将一步步指导你创建图2-12那样的工作表。

1. 点击File->New,创建一个空工作表。

《Linux 性能及调优指南》2.3 监控工具
图2-10:新工作表的属性

​2. 输入标题和行列的数量;这将决定监控窗口的最大数量,在我们的示例中为4个。填完信息后,点击OK创建一个空的工作表,如图2-11。

注释:刷新时间间隔为2秒钟。

《Linux 性能及调优指南》2.3 监控工具
图2-11:空工作表

​3. 要增加传感器,只需从窗口左边拖拽传感器到右边空闲区域。显示的类型共有下面几种:
- Signal Plotter:这种类型可以同时显示一个或多个传感器。
​如果需要显示多个传感器,会使用不同的颜色来标示。如果显示屏足够大,会使用网格来显示所显示数据的区间段。

默认情况下显示为自动范围模式【automatic range mode】,最小和最大值会自动设定。
​如果你想改变最小和最大值,你需要禁止自动范围模式,然后在Properties对话框(在图表中点击右键)的Scales标签中设置最小和最大值。

- Multimeter:以数字方式显示传感器的值。在Properties对话框中你可以定义上下限。如果超出限制时,使用警告色显示。

- BarGraph:以条形显示传感器的值。在Properties对话框中你可以定义上下限。如果超出限制时,使用警告色显示。

- Sensor Logger:不显示任何值,而是将上述信息和日期时间一起记录到文件中。

对于每个传感器,你必须定义一个日志文件,传感器记录的间隔时间和是否需要报警。

4. 点击File->Save保存工作表
注释:保存工作表,它将被存储在用户家目录中,其它的管理员不能访问你自定义的工作表。

《Linux 性能及调优指南》2.3 监控工具
图2-12:工作表示例

要获得更多关于KDE System Guard,请访问:

http://docs.kde.org/


2.3.18 Gnome System Monitor

​尽管功能不像KDE System Guard那么强大,但作为Gnome桌面环境的图形化性能分析工具,
​Gnome System Monitor可以图形化显示性能相关系统资源用于发现可能的峰值和瓶颈。
​产生的所有统计信息都是实时,要想做长时间的性能分析需使用其它工具来完成。

2.3.19 Capacity Manager

​​Capacity
Manager是IBM Director系统管理套件中附带的工具,需要ServerPlus Pach下运行。
​Capacity Manager让跨系统平台长期对进行性能度量变成可能。
​Capacity Manager可以进行容量计划,评估未来系统容量需求。
​你可以将报告导出为HTML,XML和GIF文件,这些文件会被自动存储在企业内存的web服务器上。
​IBM Director可以在不同的系统平台中使用,这使得在复杂环境中搜集和分析数据变得容易。
​关于Capacity Manager的详细内容请参考Tuning IBM System x Servers for Performance, SG24-587。

要使用Capacity Manager,你首先要安装相应的RPM包。
​安装RPM后,在IBM Director Console中选择Capacity Manager->Monitor Activator

《Linux 性能及调优指南》2.3 监控工具
图2-13:IBM Director Console任务列表

拖放Monitor Activator图标到单独或一组安装有Capacity Manager包的系统上。
​在打开的窗口中你可以选择需要监控的子系统。
​Linux版Capacity Manager不支持所有可用的性能计数器。系统统计信息受一些性能参数的限制。

《Linux 性能及调优指南》2.3 监控工具
图2-14:启用性能监控器

Monitor Activator窗口的右面显示相关系统及当前状态,在左面显示各种可用的性能监控器。
​要添加新的监控器,选择所需监控器并点击On。关闭Monitor Activator窗口后所做改变立即生效。完成此步后,
​IBM Director开始搜集所需的性能指标并存储在各系统的临时位置中。

要创建搜集数据的报告,选择Capacity Manager->Report Generator(参见图2-13)并拖动图标到单独或一组系统上。
​IBM Director将询问是否要立即产生还是排定后续执行(图2-15)。

《Linux 性能及调优指南》2.3 监控工具
图2-15:报告排程

在生产环境中,使用Capacity Manager定期产生报告是一个不错的做法。我们的经验是在每周末的非工作时间执行。
​立即产生报告还是排定时间产生报告取决于你的选择。
​报告完成后会被存储在*IBM Director管理服务器上,可以使用Report Viewer来查看报告。图2-16展示了Capacity Manager月报告的示例。

《Linux 性能及调优指南》2.3 监控工具
图2-16:Capacity Manager报告示例

在Report Viewer窗口中你可以选择不同的性能计数器。

Capacity Manager所搜集的数据可以导出成HTML或XML用来显示在内部web服务器上或后续分析使用。