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

2.3.11 netstat

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

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

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

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

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

netstat是常用工具之一。

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

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

下面是以下基本的选项:

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

-r :显示路由信息

-i :显示网络接口信息

-s :显示网络协议信息

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

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



套接字信息

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产生的报告。


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


图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 :从每个封包中截取字节

-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输出结果示例

关于更多详细内容参见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


图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来记录性能相关数据

上面例子的输出结果将被存储在当前目录的一个文本文件中,文件名为_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

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

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

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

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

strace -c


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

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

strace -?


2.3.16 proc文件系统

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

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

在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架构,可以监控本机也可以监控远端主机。


图2-6:KDE System Guard默认的窗口


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

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


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

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


​工作区【Workspace】

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

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


图2-7:KDE System Guard传感器浏览


​系统负载【System Load】

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

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

进程表【Process Table】

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


图2-9:进程表视图


​设置工作表

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

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

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


图2-10:新工作表的属性


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

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


图2-11:空工作表


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

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

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

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

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

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

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


图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


图2-13:IBM Director Console任务列表

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


图2-14:启用性能监控器

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

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


图2-15:报告排程

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


图2-16:Capacity Manager报告示例

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

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


你可能感兴趣的:(Linux:,系统相关)