分类: LINUX
2009-10-28 11:48:44
三.操作系统的调优Linux
发行版本和Linux内核提供了大量的参数和设定来帮助系统管理员调优系统使之发挥最大的性能。这一章描述了调优Red Hat Enterprise Linux AS系统的步骤和理解使用Linux系统的一些技能,包括
·Linux的内存管理
·Linux的页面管理
·文件系统和它对性能的影响
·禁用非必须的守护进程
·使用sysctl调优参数
3.1 调优之前准备
在我们没有开始讨论调优工作之前,一些好的调优的手段对我们是很重要的,下面列出一些相关的提示。
·在调优任何Linux系统之前,计划一个适合的调优进程。
·不要在一个生产系统上进行调优测试。
·在调优进程中不要同时改变多个调优参数。
·反复测试可能改变系统性能的参数,有时可以用统计数据来验证结果。
·记录成功的参数并且和社区分享它们,无论你认为它们多么繁琐。
3.2 安装
在理想的情况下,对一个系统的调优应该开始在一个非常早的阶段,一个系统应该按照应用预想的工作量来设计。我们能理解大多数情况下系统管理员都是在一个已经安装的系统遇到性能瓶颈的情况下才开始性能调优工作的,但我们还是要介绍下在系统初始化安装的过程中可能的调优操作。
理想情况下,下面问题应该在Linux系统开始安装之前考虑
·需要什么版本的Red Hat Linux?
在收集商业和应用的需求之后,我们需要决定选择哪种Linux版本。企业版做为一种特殊的Linux发行版本通常有商业的合约。如果你选择Red Hat Enterprise Linux还需要考虑下面几点:
选择企业版本Linux还是自定义版本Linux?
在某些科学实验环境中,通常可以接收运行一个没有支持的Linux版本,例如Fedora。但是对一个企业级的应用来说,我们强烈推荐一个有支持的Linux版本,例如Red Hat Enterprise Linux。
企业级Linux版本?
Red Hat Enterprise Linux有两个不同的版本:Enterprise Server和Advanced Server。这两个版本的区别主要在扩展性方面,Enterprise Server限制在支持2个CPU和16GB内存,因此当使用一些类似web服务器和分布式架构时Enterprise Server是一个正确的选择。Red Hat Enterprise Linux 的Advanced Server版本支持32个CPU和64GB内存。
随着x86-64架构的到来(包括AMD64和EM64T),客户也面对着选择32bit或者64bit操作系统的问题。我们的基准测试结果显示Linux系统在x86-64CPU上运行64bit系统会有着更出色的性能表现,除了性能,我们还应该考虑到扩展性和未来应用的需要。使用64bit操作系统还提供了可以同时运行32bit应用(i386)和64bit(x86-64)应用的优势。考虑到上述方面,我们通常建议用户在x86-64架构上使用64bit操作系统,除非因为应用的原因导致不能部署在64bit系统上。
·如何进行分区的规划?
在Linux社区中,对磁盘子系统的分区经常引起很大的讨论。磁盘子系统分区的规划通常都是由应用的需要、系统管理的考虑和个人喜好决定的,基本没有性能的考虑。在这里我们唯一给出的建议就是如果可能尽量使用swap分区,swap分区相对于swap文件的性能会有提升,因为不需要文件系统方面的开销。Swap分区建立很简单并且可以添加附加的swap分区甚至swap文件。
·应该使用什么文件系统?
Red Hat Enterprise Linux在安装时提供文件系统的选择很有限,默认只有两种可用的文件系统:ext2和ext3。Red Hat Enterprise Linux安装程序默认选择的文件系统是ext3,这在大多数情况下都是可以接收的,但我们也鼓励你考虑使用ext2文件系统。对一些比较小的文件系统可能并不过分的关注数据一致性(例如:web群集服务器),或者系统对性能提出了严格的要求(例如:高性能计算环境),在上述情况下使用ext2文件系统可能会带来性能上的帮助,因为ext2不需要维护日志的系统开销,即使ext3文件系统在这方面进行了很大的改变,这仍然是一个显著的不同。同时也可以考虑到ext2文件系统可以很容易的升级到ext3文件系统。
·安装包的选择:最小安装或者完全安装?
在Red Hat Enterprise Linux安装过程中,系统管理员面对选择最小安装或者完全安装。有些人更愿意选择完全安装为了避免在以后安装rpm包时面对依存关系的问题。但需要考虑到下面的问题,与性能无关,很重要的一点是在选择完全安装或者几乎完全安装会对系统的安全产生负面的影响。在生产系统上安装一些开发工具会对系统的安全产生负面的影响。安装比较少的安装包,可以节省更多的磁盘空间,磁盘的空余空间越大性能越好。一些智能的软件包安装工具会自动的解决安装包的依存问题,例如Red Hat Packet Manager、rpm或者yum。所以我们建议仅仅安装与应用相关的必需安装的软件包。
·SELinux(仅针对Red Hat Enterprise Linux 4)
在Red Hat Enterprise Linux安装过程中,Anaconda安装程序默认选择安装SELinux,然而SELinux会对系统的性能产生负面的影响,所以要谨慎的决定你的系统是否需要SELinux所提供的附加的安全支持。在后面会对SELinux做进一步的介绍。
·运行级别的选择
安装阶段最后一个选择是系统默认的运行级别。我们强烈建议你为服务器系统选择默认运行级别为3,除非你有特殊的需要将默认的运行级别设为5(图形用户模式)。通常在数据中心的服务器不需要GUI图形用户界面进行操作,因为考虑到运行级别5的GUI带来的系统开销。
3.3 守护进程
Red Hat Enterprise Linux默认安装完成后,一些可能并不是必须的守护进程会启用。禁用非必要的进程会减少系统的内存开销,同时也可以减少系统的安全隐患,可以释放更多的内存空间、减少系统的启动时间、减少CPU处理的进程数量。
默认情况下,很多守护进程可以安全的在系统下停止和禁用。下表列出了Red Hat Enterprise Linux安装的一些守护进程,如果不是必须的你可以考虑禁用这些进程,注意下表列出的对Red Hat Enterprise Linux3和4的区别。
注:关闭xfs服务后,服务器上的X window将不能被启动。在使用startx命令启动X window之前应该首先启动xfs进程。
在Red Hat Enterprise Linux系统中,系统管理员可以使用/sbin/chkconfig命令很方便的修改各种守护进程的启动选项,下面命令列出了所有当前运行的守护进程
/sbin/chkconfig –list|grep on
如果你想某个守护进程在下次服务器启动时不再自动启动,使用root执行下面两个命令可以达到相同的效果,不同之处是第二个命令在所有运行级别都会禁用此进程,而使用–level参数可以指定选择的运行级别。
/sbin/chkconfig –level 2345 sendmail off
/sbin/chkconfig sendmail off
注:大家经常以为使用chkconfig做出改变之后必须在下一次重新启动才能生效,其实改变执行运行级别的操作可以实现同重新启动一样的效果。代替浪费时间的重新启动,简单的改变运行基本到1再改变回3或者5就可以改变配置。
还有另外一个有用的命令/sbin/service,通过这个命令系统管理员可以立刻更改已注册服务的状态。下面的例子是查看sendmail服务的状态,
/sbin/service sendmail status
立刻停止sendmail服务
/sbin/service sendmail stop
service命令在需要立刻改变服务状态的情况下是非常有效的,因为使用chkconfig命令必须在改变运行级别或者重新启动后才能生效,但是使用service命令关闭的守护进程在重新启动服务器后又会启动。
如下图所示系统还提供了基于GUI的修改守护进程的工具,图形界面中点击Main Menu → System Settings → Server Settings →Services或者执行下面命令
/usr/bin/redhat-config-services
3.4 改变运行级别
如果可能,尽量不要在Linux服务器上运行图形用户界面,通常大多数系统管理员都喜欢更有效的通过命令行方式完成系统的管理任务。如果你喜欢使用图形界面,一些有用的基于web的工具可以帮助你,例如webmin,Linuxconf和SWAT。
Tip:即使GUI在本地禁用了,你仍然可以使用ssh加-X参数远程连接到服务器上。
如果必须要使用GUI图形用户界面,在需要使用时启动GUI然后关闭比一直启动GUI更合适一些。在大多数情况下运行级别都设为3,即在机器启动的时候不运行X window。如果需要启动X window,在命令提示符下使用startx命令。
查看当前运行级别可以使用runlevel命令,命令结果显示前一个运行级别和当前运行级别。
在运行级别之间进行切换,使用init命令。例如,切换到运行级别3,使用init 3命令。
Linux常用的运行级别:
0 关机,不要将默认运行级别设为0,否则机器启动进程完成后马上就会关机。
1 单用户模式
2 多用户,没有NFS,和运行级别3的区别是没有网络连接支持
3 完全多用户模式
4 未用
5 X11图形用户界面模式
6 重新启动,不要将默认运行级别设为6,否则机器将不停的重新启动。
编辑/etc/inittab文件中下面内容可以改变系统默认的运行级别,
id:3:initdefault:
3.5 限制本地终端
默认的情况下,系统打开了六个本地虚拟终端:通过F1到F6可以访问不同的终端。虚拟终端所占用的内存数量可以忽略不计,然而我们试图得到系统最大的性能,另外减少运行进程的数量可以简化解决问题和进程分析的过程,所以这里建议将本地终端的数量限制为两个。可以通过在/etc/inittab中将mingetty相关行注释掉来实现限制本地终端,下图是将本地终端限制为2个的示例。
3.6 SELinux
Red Hat Enterprise Linux 4引入了一个新的安全模型Security Enhanced Linux(SELinux),在面对高级别的安全需求的时候它是一个有效的手段。SELinux提供了新的强制认证的安全策略,替代了传统Linux所使用的有局限性的标准访问安全策略。SELinux强制进行用户和进程级别的安全认证,因此任何一个进程的安全漏洞都只会影响此进程所占有的资源,而不会影响整个系统。SELinux的工作与虚拟机有些相似,例如如果一个恶意攻击者用root权限嵌入了Apache应用,也仅仅只有Apache进程的资源会被影响。
然而加强安全策略也会对系统的性能产生影响,用户或者进程对系统资源的每次访问都必须被SELinux控制,对访问权限的检查可能会造成大约10%的系统开销。SELinux对一些对安全方面有很高要求的服务器比如防火墙和web服务器会有很高的价值,但是对一些对性能要求比较高的服务器就不会选择启用SELinux,例如数据库服务器。
通常最容易的方法就是在安装系统的时候选择不安装SELinux。但经常是系统已经按照默认的参数安装好了,忽略了SELinux对系统性能的影响。在系统安装完成后,可以通过在GRUB boot loader中的运行内核行中加入selinux=0参数来禁用SELinux.。下图是示例,
如果你决定在Linux服务器上使用SELinux,可以通过调整参数来使它更适合应用环境。在一个运行的系统上,检查是否Linux Security Modules(LSM)缓存允许超过默认的Access Vector Cache(AVC)。检查/selinux/avc/hash_stats中最长chain的长度,任何超过10个signals的都可能是存在的瓶颈。
如果系统面临一个Access Vector Cache的瓶颈(例如,一个很大量的防火墙负载),尝试修改/selinux/avc/cache_threshold的值,稍微来加大这个值来重新检查hash状态。
3.7 编译内核
创建和编译自定义的内核对系统性能的影响通常比我们想象的小的多,现代的Linux发行版本的内核通常都是模块化的,加载的内核可能只使用其中的一部分。重新编译内核可以减少内核的大小和内核的系统开销,修改源码中的某些参数也可能对系统的性能产生影响。然而使用自己编译的非标准内核是不在Red Hat Enterprise Linux支持范围内的,很多ISV的应用和IBM硬件对Red Hat Enterprise Linux的支持对非标准内核也是无效的。这里我们要说的是,通过自定义内核可以获得一些性能上的提升,但是你同时需要面对在非支持内核下运行企业级应用说带来的风险。当然这些都是针对一些商业应用来说的,如果你感兴趣的是一个科学实验性质的应用比如高性能运算,那么选择自定义内核也是选择之一。
另外不要试图使用一些特殊的编译器来进行编译内核,比如-C09。因为Linux内核的源码已经手工调整为适于GNU C编译器。用特殊的编译器可能会降低内核运行的效率并且导致一些错误的代码。注意除非你真的清楚你在做什么,否则对内核参数的不当修改反而可能导致系统性能的下降。