译注:本文译自linuxforums.org上的一篇文章《Linux Performance

Tuning》(原文作者Fernando

Apesteguia发表于2006年)翻译此文仅为英语与技术学习。转载请注明原文出处与作者。如有翻译不当欢迎指正交流。(Garriot

Zhang译注)。

Fernando

Apesteguia的结论是:“当一个发行版打包发送到客户手中的时候,它是为了完全兼容市场中大部分计算机而设计的。这是一个相当混杂的硬件集合(硬盘,显卡,网卡,等等)。所以Red

Hat, Suse,Mandriva和其他的一些发行版厂商选择了一些保守的设置来确保安装成功。”

为什么要系统调优?

这可能是第一件你想知道的事。当一个发行版打包发送到客户手中的时候,它是为了完全兼容市场中大部分计算机而设计的。这是一个相当混杂的硬件集合(硬盘,显卡,网卡,等等)。所以Red

Hat, Suse,Mandriva和其他的一些发行版厂商选择了一些保守的设置来确保安装成功。

简单地说:你的发行版运行的很好,但是它可以运行地更好!

比如,你可能有一个具体一些特殊特性的高级硬盘,而这些特性在标准配置的情况下可能就没被启用。

如何知道它运行的不好?

一旦你确定要优化你的系统,需要花一点时间来找出来哪些地方可以提升。你可以使用如下工具来完成这个工作:

ps

这个工具能让以看到你的系统里有什么正在运行的进程。你能看到从你自己的到整个系统范围内的所有进程。这个命令显示进程的PID,相关的终端,累计时间和进程名称。你能用ps来监视什么进程正在运行和哪些进程正在大量占用CPU。

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME

COMMAND

fernape 2474 0.0 0.1 53944 1648 tty1 Ss 13:02 0:00 -bash

fernape 2577 0.0 0.1 52732 1180 tty1 S+ 13:02 0:00 /bin/sh

/usr/X11R

fernape 2609 0.0 0.0 5476 720 tty1 S+ 13:02 0:00 xinit

/etc/X11/xi

fernape 2801 0.0 1.1 134360 11768 tty1 S 13:03 0:00

/usr/bin/gnome-se

fernape 2854 0.0 0.0 8796 812 tty1 S 13:03 0:00

/usr/bin/dbus-lau

fernape 2899 0.1 0.9 73576 10112 tty1 S 13:03 0:01

/usr/libexec/gcon

fernape 2962 0.0 0.0 5244 972 tty1 S 13:03 0:00

/usr/bin/gnome-ke

fernape 3180 0.0 0.1 53952 1652 pts/0 Ss 13:07 0:00 bash

fernape 3249 0.0 0.1 53952 1628 pts/1 Ss 13:09 0:00 bash

fernape 3535 0.0 0.0 5440 828 pts/0 R+ 13:18 0:00 ps u

top

如果你喜欢ps的话,你也会喜欢top。Top是一个持续跟踪进程的非常有效的工具。在命令行里输入top可以启动它。通过top,你能得到一个根据CPU或者内存占用排序的进程列表。要知道top更多的信息,请读一下这个文章,更有效的使用top命令。

vmstat

vmstat提供虚拟内存、进程、CPU以及更多的信息。它在监测系统全局状态的时候非常有用。这个工具提供的是从其他著名的UNIX工具获得的信息的集合。

[fernape@Hammer ~]$ vmstat

procs ———–memory———- —swap– —–io—- –system–

—-cpu—-

r b swpd free buff cache si so bi bo in cs us sy

id wa

0 0 0 598412 17444 222484 0 0 258 39 1040 211 6 2

86 7

time

这是一个很小但很有用的记录执行时间的工具。它把一个命令当作参数,然后执行它并且给出一个简要的进程时间花费的统计。它能帮你找出来这个命令是不是花费了比预期更长的时间。当然,当你处理你自己开发的程序的时候它会特别有用。你可以修改源代码再编译,然后比较结果。

[fernape@Hammer ~]$ time ls -R >/dev/null

real 0m0.117s

user 0m0.057s

sys 0m0.046s

x11perf

x11perf在X

server上执行基准检查。在命令行输入x11perf调用这个命令。它有很多参数,用-all参数执行它可以获得很多信息(但是可能会执行很长时间)。

很明显,如果我们不能把它的结果与别的进行比较,它给的信息就不会太有用。于是还有一个x11perfcomp的工具。X11perfcomp是用于比较x11perf两份结果的shell脚本。现在,分析X

server性能的方法就很明显了:先对当前的系统性能做一个快照,然后修改配置文件和系统设置(记住,x视窗系统使用共享内存,其它的进程间通信机制会影响它的性能,),再运行x11perf,最后,用x11perfcomp比较两份结果。

下面是一个节选的x11perf的输出。它是一个高度可配置的工具,你能指定性能测试的内容,也能执行全部可用的测试。

[fernape@Hammer ~]$ x11perf -all

x11perf – X11 performance program, version

1.5

The X.Org Foundation server version 60801000 on :0.0

from Hammer

Sun Apr 2 13:21:41 2006

Sync time adjustment is 0.0895 msecs.

40000000 reps @ 0.0001 msec (6890000.0/sec):

Dot

40000000 reps @ 0.0001 msec (7910000.0/sec): Dot

40000000 reps @ 0.0001 msec (7890000.0/sec): Dot

40000000 reps @ 0.0001 msec (7790000.0/sec): Dot

40000000 reps @ 0.0001 msec (8290000.0/sec): Dot

200000000 trep @ 0.0001 msec (7720000.0/sec): Dot

50000000 reps @ 0.0001 msec (10100000.0/sec): 1×1

rectangle

结果可以通过重定向输出到文件来保存下来。我执行了x11perf一次并且把结果保存在test1文件里,然后我修改了一下xorg.conf的一些设置,又执行了一次测试,并把结果保存在test2文件里。然后我比较它们:

[fernape@Hammer ~]$ x11perfcomp test1 test2

1: test1

2: test2

1 2 Operation

——– ——– ———

8310000.0 8140000.0 Dot

结果显示我的修改并不是太合适。

当x11perf运行的时候,下图一样的窗口会显示在屏幕上。为了避免测试结果被改动,不要动这个窗口也不要把鼠标放在它上面。这个窗口会在测试结束的时候消失。

hdparm

硬盘是机器里最重要的设备之一。无论什么时候加载进程,内存区在硬盘和内存之间被反复交换,硬盘都会被用到,而且,由于几乎UNIX系列操作系统的所有的东西都会用到文件,所以正确的设置硬盘非常重要。Hdparm能帮助你测试和设置硬盘。

现在我只是展示一下如何执行硬盘测试。如果你没有耐心而且想知道有哪些能用的参数,请直接读下一节:优化你的系统。

执行测试,键入(你可以把/dev/had换成你的硬盘):

[root@Hammer ~]# hdparm -tT /dev/hda

/dev/hda:

Timing cached reads: 1656 MB in 2.00 seconds =

828.13 MB/sec

Timing buffered disk reads: 102 MB in 3.03 seconds = 33.71

MB/sec

因为hdparm是一个受限制的工具,我用root的帐号执行的它。我们能看到缓存读取和缓冲磁盘读取的传输速率。如果你想看你现在的磁盘设置,试一下:

[root@Hammer ~]# hdparm /dev/hda

/dev/hda:

multcount = 16 (on)

IO_support = 1 (32-bit)

unmaskirq = 1 (on)

using_dma = 1 (on)

keepsettings = 0 (off)

readonly = 0 (off)

readahead = 256 (on)

geometry = 65535/16/63, sectors = 80026361856, start = 0

我建议你至少运行5次测试来获取一个有效值。而且,尽可能的不要使用其余的系统资源也很重要,这样这个测试就不会受别的阻塞的磁盘请求影响。

调优你的系统

接下来,我们会用一些工具来调优我们的系统。我们也会看到一些有用的节省内存的技巧,因为对于一些内存不太多的机器,这是极其重要的。

禁用系统服务

典型安装的情况下,为了保证最大化的用户兼容性和可用性,很多服务被启动。虽然对于大多数人来讲这是一个不错的做法,但是有时候,有些服务根本就不会被用到。因此,禁用那些没用的服务是个不错的主意。很多程序可以做这个。在基于Red

Hat的系统上,你可以在命令行模式使用setup或者使用图形会话中使用serviceconf(如下图所示)。

有一些可以被禁用的服务:

Network Manager:

选择最好的有效链接(你一直都保持连接并且经常移动吗?)

Bluetooth:如果你不太用蓝牙设备,那就禁用它

Cron:

如果你没有计划任务的话,就禁用它(也许你可以自己运行这些任务,而不是定时执行)

Cups:打印机后台程序(我在我的笔记本上禁用了他因为我不在上面打印东西)

Iptables:linux防火墙(这个需要冒点风险)

Irda:和蓝牙一样的红外线通信服务

Irqbalance:如果你使用的不是SMP系统的话,那就禁用它

Nfs:如果你不通过NFS共享文件的话,可以禁用它

杂项服务(ssh,sftpd。。。):很多服务都会被默认启动。你真的想让你的系统变成一个服务器吗?

Vnc:虚拟网络控制台。如果你不需要远程图形化访问,禁用它

在Red Hat系统里,你可以这样chkconfig命令(针对非图形化会话)添加和移除系统服务:

chkconfig service on/off

其它的系统有它们自己的机制管理服务。读一下你的系统手册。

禁止X在启动时运行

是不是禁用X服务,要看你是哪种用户。我是一个命令行的狂热者,我就禁止了X在启动的时候运行。当我启动我的系统的时候,我登录到命令行开始我的工作并且结束掉X。如果你不介意使用bash(或者shell)的话,这能节省很多内存。如果你想禁用X,找到/etc/inittab文件,修改这一行:

id:5:initdefault:

改成:

id:3:initdefault:

下次你在启动系统的时候,你会进入纯命令行模式。这不仅是为了节省内存,一些简单的操作还会更快。如果如果我想向我的电影列表里加入一行,在命令行模式下,我就不用那么多时间去等待图形界面的GNOME,Metacity和X

server加载。

移除控制台

Linux一个很酷的特性就是可以允许多个终端。这些终端可以通过Ctrl+Fn键访问,也允许你多次登录一个系统。但诚实一点讲,我用了Linux很多年,但从没有同时用过三、四个以上的终端。所以,你也可以禁用它们来节省一些内存。如果你使用图形化的桌面,你甚至还可以使用一个或多个gnome-terminal或者konsole。所以你也可以只留下一个额外的终端,而释放其它的。

为了实现这个,还得修改/etc/inittab文件,只需要注释掉设置终端的那些行。

# 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

hdparm

现在,我们再来研究一下hdparm。我们已经知道它能显示磁盘信息,其实它还能设置磁盘属性。你可以试一下一些重要选项:

-d:启用/禁用DMA传输

-X:优化DMA传输

-A:磁盘预读

-c:启用IDE32位支持

-C:对笔记本来说非常重要(电源管理特性)

比如,我要禁用DMA传输、预读和32位支持并且执行一个测试

[root@Hammer ~]# hdparm -A0 -d0 /dev/hda

/dev/hda:

setting using_dma to 0 (off)

setting

drive read-lookahead to 0 (off)

using_dma =

0 (off)

[root@Hammer ~]# hdparm -tT /dev/hda

/dev/hda:

Timing

cached reads: 1580 MB in 2.00 seconds = 789.33 MB/sec

Timing

buffered disk reads: 8 MB in 3.20 seconds = 2.50 MB/sec

请注意,磁盘缓冲读取明显降低了。性能相差15倍以上(与上面的测试结果相比较)。

sysctl

这可能是最好的linux系统调优工具。它能在linux内核运行的时候设置大量的系统参数。它通过从procfs文件里读写系统变量来做这件事。

当输入下面的命令的时候,会显示完整的有效系统变量列表:

[root@Hammer ~]# sysctl -a

解释这个长长列表里的每一个变量会浪费大量时间。如果你对它们感兴趣的话,可以自己去试一下(大多数变量都是自解释的)。

我的建议:看一下网络选项。

安装显卡驱动

如果你使用的常用配置和安装方式的话,我确信你没有充分利用到这个设备的所有能力。最大的显卡厂商,就像Nvidia,ATI或者Intel,提供很多它们针对Linux的专用驱动。因为许可证的问题,它们并没有被包括在大多数发行版之内。让我们再来用一下x11perf。我用默认安装的标准VGA驱动运行了一次deepcopyplane500测试,并把结果保存为test1文件。接着我把我的ATI

Radeon Mobility 9700显卡的驱动换成了ATI的专用驱动,又运行了这个测试并把结果保存成test2文件。

x11perfcomp的比较结果显示了这两个驱动的巨大差异:

[fernape@Hammer ~]$ x11perfcomp test1 test2

1: test1

2: test2

1 2

Operation

——– ——–

———

7.7 54.2

Copy 500×500 n-bit deep plane

ATI的驱动获得了将近8倍的性能提升。

正如你所见,为你的显卡换上一个适当优化过的驱动绝对是个好主意。

更进一步,你甚至能提高显卡驱动的性能。Nvidia和ATI,允许你安装一个预编译的包或者生成一个新的。后者允许你针对你的机器编译一个驱动,而不必使用通用的那个。

如果你选择重新编译,你需要你的内核源码,但幸运的是安装程序做的非常好,能让你生成一个包却不需要任何额外工作。

主频调整的调节器

如果你在使用一个可变主频处理器(比如Centrino或者AMD64),你可以正确的设置你的处理器来节省电池电量。Cpufreq可以帮助你做这个。它能管理Centrino和AMD64处理器,并且允许你通过/sys下的一个接口来控制频率。通过cpufreq你能调整频率到最小(最大省电),最大(最大性能),或者让调节器来选择什么时候提高或者降低频率。

要安装这个后台程序,你需要libsysfs和频率调整的内核支持。大多数现在的发行版都已经预装了cpufreq。现在,我们来配置它一下。我的情况是,我的AMD

CPU并没有正确配置,所以它一直运行在100%的程度上。

上面提到的可配置的那些东西被显示出来:

[fernape@Hammer ~]$ ls /sys/devices/system/cpu/cpu0/cpufreq/

cpuinfo_max_freq scaling_available_governors

scaling_governor cpuinfo_min_freq

scaling_cur_freq scaling_max_freq scaling_available_frequencies

scaling_driver scaling_min_freq

更多信息请看一下文档。你可以安装cpufreq的applet来轻松配置你的调节器。

想做更多:编译你的内核(最简单的方式)

Linux的内核是操作系统的核心。它是你用你的发行版工作的必需品。就算你只是执行一个“hello

world”程序,也是内核在加载这个程序,请求内存,并执行系统调用来完成你能看到的工作。

因此,安装和正确配置(还有优化)你的linux内核是非常重要的。编译内核是一个很长很复杂的话题,这里不会深入讨论。然而,如果你的发行版提供针对大多数通用架构的默认配置文件,那你就非常幸运。基于Red

Hat的系统就是这么做的。让我们看一下如何简单的编译我们自己的内核:

首先,我假设你已经在你的机器上正确安装了Linux内核的源代码。

现在,我们转到源代码目录。一般来说路径好像:

/usr/src/linux-2.6.9/

现在,我们开始配置我们的新内核。

make gconfig

我们可以从写配置开始配置我们的内核,但那不是我们的目标。我们可能会忘掉一个重要要素,然后构建出一个可能不能用的内核。所以,从“configs”子目录加载一个配置文件。

这些配置文件会确保你能得到和默认内核一样的但针对你的特殊处理器优化过的结果。你可以放心的加载这个文件,而不用担心任何东西。下图显示配置文件加载。

还有,我确定我的处理器是一个Athlon64,所以我在选项里设置了它,并且取消了Generic-x86-64的选项。

然后保存你的设置,继续下一步:

make;

make modules;

make modules_install;

如果需要,创建你自己的initrd文件。

如果你成功编译并安装了你的内核,你就会不费吹灰之力感受到你系统架构的优势。

结论

Linux厂商做了很大努力还构建优化版本的Linux系统。然而,成功安装也很重要。所以,这些厂商会评估这两个因素。因此,系统的某些部分并没有在最大性能工作。我们的任务就是找到这些点,然后调整它们到更高性能的状态。

此外,因为这些厂商想让Linux成为被广泛应用的操作系统,有些时候他们启动了很多不常用的服务。作为一个高级用户,禁用这些服务和特性来节省内存和其他系统资源是很重要的。

最佳策略:如果你不用这个特性,那就可以安全地禁用它。你就可以节省很多系统资源。

Linux系统是完全可配置的。让我们利用好这个优势。

linux性能调优看这篇就懂,[转载]Linux性能调优相关推荐

  1. unix/linux系统中文件分为哪些类型?,到底该如何理解 Unix/Linux 的文件系统?看这篇就知道了...

    原标题:到底该如何理解 Unix/Linux 的文件系统?看这篇就知道了 作者:舠

  2. 走进Linux的世界,看这篇文章就够了

    Linux系统诞生于1991年,由芬兰大学生李纳斯(LinusTorvalds)和后来陆续加入的众多爱好则共同开发完成.当时LinusTorvalds在借鉴了MINIX,于1991年编写出Linux操 ...

  3. 阿里P8架构师“墙裂”推荐,JVM性能调优看这篇就够了

    根据JDK12和JDK 13 EA版本全面更新,新增内容近50%,并对第2版中含糊.瑕疵和错误内容进行了修正. 计算机图书领域的丰碑,前两版累计印刷36次,销量超过30万册,两家网店评论数量超过900 ...

  4. 学习linux内核-- 内存,看一篇就够了(多图)

    内存模块 1 linux内存总体布局:内存分成用户态和内核态 4G进程地址空间解析 内核地址空间 进程地址空间 2 地址转换和页表 2.1 地址转换 虚拟内存是指程序使用的逻辑地址.每个进程4G.所有 ...

  5. MySQL 数据库性能优化,看这篇就够了

    无论是运维.开发.测试,还是架构师,数据库技术是一个必备加薪神器. 而 MySQL 由于免费,而且性能强劲,是目前使用最广泛的数据库产品,同时也是入门门槛最低的数据库产品之一.更重要的是,掌握了 My ...

  6. 全网最全Log配置教程及框架性能比较,看这篇就够了!

    不管是使用何种编程语言,何种框架,日志输出几乎无处不再,也是任何商业软件中必不可少的一部分. 总结起来,日志的用途大致可以归纳成以下三种: 问题追踪:通过日志不仅仅包括我们程序的一些bug,也可以在安 ...

  7. Linux学习大全(看一篇就够了)持续更新...

    一.Linux目录文件 1.基本目录结构 在Linux世界里,一切皆为文件. 2.详细的目录 /bin  经常使用的命令 /sbin  存放的是系统管理员使用的系统管理程序 /home  存放普通用户 ...

  8. Linux内存,先看这篇文章

    内存大小计算 我们拿32位系统来举个栗子 2^32 = ‭4,294,967,296‬ bytes ‭4,294,967,296‬ bytes / 1024 = ‭4,194,304‬ kbytes ...

  9. 一篇读懂|Linux系统平均负载

    我们经常会使用 top 命令来查看系统的性能情况,在 top 命令的第一行可以看到 load average 这个数据,如下图所示: load average 包含 3 列,分别表示 1 分钟.5 分 ...

最新文章

  1. Leetcode 173. 二叉搜索树迭代器 解题思路及C++实现
  2. 授权公钥登录,sudo权限脚本
  3. BAPI_CONTRACT_CREATE
  4. hadoop调优之一
  5. PgSQL · 最佳实践 · CPU满问题处理
  6. 【算法】学习笔记(0):算法初探(逻辑抽象 + 示例 + 代码实现)
  7. 计算机网络有哪些技能知识,网络基础知识及操作技能.ppt
  8. DataGridView 动态绑定列
  9. Linux 线程绑核(以后研究)
  10. docker具名和匿名挂载
  11. 代码管理学:凡事养成登记的做法,比如依赖库
  12. 利用nat123进行内网穿透
  13. 用户个人中心页面html5源码,橙色的商城个人中心全部页面模板html源码
  14. google glog 简单使用小结
  15. MySQL 打开视图 1449_Mysql查询视图:ERROR 1449 (HY000)解决办法
  16. LintCode 138.子数组之和
  17. 纯css svg 改变图片颜色 ios android 小程序
  18. 基于凸松弛算法的电力市场策略研究(Matlab代码实现)
  19. node.js + express + mysql 简单运用
  20. 关于破解的十个基本功

热门文章

  1. 最全总结:物联卡不能上网?这些原因你遇到了?
  2. 重新启动计算机前控制台无法刷新,重新安装.NET framework 3.5以准备Websense安装
  3. 5.2 缺失值处理(填充缺失值)
  4. 无线数据传输终端在电力远程抄表中案例
  5. 简单盘点编程在Houdini游戏开发中的用武之地
  6. Angular2知识概括
  7. linux oracle lrm00109,Oracle:ORA-01078与LRM-00109报错
  8. hdu 1597 find the nth digit(等差求和+二分)
  9. 使用Retrace还原被ProGuard混淆后的崩溃堆栈
  10. 图像处理技术的应用及重要性调研报告