最新消息:

系统管理员工具包: 监视运行缓慢的系统(转)

Linux运维 大步 778浏览 0评论

原文:https://www.ibm.com/developerworks/cn/aix/library/au-satslowsys.html?S_TACT=105AGX52&S_CMP=techcsdn

关于本系列

通常,UNIX® 管理员都拥有一套他/她经常使用的用来辅助进程管理任务的实用程序、技巧和系统。有一些重要的实用程序、命令行以及脚本可用来简化各种处理过程。这些工具 中有一部分来自于操作系统,而大部分的技巧则来源于长期的经验和简化系统管理员工作的要求。本系列文章主要专注于最大限度地利用各种 UNIX 环境中可用的工具,包括简化异类环境中管理任务的方法。

回页首

导致系统运行迟缓的原因

有许多不同的潜在的原因会导致系统运行迟缓,但通常可以将它们分为以下几个方面:

  • 进程太多。您的系统可能仅仅只是同时运行了太多的应用程序,或者正在运行少量 CPU 密集型的操作。要么是服务器超负荷运行,要么是失控进程耗尽了系统资源。
  • 活动内存太多。如果进程使用了大量的内存,那么系统可能会从磁盘换入大量的页面并将大量的页面换出到磁盘,这意味着您的系统花费在内存交换上的时间比真正使用内存的时间更多。
  • 硬件故障。有时候,您会碰到导致系统运行迟缓的硬件故障。不能正常工作的网卡、硬盘或内存,都可能导致系统花费很长的时间等待信息。

要对该问题进行诊断,您需要使用大量可用的工具来检查您的 UNIX 系统。

回页首

选择连接方法

如果您的计算机运行得特别慢,那么第一个问题是如何连接到该计算机以便启动监视进程。运行迟缓的计算机可能无法接受 Telnet 或通过远程 Shell 协议(如 ssh)的连接。

如果您尚未登录到系统,那么可能根本无法进行访问。相反,可以考虑直接或通过独立的硬件解决方案(如网络或基于串口的控制台监视器)来使用控制台。

这种控制台更有可能允许您登录到系统,因为已经有一个登录进程(您的 Shell 将会代替它)正在运行。如果在登录到系统后,您无法通过 Shell 运行任何进程,则表示系统已经耗尽了进程空间,那么重新启动可能是使系统恢复正常的唯一办法。

要重新启动系统,请使用 init 或 telinit 来调整运行级别,运行级别 6 通常表示重新启动。使用 init/telinit 更有可能重新启动系统,因为在进行重新启动时仅涉及到了一个进程。

在系统启动并运行后,您需要使用本文中介绍的一些技巧来监视该系统的运行状态并记录其输出结果。如果再次出现系统运行迟缓的情况,您可以执行事后检查调试并分析系统运行迟缓的原因。

回页首

使用 uptime

如果您怀疑计算机运行得很慢,那么您应该运行的第一个命令是 uptimeUptime 报告当前时间、计算机启动和运行时间(换句话说,是从计算机启动以来的时间)以及当前的用户数。然后它会提供三幅图表,以显示最近 1 分钟、5 分钟和 15 分钟的平均负载。例如:

 

在这个示例中,该计算机在最近 1 分钟、5 分钟和 15 分钟内的平均负载分别超过了 2、5 和 3。

平均负载的定义比较复杂,并且受到正在执行的进程的状态影响。通常,正在运行、等待 CPU 或等待 I/O 的每个进程都会使平均负载加 1。然后对这些图表进行计算并根据时间平均。

在单 CPU 的系统中,平均负载大于 1 则表示该 CPU 难以承受您所分配的负载类型。但是因为 UNIX 的多进程的本质,在您关注到该问题前,平均负载在长时间内(换句话说,对应于 15 分钟的图表)达到 2 通常是可以接受的。

在多 CPU(或多核)系统中,需要将平均负载除以 CPU 的个数。要确定计算机是否超负荷运行,请使用上述原则。

查看这些图表的另一种可选的方法是将它们看作百分比,换句话说,如果上面的图表来自于一个单 CPU 系统,那么如果该计算机的速度比目前快百分之 224,那么它就能够处理当前的负载。

在多 CPU 系统中,您应该使用 CPU 数目加 1 来确定最大负载。例如,一个 4 CPU 的系统可以承受的最大平均负载为 5。

通常在短时间内,计算机的平均负载可能比其最大平均负载高的多。例如,当构建或编译一个应用程序、或执行一项磁盘密集型任务时,平均负载可能会激增。这正是输出结果中包含 1、5 和 15 分钟平均值的原因,因为这样可以帮助消除任何瞬态负载极大值。

任何长时间的或未预料到的较高的值都可能表示存在问题,并且需要进行进一步的研究。如果这些数值较低,但系统却运行迟缓,那么可能表示存在交换空间的问题。

回页首

使用 ruptime

如果您管理着由许多系统组成的大型网络,那么有一种简单的方法来监视负载和网络中所有计算机的使用情况。ruptime 工具收集网络上所有计算机广播的数据,并将其集中到一个本地文件中,以便对所有计算机的当前状态进行检查。

例如,清单 1 显示了一个小型网络的输出结果:
清单 1. 一个小型网络的输出

 

最后一台计算机 11 分钟内没有报告任何数据,所以将其列为停机。

要生成这些信息,需要在本地网络中的每台计算机上运行 rwhod 守护进程(有时候是 in.rwhod)。这个守护进程为本地计算机广播信息,并收集来自所有其他计算机的广播数据。

因为 rwho/ruptime 系统的工作方式的原因,所以可能存在一些性能问题,尤其是在大型的网络中,它们生成的大量的系统报告和网络流量可能是有害的。在非常繁忙的系统中,对这些 数据进行广播的需求可能也就意味着永远无法报告这些信息,这些数据可能过期,或者在系统繁忙时将其报告为停机。

回页首

跟踪大型进程

如果您怀疑是一个大型的或过度繁忙的进程导致了该问题,那么您应该检查 ps 工具的输出,查找进程大小、内存百分比和 CPU 利用率。在 SVR4 系统(Solaris 和 AIX®)中,您可以使用下列命令来获得进程的列表(请参见清单 2)。
清单 2. 获得进程列表的命令

 

清单 3 显示了在 BSD 派生系统中的 ps 工具的输出。
清单 3. 一个 BSD 系统中获得的进程列表

 

在上面两个例子中,进程列表中显示了 CPU 和内存使用率,以便您能够清楚地了解系统中的负载情况。‘s’和‘stat’列(分别对应于 SVR4 和 BSD)显示了进程的当前状态。对于大量的运行的进程,状态‘R’表示该进程当前正在运行。

通过使用状态、CPU 和内存百分比的组合,您应该可以确定是否存在失控的 和大量消耗系统资源的进程。

回页首

使用 iostat

iostat 工具提供了关于终端、磁盘活动和 CPU 利用率的信息。您可以指定单个数值参数来设置报告的时间间隔,并指定另一个数值参数来设置报告的数量。例如,清单 4 显示了如何每 5 秒钟报告相应的统计信息。
清单 4. 每隔 5 秒报告统计信息

 

对于不同的系统,缺省情况下显示的确切的信息也有所不同,清单 4 来自于一个 Solaris 系统。清单 5 中的示例来自于一个 BSD 环境。
清单 5. 一个 BSD 系统中的 iostat

 

先来看看 CPU 统计信息,这些列分别显示了用户 (us)、系统 (sy) 和空闲 (id) 百分比。用户时间显示了用于该用户进程的时间。系统时间则显示了系统进程耗费的时间(在没有显示等待时间时,包括系统等待 I/O 的时间)。空闲时间显示了 CPU 处于空闲状态的时间的百分比。

磁盘的输出显示了各个物理磁盘(在合适的情况下包括 NFS 加载)的工作情况,通常以每秒处理事务数和每秒传输的 MB 或 KB 作为单位。其中的较大数值,尤其是同时具有较高的等待/系统时间,可能表示对于该系统而言,磁盘的速度太慢。您可以尝试展开您的应用程序,以便它使用不同 的磁盘,这样可能可以改善它的性能。

如果该磁盘同时用作虚拟内存,那么可能是因为缺少内存和过多的交换的问题。

回页首

使用 vmstat

您可以使用 vmstat 工具来监视虚拟内存统计信息。与 iostat 一样,它接受一个数值时间间隔(请参见清单 6)。
清单 6. 使用 vmstat 监视内存统计信息

 

vmstat 工具输出线程/进程信息、内存/交换区使用率、换进/换出页面、磁盘 I/O、页面错误和 CPU 统计信息。

CPU/线程块显示了运行队列 (r) 中的进程/线程、等待 I/O 资源的阻塞进程 (b) 和那些被交换的进程。阻塞进程列中较高的值表示磁盘的速度较慢。交换列中较高的数值表示存在许多进程使用了太多的内存,需要对它们进行换入和换出。交换是 一项开销非常高的处理,并且将明显地降低系统的性能。

内存列显示了当前可用的交换区大小和空闲列表的大小(如果对 RAM 提出请求,可以被交换的页面的数目)。较低的交换值表示即将耗尽交换空间,这并不一定表示存在问题,只要您拥有足够的 RAM 来运行相应的应用程序。较低的空闲列表值可能表示使用了大量的活动 RAM,如果您向该系统中添加更多的进程,那么可能引起交换空间的使用。

页面列显示了从磁盘交换进来的和交换到磁盘的内存页面。键值列是 pi/po(换进/换出的页面),这表示了对多少页面进行了交换。较高的分页表示缺少 RAM,较高的扫描速率(sr 列)显示了潜在的内存瓶颈。

回页首

使用 top

top 工具可以提供一种有效的方法来监视活动中的系统和活动的进程、负载以及内存统计信息。有许多不同类型的 top,在缺省情况下,某些系统中安装了其中的一部分,而这些 top 是最新的开放源码版本的工具。它所提供的相关信息更像是 uptime、交换空间和 ps 工具的组合。例如,下面的输出来自于 Solaris 系统中运行的 V3.5.1 版本的 top 工具(请参见清单 7)。
清单 7. 使用 top

 

top 工具显示了各个进程的 CPU 使用情况,例如,在前面的示例中,可以看到正在编译大量的文件以及它们使用 CPU 的比例。

您还应该注意进程的状态:较高的运行进程的数目可能表示系统过于繁忙(将运行进程与 CPU 状态和系统的平均负载进行比较)。Top 本身可能耗费大量的 CPU,所以最好是以较大的更新时间间隔来运行它,以避免监视工作对系统性能带来损害。您可以使用 -s-d 命令行选项(根据您使用的平台来决定)以秒为单位来指定更新的时间间隔。

回页首

引自:http://waydee.blog.51cto.com/4677242/819742
[root@client1 ~]# top
top - 17:06:38 up 2 days, 3:06, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2054588k total, 815752k used, 1238836k free, 102272k buffers
Swap: 4128760k total, 0k used, 4128760k free, 488684k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12085 root 20 0 15088 1284 952 R 0.3 0.1 0:00.02 top
1 root 20 0 19404 1572 1256 S 0.0 0.1 0:00.98 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.14 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.13 migration/1
8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/1
9 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/1
10 root RT 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/1
11 root RT 0 0 0 0 S 0.0 0.0 0:00.14 migration/2
第一行解释:
top - 17:06:38 up 2 days, 3:06, 1 user, load average: 0.00, 0.00, 0.00
17:06:38 :系统当前时间
up 2 days :系统开机到现在经过了2天
1 users:当前1用户在线
load average:0.00,0.00,0.00:系统1分钟、5分钟、15分钟的CPU负载信息
第二行解释:
Tasks: 162 total, 1 running, 161 sleeping, 0 stopped, 0 zombie
162 total:当前有162个任务
1 running:1个任务正在运行
161 sleeping:161个进程处于睡眠状态
0 stopped:停止的进程数
0 zombie:僵死的进程数
第三行解释:
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
0.0%us:用户态进程占用CPU时间百分比
0.0%sy:内核占用CPU时间百分比
0.0%ni:renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思
100.0%id:空闲CPU时间百分比
0.0%wa:等待I/O的CPU时间百分比
0.0%hi:CPU硬中断时间百分比
0.0%si:CPU软中断时间百分比
第四行:
Mem: 2054588k total, 815752k used, 1238836k free, 102272k buffers
2054588k total:物理内存总数
815752k used: 使用的物理内存
1238836k free:空闲的物理内存
102272k buffers:用作缓存的内存
第五行:
Swap: 4128760k total, 0k used, 4128760k free, 488684k cached
4128760k total:交换空间的总量
0k used: 使用的交换空间
4128760k free:空闲的交换空间
488684k cached:缓存的交换空间
最后一行:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程ID
USER:进程的所有者
PR:进程的优先级
NI:nice值
VIRT:占用的虚拟内存
RES:占用的物理内存
SHR:使用的共享内存
S:进行状态 S:休眠 R运行 Z僵尸进程 N nice值为负
%CPU:占用的CPU
%MEM:占用内存
TIME+: 占用CPU的时间的累加值
COMMAND:启动命令
常用操作指令:
q:退出top命令
<Space>:立即刷
s:设置刷新时间间隔
c:显示命令完全模式
t::显示或隐藏进程和CPU状态信息
m:显示或隐藏内存状态信息
l:显示或隐藏uptime信息
f:增加或减少进程显示标志
S:累计模式,会把已完成或退出的子进程占用的CPU时间累计到父进程的MITE+
P:按%CPU使用率排行
T:按MITE+排行
M:按%MEM排行
u:指定显示用户进程
r:修改进程renice值
kkill:进程
i:只显示正在运行的进程
W:保存对top的设置到文件~/.toprc,下次启动将自动调用toprc文件的设置。

 

使用 SAR

有些时候,您需要在系统出现问题后对其状态进行监视,但是却又无法实时监视服务器的状态,在这种情况下,您可以使用 SAR(系统活动报告程序)工具。它以指定的时间间隔将相关信息记录到一个全局文件中,然后可以在事后对该文件进行处理以显示计算机的相关信息,该工具正 是以这种方式为您提供帮助。

因为记录信息的进程持续运行于后台,所以它可以用来详细地描述系统在一段时间内的性能,并且可以帮助您确定问题的原因。通常以天、月或您指定的时间间隔为单位来记录相应的信息。日志保存到 /var/log/sa/saDD 或 /usr/adm/sa/saDD,其中 DD 表示一个月中的第几天。启用 SAR 工具与具体的系统有关,并且通常您需要建立一个 cron 任务来自动地运行数据收集脚本 (sa1)。另一个脚本 sa2 可以创建每天的报告,以便您对其进行研究。例如,下面的 crontab 显示了 Solaris 系统中缺省记录的系统性能统计信息:

 

在收集到了这些信息之后,可以使用 sar 命令来提取相应的数据。系统所记录下来的信息量可能非常大,并且可以从该数据中选择和提取的详细信息也非常大。然而,通过使用 SAR 的 -A 命令行参数,您可以了解到数据的数量和质量,该选项报告了当前记录的所有信息。
清单 8. 使用带 -A 参数的 sar 命令生成的输出

 

在可能的情况下,对上面的输出进行了剪裁,以限制所显示的数据量(比如,并没有显示所有磁盘的统计信息)。有关 SAR 的更详细的信息,请查看参考资料部分和您的系统中的 manual 页面。

回页首

结束语

尽管在运行迟缓的 UNIX 系统和您能够提取的统计信息之间可能并不存在直接的关联,但在发现系统运行迟缓的时候,第一件事就应该是收集尽可能多的信息。究竟是应该主动地(通过 ps、uptime 和其他工具)还是被动地(通过 SAR 或 top)来完成这项工作,这取决于实际情况。有了这些信息,您应该可以判断 UNIX 系统之所以运行迟缓,到底是因为负载过重(CPU 超负荷使用)、物理内存太少(大量的交换工作),还是存在失控进程(单个进程占用大量的 CPU 时间)的问题。

 

参考资料

学习

讨论

关于作者

Martin Brown 成为职业作家已经超过 7 个年头。他所撰写的书籍和文章覆盖了各种各样的主题。他的专长包括许多开发语言和平台,如 Perl、Python、Java™、JavaScript、Basic、Pascal、Modula-2、C、C++、Rebol、Gawk、 Shellscript、Windows®、Solaris、Linux®、BeOS、Mac OS X 等等,以及 Web 编程、系统管理和集成。他是 Microsoft的 Subject Matter Expert (SME) 以及 ServerWatch.com、LinuxToday.com 和 IBM developerWorks 的固定投稿人。他也是 Computerworld、The Apple Blog 及其他站点的博客。您可以通过他的 Web 站点 与他联系。

 

引自:

查看Linux系统的平均负载——作者: 余洪春

  1、Linux系统的平均负载的概念

有时候我们会觉得系统响应很慢,但是又找不到原因,这时就要查看平均负载了,看它是否有大量的进程在排队等待。特定时间间隔内运行队列中的平均进程数可以反映系统的繁忙程度,所以我们通常会在自己的网站或系统变慢时第一时间查系统的负载,即CPU的平均负载。

  2、查看平均负载

究竟应该如何查看平均负载呢?最简单的命令是uptime,如下所示:

  • [root@localhost ~]# uptime
  • 11:31:11 up 11 days, 19:01, 2 users, load average: 0.02, 0.01, 0.00

目前的主流服务器都是双四核,有相当强悍的CPU,做一般的应用服务的话,Linux系统的负载这块倒不用我们担心。

还可以用w命令来查看,顺便可以查看一下系统当前有哪些用户,他们占用了哪些终端,如下所示:

  • [root@localhost ~]# w
  • 11:33:00 up 11 days, 19:03, 2 users, load average: 0.00, 0.00, 0.00
  • USER TTY FROM LOGIN@  IDLE  JCPU  PCPU WHAT
  • root pts/1113.57.224.3 09:032:11m 0.04s 0.04s -bash
  • root pts/2113.57.224.3 11:310.00s 0.02s 0.00s w

另外,还有动态命令top,这个命令也可以反映系统负载情况。在下面的命令提示中,我们只关心加粗字体部分。

  • [root@localhost ~]# top
  • top - 11:37:47 up 11 days, 19:08, 2 users, load average: 0.00, 0.00, 0.00
  • Tasks: 122 total,  1 running, 121 sleeping,  0 stopped,  0 zombie
  • Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
  • Mem:  4044136k total, 1435504k used, 2608632k free,  274740k buffers
  • Swap: 8193140k total,0k used, 8193140k free,  941884k cached

上面加粗字体显示的内容是什么意思呢?再通过uptime查看一下。

  • [root@localhost ~]# uptime
  • 11:39:36 up 11 days, 19:16, 1 user, load average: 0.09, 0.03, 0.01

原来它所表示的是过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。

那么,如何衡量当前系统是否负载过高呢?可以从以下几点来考虑。

如果每个CPU(可以按CPU核心的数量计算)当前的活动进程数不大于3,则系统性能良好。

如果每个CPU当前的活动进程数不大于4,表示可以接受。

如果每个CPU当前的活动进程数大于5,则系统性能问题严重。

还可以结合vmstat命令来判断我们的系统是否过于繁忙,如果确定很繁忙的话,就要考虑是否更换服务器或增加CPU的个数了。总结如下:

如果r经常大于3或4,且id经常少于50,则表示CPU的负荷很重。

在上面例子中,我的服务器是PowerEdge 2850,CPU是双核双线程的,则0.09/2=0.045(即负载值/真实CPU个数),此系统的CPU负载基本可以忽略了。事实上,现在主流服务器 的CPU都很强悍,如果不是应用虚拟化等特殊场景,基本上负载都很小。

按照前面的计算公式,我所配置Nagios报警的CPU负载阈值 为CPU核心的数量(即CPU的物理个数×核数)。还是以我的服务器PowerEdge 2850为例,其CPU核心的数量为2×2=4,则设置报警值为4。这样设置是合理的,因为毕竟不是每个应用服务器的CPU都支持多核心,毕竟整个网站中 还有些性能比较弱的服务器是用来做备份的。

转载请注明:大步's Blog » 系统管理员工具包: 监视运行缓慢的系统(转)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
SiteMap