一、磁盘调谐
优化的分区
对系统性能影响相对较大的分区置于磁盘的靠外部分,对内容经常改变的目录放在单独的分区
根据以上特点,需要如下分区策略:
分区1: /boot 200M
分区2: /swap 256M
分区3: /home 500M
分区4: /var 200M
分区5: /tmp 100M
分区6: /usr 800M
分区7: / 100M
分区8: /data leave
如果系统有多块硬盘,可以考虑使用多个交换分区。每个磁盘上划分一个交换分区。通过在/etc/fstab文件中设置pri 选项,可使多个交换分区具有同样的优先级。Linux系统即可并行地使用它们。这样即可提高交换分区的性能。
/dev/hda5 swap swap defaults,pri=5 0 0
/dev/hdc5 swap swap defaults,pri=5 0 0
使用elvtune调谐磁盘I/O
在Linux内核2.4以后的版本中,可以通过磁盘I/O的调度操作,来控制磁盘I/O的响应间和吞吐量。通过调整I/O请求在队列中的最大等待时间,可以在响应时间和吞吐量之间调谐。如果要求较少的响应时间,那么吞吐量将降低,反之,较长的响应时间则可以得到较大的吞吐量。可以使用工具"/sbin/elvtune"来改变最大的响应时间值。使用方法如下:
查看当前的设置
# /sbin/elvtune /dev/sda1
修改当前的配置
# /sbin/elvtune -r 2000 -w 4000 /dev/hda1
其中-r参数针对读操作,-w参数针对写操作.
可以通过命令"iostat -d -x /dev/hda1"得到的平均信息(包括平均请求大小和平均队列长度)来监视以上I/O配置的效果,并调整配置,以得到最佳的性能。一般来讲,对于读写频繁,但操作的数据量较少的Linux服务器,且对实时性要求较高,那么可以将参数调小。反之如果对于读写不频繁,但要求具有较大的吞吐量的Linux服务器,可以将参数调大,以获得较大的吞吐量。
二、文件及文件系统调谐
块大小
使用较大的块大小将得到较好的性能。将ext2文件系统的块大小调整为4096byte而不是缺省的1024byte,可以减少文件碎片,另外,在ext2的文件系统中,为根目录保留了5%的空间,对一个大的文件系统,除非用作日志文件,5%的比例有些过多。可以使用命令"# mke2fs -b 4096 -m 1 /dev/hda6"将它改为1%并以块大小4096byte创建文件系统。如果系统用作邮件或者新闻服务器,使用较大的块大小,虽然性能有所提高,但会造成磁盘空间较大的浪费。比如文件系统中的文件平均大小为2145byte,如果使用4096byte的块大小,平均每一个文件就会浪费1951byte空间。如果使用1024byte的块大小,平均每一个文件会浪费927byte空间。在性能和磁盘的代价上如何平衡,要看具体应用的需要。
调整缓冲区刷新参数
Linux内核中,包含了一些对于系统运行态的可设置参数。缓冲刷新的参数可通过
/proc/sys/vm/bdflush文件来完成,这个文件的格式是这样的:
# more /proc/sys/vm/bdflush
40 0 0 0 500 3000 60 0 0
第一个数:在"dirty"缓冲区达到多少的时候强制唤醒bdflush进程刷新硬盘,
第二个数:每次让bdflush进程刷新多少个dirty块。所谓dirty块是必须写到磁盘中的缓存块。接下的数:每次允许bd flush将多少个内存块排入空闲的缓冲块列表。
修改方法
# echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush 并将这条命令加到/etc/rc.d/rc.local文件中去。
以上的设置加大了缓冲区大小,降低了bdflush被启动的频度,同时也增加了万一系统崩溃丢失数据的危险性。VFS的缓冲刷新是Linux文件系统高效的重要原因之一。
调整文件句柄数和i-节点数
在Linux内核2.4.x中需要修改源代码,然后重新编译内核才生效。编辑Linux内核源代码中的
include/linux/fs.h文件,将 NR_FILE 由8192改为 65536,将NR_RESERVED_FILES 由10 改为 128。编辑fs/inode.c 文件将 MAX_INODE 由16384改为262144。
一般情况下,最大打开文件数比较合理的设置为每4M物理内存256,比如256M内存可以设为16384,而最大的使用的i节点的数目应该是最大打开文件数目的3倍到4倍。
三、其它方面的调谐
调谐buffermem
文件buffermen和内核虚拟内存子系统密切相关。文件/proc/sys/vm/buffermem控制多大内存被用于缓冲区(百分数表示)。内核2.4的缺省值为:: "2 10 60"。可以按如下方法修改:
# echo "70 10 60" >/proc/sys/vm/buffermem
并将之加到脚本文件/etc/rc.d/rc.local 中。或者在/etc/sysctl.conf文件中加入
vm.buffermem = 70 10 60
第一个参数 70意味着至少分配70%的内存用作缓冲区。后两个参数保持系统的默认值。第一个参数设置为多大合适,依赖于系统的内存大小和系统高负载时内存的使用情况(可用free监视)。
进程限制
Linux对于每个用户,系统限制其最大进程数。为提高性能,可以设置超级用户root的最大进程数为无限。编辑.bashrc文件(vi /root/.bashrc)增加行"ulimit -u unlimited"即可消除超级用户的进程限制。
核心和系统对用户进程其它的一些限制也可以通过ulimit命令来查看和更改。"ulimit -a" 用来显示当前的各种用户进程限制。一些更改用户限制的例子如下:
ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024
ulimit -m 4096 限制每个进程使用的内存数。
优化gcc编译
将优化标志放在/etc/profile文件中。在pentium III级的处理器上使用以下优化标志将得到最优的应用程序:
CFLAGS=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions
再将如下行加到/etc/profile 更靠后的位置:
export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC CFLAGS LANG LESSCHARSET使用以上的优化,gcc或者egcs编译的程序将得到最佳的性能。