调整 Tux,第 3 部分

作者:Marcel Gagné

上次,我们了解了 uptime 命令(以及其他内容),以及它如何告诉您系统当前正在做什么。特别是,uptime 跟踪负载平均值,即等待处理的进程数。为了回顾一下这些信息的样子,请允许我发布一位读者的 uptime 统计信息。

   晚上 7:47  运行时间 458 天,13:07,  2 个用户,  负载平均值:0.00, 0.00, 0.00

就无需重启的天数而言,这还算不错。就此系统当前正在做什么而言,负载平均值非常低,我们几乎可以推断出我们的 CPU 大部分时间都很空闲(当然在晚上 7:45 是这样)。

要更全面地了解您的系统正在做什么,请尝试 top 命令。您首先会注意到,uptime 命令的负载平均值也包含在 top 显示中。运行 top 比 uptime 命令本身提供的信息多得多,包括实际的进程数、系统进程和用户进程之间完成的工作分配、内存利用率等等。

要运行 top,只需键入 top。以下是我的一个系统的一些示例输出。

    下午 1:39  运行时间 127 天,  6:20,  4 个用户,  负载平均值:0.01, 0.01, 0.03   43 个进程:42 个睡眠,1 个运行,0 个僵尸,0 个停止   CPU 状态:  0.1% 用户,  0.1% 系统,  0.0% 友好, 99.6% 空闲   内存:   61864K 可用,  57876K 已用,   3988K 空闲,  33484K 共享,   1836K 缓冲区   交换:136040K 可用,   4496K 已用, 131544K 空闲                 32752K 缓存

     PID 用户     PRI  NI  大小  RSS 共享 状态  LIB %CPU %内存   时间 命令   24382 root      19   0  1000 1000   824 R       0  0.3  1.6   0:00 top       1 root       0   0   104   52    36 S       0  0.0  0.0   0:05 init       2 root       0   0     0    0     0 SW      0  0.0  0.0   3:39 kflushd       3 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kpiod       4 root       0   0     0    0     0 SW      0  0.0  0.0   1:22 kswapd

请注意那里的负载平均值。从这个交互式屏幕中,您可以终止(向其发送 SIGNAL 信号)进程(随时按“k”并输入 PID 和信号),重新调整不需要系统全神贯注的进程的优先级(按“r”),更改字段的排序顺序(按“o”),等等。如果您对各种组合感到好奇,请在 top 运行时尝试按“h”寻求帮助。我喜欢做的一件很酷的事情是在自己的窗口中运行 top,它会报告实时活动,让我了解是什么在消耗系统的资源。如果您要这样做,并且您有在不锁定屏幕的情况下离开终端的习惯——假设您以 root 用户身份运行程序(我们今天不讨论这个)——您可能希望像这样启动 top。

     top -s

这将在安全模式下启动 top。如果我现在尝试按“k”,我会得到一个友好的“无法在安全模式下终止”,有点像保持安全开关处于开启状态。

top 唯一的真正缺点是它在内存、CPU 等方面具有 相当大的占用空间,这意味着您必须考虑到这一点。如果您在系统上运行 top,您会注意到它花费了相当长的时间作为顶级进程,因为它对系统的需求很高。这就是为什么我仍然发现自己使用像 free 这样的小型、轻量级命令行工具。

   # free                总计       已用       空闲     共享    缓冲区     缓存   内存:         63004      60768       2236      24448       3720      19956   -/+ 缓冲区/缓存:      37092      25912   交换:       128480      13996     114484

Free 报告内存(包括真实内存和交换空间)的信息。您可以获得实际内存快照,这些内存分布在共享相同内存空间(共享)、内核使用的缓冲区(缓冲区)和已缓存到磁盘的内容的程序之间。“-/+”行反映了磁盘缓冲区缓存和实际写入磁盘的内存的组合所反映的总内存与已用内存。

还有很多其他工具可以确定您的系统如何花费其时间,我们将在稍后介绍它们。但首先。。。

让我们谈谈您的磁盘,好吗?它们是否感觉有点迟缓?无精打采?您是否需要给它们做一些鼓舞士气的谈话,让它们跑起来而不是为您的数据行走?嗯,女士们先生们,我们系统管理员专栏(不止我一个人?)可能正是您所需要的。隐藏在您的 Linux 系统上的是一个名为 hdparm 的小命令。这是一个命令行实用程序,具有相当大的灵活性和功能。有了它,您可以修改实际硬盘驱动器上某些与 IO 相关的参数,这可能会导致磁盘访问性能的显着变化。现在,在我深入探讨它可以做什么和不能做什么之前,请允许我重复使用微调器的推诿之词。

<推诿之词> 在进行任何类型的操作系统级别微调时,请务必小心。某些参数实际上可能会降低您的系统性能,而不是帮助它。如果您正在使用实时数据进行实验,那么 始终进行备份。这很有趣,但存在一定的风险。 </推诿之词>

啊,很好。我感觉好多了。继续有趣的东西。

我们可能应该首先查看一下硬盘驱动器,然后再进行任何更改。使用 -i 标志,hdparm 将返回一些关于我们拥有的驱动器类型和一些基本功能的信息。以下是我在办公室(devsys1)中的一台 Linux 机器上运行时发生的情况。

[root@devsys1 /root]# hdparm -i /dev/hda

   /dev/hda

    型号=QUANTUM BIGFOOT TS12.7A, 固件版本=A21.0G00, 序列号=38190552    配置={ 硬扇区 非MFM 磁头软件>15微秒 固定 DTR>10Mbs }    原始CHS=24876/16/63, 磁道大小=32256, 扇区大小=21298, ECC字节=4    缓冲区类型=3(双端口缓存), 缓冲区大小=418kB, 最大多扇区=16, 多扇区=关闭    双字IO=否, 最大PIO=2(快速), DMA=是, 最大DMA=2(快速)    当前CHS=1658/240/63, 当前扇区=-1656749698, LBA=是, LBA扇区=25075008    tDMA={最小:120,推荐:120}, DMA 模式: 剑字0 剑字1 剑字2 多字0 多字1 多字2    IORDY=开启/关闭, tPIO={最小:120,带IORDY:120}, PIO 模式: 模式3 模式4

这里有很多好东西。例如,请注意 DMA 信息。当我们开始使用设置时,这将派上用场。为了了解我所做的任何事情是否会带来任何好处,最好先获得一个基准读数,了解我事先拥有的访问类型。有两个 hdparm 标志可以提供这种类型的信息。第一个 -t 将提供磁盘上顺序数据物理读取的基准报告。第二个参数是 -T,它报告缓存缓冲区读取;本质上,这不涉及物理数据的真实读取,而更多的是处理器、内存等的性能报告。为简单起见,您可以将这两个参数结合使用;hdparm 将考虑到这一点并进行一些修正。hdparm 文档建议多次运行此测试以获得良好的平均读数。在此示例中,我只会向您展示其中一次运行的报告(它们都非常接近)。

   [root@devsys1 /root]# /sbin/hdparm -Tt /dev/hda

   /dev/hda:    缓存缓冲区读取的计时:   64 MB 在  0.74 秒内 =86.49 MB/秒    缓冲磁盘读取的计时:  32 MB 在 10.54 秒内 = 3.04 MB/秒

请记住这些数字,因为变化将非常显着。默认情况下,从磁盘的数据传输以 16 位块进行。在 IDE 或 EIDE 驱动器上,硬件就是这样做的,但当它到达控制器时,它可以以 32 位块在系统总线上移动。要了解是否启用了 32 位 I/O 支持,请使用 -c 参数。

   [root@devsys1 /root]# /sbin/hdparm -c /dev/hda

   /dev/hda:    I/O 支持  =  0 (默认 16 位)

如您所见,我们正在运行裸 16 位。让我们使用 -c3 开关将其更改为 hdparm。“3”告诉程序打开带有“同步”的 32 位 I/O。

   # /sbin/hdparm -c3 /dev/hda

   /dev/hda:    将 32 位 I/O 支持标志设置为 3    I/O 支持  =  3 (32 位带同步)

当我们再次使用 -Tt 标志运行 hdparm 时,我们得到一组数字,这些数字开始看起来比第一次运行更有趣。

   # /sbin/hdparm -Tt /dev/hda

   /dev/hda:    缓存缓冲区读取的计时:   64 MB 在  0.65 秒内 =98.46 MB/秒    缓冲磁盘读取的计时:  32 MB 在  6.23 秒内 = 5.14 MB/秒

请注意,虽然缓存缓冲区读取(来自内存的读取)没有任何大的变化,但我们的磁盘读取发生了非常显着的变化。由于磁盘访问通常是系统上最慢的随机访问操作之一(不包括 CD-ROM 或软盘),因此这开始看起来非常有趣 <最后两个词用傻傻的喜剧声音拉长>。

因此,32MB 的磁盘读取从 10.54 秒变为 6.23 秒。我想我应该对此感到高兴,但我们可以做得更好吗?您可能需要考虑另一个参数。您是否可以这样做应该在您之前的 -i(信息)hdparm 操作中显而易见。您会注意到在我的示例中,我有一个 DMA=yes 读数,后跟一些额外的 DMA 信息:DMA 模式:剑字0 剑字1 剑字2 多字0 多字1 多字2 。这告诉我我的磁盘支持 DMA 或直接内存访问。从本质上讲,这意味着我的驱动器可以将信息直接从驱动器发送到系统内存。处理器不必参与操作。要设置 DMA 访问,请使用 -d1 参数(-d0 表示关闭)。

   # /sbin/hdparm -d1 /dev/hda

   /dev/hda:    将 using_dma 设置为 1 (开启)    using_dma    =  1 (开启)

好的。  现在,让我们再次检查一下基准测试结果,好吗?

   /dev/hda:    缓存缓冲区读取的计时:   64 MB 在  0.65 秒内 =98.46 MB/秒    缓冲磁盘读取的计时:  32 MB 在  2.32 秒内 =13.79 MB/秒

!从最初的 10.54 秒到 6.23 秒再到 2.32 秒。那里的一些 IDE/EIDE 驱动器也支持 UDMA,但遗憾的是,今天我无法为这些驱动器代言。

就在我结束另一篇专栏之前,让我给您一个临别赠言 /proc 小技巧。您可能已经注意到,当您不小心在 Linux 系统上按下“Ctrl-Alt-Del”(从以前的三指礼时代遗留下来的)时,它开始进行有序的关机。嗯,对三指礼的响应是在 /proc/sys/kernel 中的一个名为“ctrl-alt-del”的伪文件中设置的。此值默认设置为“0”,这意味着 Linux 在看到三指礼后,将执行友好的重启。当设置为其他任何值时,此值将导致 Linux 直接关机,而没有任何预先警告,这可能会很混乱。我想这里的教训是,我猜,有些事情最好还是不要动。

直到我们下次在这个最阳光明媚的角落相遇,给 Tux 调整一下。你们都可能会喜欢它。

电子邮件:ljeditors@ssc.com

加载 Disqus 评论