非常经典的UNIX系统调优的文章

导致系统运行迟缓的原因
有许多不同的潜在的原因会导致系统运行迟缓,但通常可以将它们分为以下几个方面:
进程太多 。您的系统可能仅仅只是同时运行了太多的应用程序,或者正在运行少量 CPU 密集型的操作 。要么是服务器超负荷运行,要么是失控进程耗尽了系统资源 。活动内存太多 。如果进程使用了大量的内存,那么系统可能会从磁盘换入大量的页面并将大量的页面换出到磁盘,这意味着您的系统花费在内存交换上的时间比真正使用内存的时间更多 。硬件故障 。有时候,您会碰到导致系统运行迟缓的硬件故障 。不能正常工作的网卡、硬盘或内存,都可能导致系统花费很长的时间等待信息 。要对该问题进行诊断,您需要使用大量可用的工具来检查您的 Unix 系统 。
选择连接方法
如果您的计算机运行得特别慢,那么第一个问题是如何连接到该计算机以便启动监视进程 。运行迟缓的计算机可能无法接受 Telnet 或通过远程 Shell 协议(如 ssh)的连接 。
如果您尚未登录到系统,那么可能根本无法进行访问 。相反,可以考虑直接或通过独立的硬件解决方案(如网络或基于串口的控制台监视器)来使用控制台 。
这种控制台更有可能允许您登录到系统,因为已经有一个登录进程(您的 Shell 将会代替它)正在运行 。如果在登录到系统后,您无法通过 Shell 运行任何进程,则表示系统已经耗尽了进程空间,那么重新启动可能是使系统恢复正常的唯一办法 。
要重新启动系统,请使用 init 或 telinit 来调整运行级别,运行级别 6 通常表示重新启动 。使用 init/telinit 更有可能重新启动系统,因为在进行重新启动时仅涉及到了一个进程 。
在系统启动并运行后,您需要使用本文中介绍的一些技巧来监视该系统的运行状态并记录其输出结果 。如果再次出现系统运行迟缓的情况,您可以执行事后检查调试并分析系统运行迟缓的原因 。
使用 uptime
如果您怀疑计算机运行得很慢,那么您应该运行的第一个命令是uptime
。Uptime
报告当前时间、计算机启动和运行时间(换句话说,是从计算机启动以来的时间)以及当前的用户数 。然后它会提供三幅图表,以显示最近 1 分钟、5 分钟和 15 分钟的平均负载 。例如:
$ uptime
18:28:54 up 10 days, 8:38, 2 users, load average: 2.24, 5.34, 3.42
在这个示例中,该计算机在最近 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 分钟平均值的原因,因为这样可以帮助消除任何瞬态负载极大值 。

推荐阅读