版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明。
原文名称:《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手册。
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网络传输统计信息
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输出结果示例
关于更多详细内容参见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
要运行nmon,只需启动该工具并输入所感兴趣子系统对应的字母即可。例如要获得CPU、内存、硬盘的相关信息,启动nmon并输入c m d。
在nmon中一个非常有用的功能就是将性能相关统计信息保存到CSV文件中用于后续分析。
在表格处理软件中导入nmon输出的CSV文件来产生图形化报表。要达成这样的目的,nmon启动时需要使用-f参数(使用nmon -h查看详细内容)。
例如执行nmon每30秒钟快照一次连续一个小时获取数据,可以使用例子2-23的命令。
例子2-23:使用nmon来记录性能相关数据
上面例子的输出结果将被存储在当前目录的一个文本文件中,文件名为<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
要跟踪某个进程,需要指定被监控进程的进程ID(PID):
strace -p <pid>
例子2-24展示了strace的输出结果。
例子2-24:strace监控httpd进程的输出结果
注意:当针对某个进程执行strace命令,此进程的性能将大大降低,所以只有在搜集数据时才执行此命令。
这里有另外一个有趣的用法。此命令可以报告在执行某个命令时被系统调用消耗了多少内核时间。
strace -c <command>
例子2-25:strace关于系统时间的计算结果
关于strace命令的完整用法,输入:
strace -?
在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-6:KDE System Guard默认的窗口
前端图形界面使用传感器(sensors)获得要显示的信息。传感器返回的可以是一个简单的数值或更复杂的信息如表格。
针对不同的信息类型都提供了一个或多个显示界面。这些显示界面被组织在多个工作表中,工作表可以独立存储和加载。
KSysguard主窗体包括菜单栏、工具栏和状态栏、传感器浏览区以及工作区。
当初次启动后,你可以看到默认的界面:本机localhost列在传感器浏览区中,在工作区中有两个标签。
每个传感器监控一个特定的系统值。所有的传感器都可以拖拽至工作区。
▶ 在工作区中删除和覆盖传感器
▶ 编辑工作表属性,增加行和列的数量
▶ 创建一个新的工作表,放入你所需要的传感器
工作区【Workspace】
图2-7中工作区有两个标签:
▶ 系统负载,首次启动KSysguard时默认的视图。
▶ 进程表
系统负载【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. 输入标题和行列的数量;这将决定监控窗口的最大数量,在我们的示例中为4个。填完信息后,点击OK创建一个空的工作表,如图2-11。
注释:刷新时间间隔为2秒钟。
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/
要使用Capacity Manager,你首先要安装相应的RPM包。
安装RPM后,在IBM Director Console中选择Capacity Manager->Monitor Activator
图2-13:IBM Director Console任务列表
拖放Monitor Activator图标到单独或一组安装有Capacity Manager包的系统上。
在打开的窗口中你可以选择需要监控的子系统。
Linux版Capacity Manager不支持所有可用的性能计数器。系统统计信息受一些性能参数的限制。
Monitor Activator窗口的右面显示相关系统及当前状态,在左面显示各种可用的性能监控器。
要添加新的监控器,选择所需监控器并点击On。关闭Monitor Activator窗口后所做改变立即生效。完成此步后,
IBM Director开始搜集所需的性能指标并存储在各系统的临时位置中。
要创建搜集数据的报告,选择Capacity Manager->Report Generator(参见图2-13)并拖动图标到单独或一组系统上。
IBM Director将询问是否要立即产生还是排定后续执行(图2-15)。
在生产环境中,使用Capacity Manager定期产生报告是一个不错的做法。我们的经验是在每周末的非工作时间执行。
立即产生报告还是排定时间产生报告取决于你的选择。
报告完成后会被存储在中央IBM Director管理服务器上,可以使用Report Viewer来查看报告。图2-16展示了Capacity Manager月报告的示例。
图2-16:Capacity Manager报告示例
在Report Viewer窗口中你可以选择不同的性能计数器。
Capacity Manager所搜集的数据可以导出成HTML或XML用来显示在内部web服务器上或后续分析使用。