为最佳性能而调优 Red Hat(3)

发表于:2007-07-01来源:作者:点击数: 标签:
在完成软件包维护和升级后,我们应当把目光转向系统本身,进行进一步的清理。如果您只完成这部分中的个别步骤,那么它们产生的效果不会很显著。但是如果您完成所有的步骤,那么您的系统将变成优化的易于维护的系统。 系统服务是程序,它们通常的形式是守护程
在完成软件包维护和升级后,我们应当把目光转向系统本身,进行进一步的清理。如果您只完成这部分中的个别步骤,那么它们产生的效果不会很显著。但是如果您完成所有的步骤,那么您的系统将变成优化的易于维护的系统。

系统服务是程序,它们通常的形式是守护程序,它们在后端的预先分配的 TCP/IP 端口上侦听请求。当用户连接到 Web 服务器的时候,在端口 80(缺省值)上侦听的 Apache 守护程序将响应服务请求。如果请求是有效的,那么 Apache 将作出响应并把所请求的 Web 页面返回给客户机,然后 Apache 将再次“休眠”,直到接收的下一个请求。是的,休眠的服务并不需要太多的系统资源,但是如果您的系统并不是被配置成 Web 服务器,那么为什么要运行 Apache?如果您从不使用 NFS,那么为什么要激活 portmapper 守护程序?本教程信奉“越少越好”的理念,对于某个系统来说,没有理由运行那些不是特别需要的服务。

取消系统服务 第 2 页(共6 页)




在 Red Hat 系统中,控制哪些服务在启动时运行的方法是以 root 用户的身份登录(或通过输入 su - 来获得完全的 root 环境)再输入:


[root@thor root] # setup


这将调用一个基于光标的管理设置程序。下一步,在提供的列表中选择 System services。向下滚动各条目,不选择所有不必要的服务。如果您想查看结果,请重新引导系统,然后查看 netstat -lnp --ip 命令的输出。以下是“以前”(标准的系统安装)和“以后”(关闭所有没用的服务,只剩下 SSH 守护程序在运行):


[root@thor root]# netstat -lnp --ip
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN 669/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 641/portmap
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 831/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 906/sendmail: accep
udp 0 0 0.0.0.0:32768 0.0.0.0:* 669/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0:* 641/portmap

[after]
[root@thor root]# netstat -lnp --ip
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 712/sshd
[root@thor root]#


请注意:与其使用“-a”(all,全部)选项,不如使用“-l”选项,因为我们只关心在套接字上侦听的守护程序。

减少虚拟控制台 第 3 页(共6 页)




虚拟控制台使您能够作为同一个用户或不同的用户多次登录到系统中去。启动新的控制台或登录会话的方法是同时按 、 和一个功能键(F1 - F6)。管理员通常这样使用多个虚拟控制台:以 root 用户的身份完成任务,同时在他们原来的登录会话中仍是普通用户。这当然很好,但有多少人需要同时访问六个虚拟控制台(别忘了,虚拟控制台类似于系统服务;它们在被激活之前一直使用系统服务保持活动状态)?减少可用的虚拟控制台的数量的方法是打开 /etc/inittab 并把引用 /sbin/mingetty ttyx 的一行或多行改为注释。以下是该文件经过编辑后的输出:


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6


禁止 X 自动启动 第 4 页(共6 页)




多数管理员喜欢从命令行完成各种日常的任务。然而,多数商业的 Linux 分发版在系统初始化后缺省地启动 X-Window 管理器。如果您在编译程序或编辑配置文件,那么启动 X-Window 管理器将消耗大量系统资源。禁用 X-Window 管理器的方法是编辑 /etc/inittab 文件,找到内容是 id:5:initdefault 的那一行,再把它改为 id:3:initdefault。系统启动后将提供命令行登录,当您需要运行窗口管理器的时候,只要输入 startx 就可以了,很容易。

与我们讨论的窗口管理器相关的是桌面环境,通过使用最新版本的 binutils(在写本教程的时候,最新的是 2.12.x)和 gcc 3.x 编译器来重新编译桌面环境能大大提高性能。2.12.x 版本的 binutils 使编译器能利用 combreloc 功能来构建程序,combreloc 允许预先链接重定位的代码:在 C++ 代码、Qt 和 KDE 中,重定位的代码有广泛的应用。然而,这样大的任务肯定不适合神经脆弱的人。根据不同的机器,需要花四到五小时才能完成对 Qt 和 KDE 的编译。对于有耐心和所需的毅力的人来说,最终的结果是运行速度明显提高的较大的可执行文件。

请搜索 KDE 的一个新闻组,了解这个过程的更多细节(和告诫)(请参阅参考资料)。

优化硬盘驱动器 第 5 页(共6 页)




如果您的系统中有一个 IDE 硬盘驱动器而且您所运行的内核比较旧(一般来说,较新的 2.4.x 内核能优化硬盘驱动器的性能设置而无需另外的配置),那么您应当考虑使用 /sbin/hdparm 程序。但是,请注意,不恰当地使用 hdparm 至少会降低硬盘驱动器的性能,在最坏的情况下可能破坏驱动器本身。用户需承担使用 hdparm 的风险,所以请仔细阅读它的手册页( man hdparm )。

hdparm 的一些常用选项如下:

/sbin/hdparm -c1 /dev/hda 或 hdb 或 hdc 等 :启用 PCI 总线上的 32 位 I/O。

/sbin/hdparm -d1 /dev/hda :启用 DMA。

/sbin/hdparm -d1 -X66 /dev/hda :启用 UltraDMA 转移。

获取系统中当前硬盘驱动器的设置列表的方法是(作为 root)输入: /sbin/hdparm /dev/hda

当您把一切优化到最佳状态后,请把各种命令添加到 /etc/rc.d/rc.local 文件中去,使这些命令在每次系统引导时自动运行。


配置 TCP/IP 资源 第 6 页(共6 页)




对于多数人来说,配置 TCP/IP 栈是邪恶的魔术,但是如果您运行高负载的 Web 服务器,那么有选择地更改 Red Hat 的一些缺省值能明显提高系统响应速度。TCP/IP 配置值被存储在 /proc/sys/net/ipv4 目录中,通常可以是某个值或用“0”(关)和“1”(开)来分别表示禁用和启用。在写本教程的时候,Red Hat 发行的 Red Hat 7.3 的缺省值如下:

tcp_fin_timeout 180
tcp_keepalive_time 7200
tcp_window_scaling 1
tcp_sack 1
tcp_timestamps 1
在下面的设置中,更改某些值能增加服务器可处理的 TCP/IP 连接的数量,缩短服务器在终止失效连接前的等待时间,禁用一些不必要的 IP 扩展。把这些设置添加到 /etc/sysctl.conf 文件,然后重新启动网络守护程序( /etc/rc.d/init.d/network restart )。


# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
#Turn off tcp_timestamps
net.ipv4.tcp_timestamps = 0

原文转自:http://www.ltesting.net