`
itspring
  • 浏览: 45081 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

linux 系统优化

阅读更多

概述

1. “/etc/profile”文件

2. “bdflush”参数

3. “ip_local_port_range”参数

4. “/etc/nsswitch.conf”文件

5. “/proc”文件系统

6. “ulimit”参数


1. “/etc/profile”文件

“etc/profile”文件含有系统大量的环境和启动程序的配置信息。你在该文件中进行的配置,可以通过申请全局环境变量来实现。因此,在该文件中设置优化标志,是一种明智的选择。要想使x86程序获得最佳性能,可以在编译时,使用最佳的优化选项-O9 。许多程序的“Makefile”文件中已经含有-O2选项,而-O9使编译器采用最高级别的优化。尽管它将增加最终程序的大小,但这样可以获得更高的运行速度。编译时,使用“-fomit-frame-pointer”选项,程序运行时,访问变量时将使用堆栈。但是,使用这一选项,生产的代码将无法调试。使用“-mcpu=cpu_type”和“-march=cpu_type”选项,Gcc将针对这种型号CPU进行专门的优化,但生成的代码只能在所指定的CPU或更高系列的CPU上运行。

对于CPU i686或PentiumPro、Pentium II、Pentium III

在“/etc/profile”文件中 , 加入一行:

CFLAGS=’-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-
frame-pointer -fno-exceptions’

对于CPU i586或Pentium

在“etc/profile”文件中, 加入一行:

CFLAGS=’-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops -fomit-frame-pointer -fforce-
mem -fforce-addr -malign-double -fno-exceptions’

对于CPU i486

在“etc/profile”文件中, 加入一行:

CFLAGS=’-O3 -funroll-all-loops -malign-double -mcpu=i486 -march=i486 -fomit-frame-pointer -fno-exceptions’

在进行完以上设置之后,紧接者着把“CFLAGS LANG LESSCHARSET”加入到“etc/profile”文件中的“export”行中:

export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC CFLAGS LANG LESSCHARSET

然后,重新登录,这时,环境变量CFLAGS已经被赋值,编译器和其它配置工具可以使用它。对Pentium(Pro/II/III)的优化必须使用egcs或pgcc编译器。Linux的缺省安装中,已经装上了egcs,所以无需担心。

基准测试结果(按体系结构分类):
由于CPU的体系结构和使用的gcc/egcs的版本不同,优化选项也会不同。下面的图表可以帮助你根据自己的CPU和编译器,选择最佳的编译选项。

Redhat 6.1中安装的编译器的版本是egcs 2.91.66,但是,即使你安装的就是Redhat 6.1,在选择编译选项之前也务必检查一下编译器的版本.

为了确认编译器的版本,使用如下命令:

[root@deep]# egcs --version。

注意:所有的测试结果可以从GCC的主页:http://egcs.cygnus.com/上检索到。

现举例说明:

对于CPU pentium II/III(i686),安装了egcs-2.91.66,最佳的编译选项是:

CFLAGS=’-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions’

对于CPU pentium (i586),安装了egcs-2.91.66,最佳的编译选项是:

CFLAGS=’-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops -fomit-frame-pointer -fforce-mem -fforce-addr -malign-double -fno-exceptions’

对于 CPU i486,安装了egcs-2.91.66,最佳的编译选项是:

CFLAGS=’-O3 -funroll-all-loops -malign-double -mcpu=i486 -march=i486 -fomit-frame-pointer -fno-exceptions’

-funroll-loops选项

对“loop unrolling”进行优化,只对在编译或运行时循环次数能确定的循环语句有效。

-funroll-all-loops

对“loop unrolling”进行优化,对所有的循环语句有效,担通常使程序运行变慢。

-ffast-math

该选项使GCC可以不遵从ANSI或IEEE的规则,以获得运行更快的优化代码。例如:它允许编译器假设sqrt()函数的输入参数非负以及所有的浮点数的值都是NaNs。

-malign-double

GCC把 double, long double, and long long类型变量定界在双字还是单字边界上,由该选项控制。double类型变量定界于双字边界时,产生的代码在Pentium机器上可以运行得更快一些,但是会占用更多的内存。

-mcpu=cpu_type

设定在生成指令时缺省的机器和CPU类型,设定好某一特定的CPU类型后,编译器将针对这种芯片产生相应的指令,如果不使用“-march= cpu_type”选项,编译器不会产生任何不能在i386上运行的代码。“i586”等价于“pentium”,“i686”等价于 “pentiumpro”,“k6”指明是使用AMD的芯片而非Intel系列。

-march=cpu_type

为指定类型的机器和CPU产生指令。这里的CPU类型与“-mcpu”中列出的相同。而且,使用本选项已经隐含了“-mcpu=cpu_type”选项。

-fforce-mem

对于涉及内存操作的运算,强制把操作数拷贝到寄存器中。这是通过把所有的内存引用转换成潜在的普通子表达式,以获得优化代码。如果,这些内存引用不是普通子表达式,可以通过指令的组合,消除单独的寄存器装载。

-fforce-addr

运算前把内存地址常数拷贝到寄存器中。所产生的优化代码与选项“-fforce-mem”类似。

-fomit-frame-pointer

对于不必要的框架指针(frame pointer),不在寄存器中保存。这就避免了相应的用于保存、设置和恢复框架指针所需的指令;这样,许多函数中可以使用额外的寄存器。但是,这一选项使得在大多数机器上无法进行调试。

注意:本书将要讨论的所有优化,缺省都是针对Pentium II/III 系列CPU。因此,如有必要,对于某些专门的CPU需要调整编译参数。

2. “bdflush”参数

下文讨论目录“/proc/sys/vm”下的系统控制文件,且只在Linux内核版本2.2下有效。控制该目录下的文件,可以调整Linux内核子系统--虚拟内存(VM)的行为,其中bdflush文件对于硬盘使用有一定影响。该文件控制了bdflush内核守护进程的行为。我们通常使用以下命令来提高文件系统的性能:

echo "100 1200 128 512 15 5000 500 1884 2">/proc/sys/vm/bdflush

修改某些值,可以使系统响应更快,例如:可以使系统在写入硬盘之前等待更长时间,从而避免了一些硬盘访问的冲突。

把该命令加入文件“etc/rc.d/rc.local”之中,每次重新启动机器时,就不必再次手工敲入这条命令了。

如果需要进一步理解如何改进有关虚拟内存、硬盘缓冲和交换空间(swap)的内核参数,可以参照“/usr/src/linux/Documentation/sysctl/vm.txt”。

3. “ip_local_port_range”参数

下文讨论目录“/proc/sys/net/ipv4/ip_local_port_range”下的系统控制文件,且只在Linux内核版本2.2下有效。

“ip_local_port_range”文件中有两个参数分别定义了用作TCP和UDP本地端口的端口范围。第一个参数是第一个端口号。第二个参数是最后一个本地端口号。对于使用率很高的系统,可以修改为:32768到61000。

echo *32768 61000* > /proc/sys/net/ipv4/ip_local_port_range

把该命令加入文件“/etc/rc.d/rc.local”之中,每次重新启动机器时,就不必再次手工敲入这条命令了。

4. “/etc/nsswitch.conf”文件

“etc/nsswitch.conf”文件定义了系统使用哪些服务来解析主机名、获得口令文件和组文件(group file)。我们的系统中由于没有使用NIS服务,因此口令文件和组文件我们没有使用。这里,我们只讨论该文件中的hosts这一行。

编辑“nsswitch.conf”文件(vi /etc/nsswitch.conf),把host一行改为:

"hosts: dns files"

含义:当请求解析地址时,首先访问DNS服务器,如果DNS服务器没有响应,则使用“/etc/hosts”文件。

我建议把该文件中每一行中的NIS都删掉。当然,如果你一定要使用NIS,就不能删掉NIS。最后,这个文件会是这样:

passwd: files
shadow: files
group: files
hosts: dns files
bootparams: files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files
automount: files
aliases: files

5. “/proc”文件系统

下文讨论目录“proc/sys/fs”下的系统控制文件,且只在Linux内核版本2.2下有效。该目录下的文件可以用来调整和监测Linux内核的一些行为。对这些文件的误操作可能搅乱系统,因此在实际调整系统之前,最好把文档和源代码都读一下。

适当的增加“/proc/sys/fs/file-max”的值:每4M内存对应256,例如:内存为128M的机器,该值可以设为8192(128/4 =32 32*256=8192)。同理,可以增加“/proc/sys/fs/inode-max”的值,使其值为打开文件数目的3到4倍(8192*4= 32768)。这是因为:i节点的数目至少等于打开的文件数,一般而言,对于大文件,i节点数远大于打开的文件数目。

用于改变/proc目录及其子目录下的任意参数的常用命令是(必须以root登录): echo “新的参数值”> “/proc/所需更改的文件”,对于上面所涉及的修改,其命令为:

echo "8192" >/proc/sys/fs/file-max
echo "32768" >/proc/sys/fs/inode-max

上文所讨论的方法修改了内核源代码的常数。但是,在新的内核源代码树中并不能起作用,因此还不能算是最好的方法。最好的一种方法是把上述命令加入文件“etc/rc.d/rc.local”之中。在该文件的最后加入以下两行(假设系统有128M内存):

echo "8192" >/proc/sys/fs/file-max
echo "32768" >/proc/sys/fs/inode-max

其中的数值因系统不同,差异很大,应该根据各自系统,按照上述的公式计算。一台文件服务器或WEB服务器需要打开的文件数目就很大,而用于数值的服务器该数值就较小。

对于内存非常多的系统,特别是512M或更多内存的系统,打开的文件数和i节点数最好不要超过50,000和150,000。

“file-max”参数是指Linux内核可以分配的文件句柄的最大数目。当系统经常报错:文件句柄不够时,就需要适当增大该参数的值。系统缺省值为:4096。

“inode-max”参数是指系统i节点句柄的最大数目。其值应该是file-max值的3到4倍。因为标准输入输出文件和网络套接字都要使用i节点来进行处理。如果系统经常性的出现i节点被耗尽的情况,就需要增大其值。

6. “ulimit”参数

Linux本身对每个用户拥有的最大进程数有限制。可以在用户根目录下的“.bashrc”文件或者实际使用与“.bashrc”功能相当的shell的脚本中加入这种限制。编辑“.bashrc”文件(例如:vi /root/.bashrc)并加入下面一行:

ulimit -u unlimited

然后退出,重新登录。为了验证,可以以root身份登录,然后键入: “ulimit –a”,在最大用户进程数一项中应该显示“unlimited”,例如:

[root@deep]# ulimit -a
core file size (blocks) 1000000
data seg size (kbytes) unlimited
file size (blocks) unlimited
max memory size (kbytes) unlimited
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes unlimited * this line.
pipe size (512 bytes) 8
open files 1024
virtual memory (kbytes) 2105343

注意:你可能更倾向于在命令行键入“unlimit –u”而不是把它加入到文件“/root/.bashrc”中。但为保险起见,建议还是把它加入文件“/root/.bashrc”中。

分享到:
评论

相关推荐

    Linux系统优化中文字体

    标题“Linux系统优化中文字体”所指的就是针对这个问题,通过引入和配置更适合阅读的中文字体,如“雅黑”,来提升Linux系统的中文界面的视觉体验。 描述中提到的“使用雅黑字体优化中文界面”,雅黑(Microsoft ...

    生产环境Linux系统优化方法.pdf

    生产环境Linux系统优化方法 本文档介绍了生产环境Linux系统优化方法,涵盖文件系统、内核参数和服务组件三个方面的优化方法。下面是其中的一些关键知识点: 1. 文件系统优化 * tmpfs文件系统是一种基于内存的文件...

    Linux系统优化与安全

    本主题“Linux系统优化与安全”涵盖了如何最大化利用Linux系统的性能,以及确保系统安全的关键策略。 一、Linux系统优化 1. **内核优化**:Linux内核是系统的核心,优化内核配置可以提升系统效率。例如,根据实际...

    嵌入式Linux系统优化详解

    嵌入式Linux系统优化是提高嵌入式设备性能和可靠性的关键技术。本文涉及的优化策略主要包括增强系统稳定性、加速系统和程序、减小系统和程序大小、降低系统功耗、提高系统实时响应能力等方面。此外,还强调了成本和...

    Linux系统优化脚本.sh

    Linux系统优化脚本,用做服务器安装上线前进行Linux系统功能优化。采用Shell脚本编写,可自己进行修改和编辑。

    linux系统优化重点简单总结

    Linux 系统优化重点简单总结 Linux 系统优化是指通过一系列操作来提高 Linux 系统的性能、安全性和稳定性。本文将从多个方面介绍 Linux 系统优化的重要步骤。 1. 关闭 SELinux SELinux 是 Linux 系统中的一个安全...

    通用的优化Linux系统的六大妙招

    在Linux系统优化中,遵循“少就是多”的原则至关重要,即只运行必要的服务,使用最适合的工具,并尽可能利用命令行效率。以下六个优化策略可以帮助你提升Linux系统的性能: 1. **编译选项优化** 编译程序时,选择...

    Linux系统优化概要.docx

    Linux系统优化是一个复杂而精细的过程,涉及到系统的各个方面,包括网络性能、系统配置、软件编译等。优化的主要目的是提升系统的效率、稳定性和响应速度,确保应用程序和服务能够高效地运行。 在Linux系统中,网络...

    Linux系统优化

    Linux系统优化

    linux-操作系统优化方案.doc

    针对Red Hat Enterprise Linux AS和SUSE LINUX Enterprise Server,有多种策略可以实现系统优化。本文主要探讨了八个关键方面,包括关闭不必要的守护进程(Daemons)、停用图形用户界面(GUI)、调整内核参数以及针对...

    linux系统安全和优化

    ### Linux系统优化 #### 1. 内核参数调整 内核参数直接影响着系统的性能表现。例如,通过编辑`/etc/sysctl.conf`文件来调整内存分配、进程调度等相关参数,可以在不牺牲稳定性的情况下提升性能。 #### 2. 服务与...

    redhat系列linux系统优化脚本

    #系统内核优化 net.ipv4.ip_forward = 1 vm.swappiness = 0 vm.overcommit_memory = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.tcp_syncookies = 1 # 增加操作系统记录数量 #调整系统最大tcp连接数 #SSH...

    Linux 系统优化的一些建议(内核优化)

    Linux系统优化是一个重要的任务,尤其是对于承载关键服务的服务器来说,优化能显著提高系统性能、稳定性和资源利用率。本文主要关注内核级别的优化,特别是针对内存管理和网络参数的调整。 首先,关闭交换分区...

    Linux的奇思妙想之系统优化技巧

    Linux系统优化技巧是提高系统效率和管理便捷性的关键所在。以下是一些实用的Linux系统优化方法: 1. **禁止终端模式下的显示器自动节能** 在Linux中,有时我们需要显示器保持常亮状态,以便查看实时信息,例如网络...

    Linux通用系统优化大全.zip

    重新编译内核是Linux系统优化的重要步骤,可以根据实际硬件配置和应用需求定制内核。通过移除不必要的模块和功能,可以使内核更加精简,提高系统启动速度和运行效率。同时,添加或调整内核参数也能优化特定场景下的...

    熟悉 Linux 系统的安全和优化.rar

    二、Linux系统优化 1. 系统调优:包括内核参数调优,如通过sysctl配置内核参数,优化内存、CPU、I/O等性能。 2. 进程管理:合理调度进程优先级,使用nice和renice命令调整CPU调度,避免资源浪费。 3. 文件系统优化...

    中标普华Linux系统讲座—系统优化PPT学习教案.pptx

    【Linux系统优化】这篇PPT教程主要关注于Linux系统的监控和优化,特别是针对中标普华Linux系统。系统优化是确保服务器高效稳定运行的关键步骤,它涉及到CPU、内存、磁盘I/O、网络等多个层面。 1. **uptime命令**:...

    linux-Linux性能优化实战案例

    在《Linux性能优化实战》案例中,我们深入探讨了如何利用Linux系统工具和技术来提升系统的运行效率和性能。Linux作为一款开源操作系统,其强大的可定制性和丰富的工具集使其成为性能优化的理想平台。以下是一些核心...

Global site tag (gtag.js) - Google Analytics