目前lamp (linux + apache + mysql + php) 近几年来发展迅速,已经成为web 服务器的事实标准。
lamp这个词的由来最早始于德国杂志“c't magazine”,michael kunze在1990年最先把这些项目组合在一起创造了lamp的缩写字。这些组件虽然并不是开开始就设计为一起使用的,但是,这些开源软件都可以很方便的随时获得并免费获得。这就导致了这些组件经常在一起使用。在过去的几年里,这些组件的兼容性不断完善,在一起的应用情形变得非常普便。为了改善不同组件之间的协作,已经创建了某些扩展功能。目前,几乎在所有的linux发布版中都默认包含了“lamp stack”的产品。这些产品组成了一个强大的web应用程序平台。“lamp stack”中的每一个组件都是一个foss(免费或者开源软件/free or open source software)的实例。
foss方法的好处有三个方面。
第一,foss软件的性质意味着应用程序可以免费下载,能够让更广泛的人们不用付费就可以使用这个应用软件。这种免费的方式对于广大用户特别具有吸引力。这些用户如果不使用免费的软件就需要付费购买“专业”的商用软件工具。这在制作网站方面通常是一种昂贵的步骤。
第二,foss许可证是开放式的,因此对于基于foss技术的应用软件的使用和限制都非常少。不需要为软件的发布支付任何许可证费就可以开发和应用基于lamp的工程。因此,这对业余爱好者和专业人员都非常有吸引力。foss技术(包括lamp)的增长和使用的主要原因是因为用户能够访问其资源,修复故障和改善应用软件的性能都非常容易。
与开源软件许可证结合在一起,这种方法为许多企业简化了开发过程,并且为企业提供了专有软件或者商业软件的限制中所没有的灵活性。
本文我们将介绍基于lamp组合的服务器的性能优化技巧:
lamp优化:清理服务器磁盘碎片
不论linux文件系统采用什么文件格式(ext3、jfs、xfs、reiserfs )、何种类型的硬盘(ide 、scsi),随着时间的推移文件系统都会趋向于碎片化。ext3、jfs等高级文件系统可以减少文件系统的碎片化,但是并没有消除。在繁忙的数据库服务器中,随着时间的过去,文件碎片化将降低硬盘性能,硬盘性能从硬盘读出或写入数据时才能注意到。时间长了会发现每个磁盘上确实积累了非常多的垃圾文件,释放磁盘空间可以帮助系统更好地工作。linux最好的整理磁盘碎片的方法是做一个完全的备份,重新格式化分区,然后从备份恢复文件。但是对于7×24小时工作关键任务服务器来说是比较困难的。
kleandisk是一个高效的磁盘清理工具,它能把磁盘上的文件分成不同的"组",比如把所有的"core"文件归成一组(group),这样要删除所有core文件时只要删除这个组就行了。core文件是当软件运行出错时产生的文件,它对于软件开发人员比较有用,对于其他用户(比如电子邮件服务器)却没有任何意义。因此,如果没有软件开发的需要,见到core文件就可以将其删除。
lamp优化:开启硬盘dma
现在使用的ide硬盘基本支持dma66/100/133(直接内存读取)但是linux发行版本安装后一般没有打开,可以/etc/rc.d/rc.local 最後面加上一行: /sbin/hdparm -d1 –x66 -c3 -m16 /dev/hda 这样以后每次开机,硬盘的 dma 就会开启,不必每次手动设定。添加前后你可以使用命令:hdparm -tt /dev/hda 来测试对比一下。
lamp优化:调整缓冲区刷新参数
linux内核中,包含了一些对于系统运行态的可设置参数。缓冲刷新的参数可以通过调整 /proc/sys/vm/bdflush文件来完成,这个文件的格式是这样的:
# cat /proc/sys/vm/bdflush 30 64 64 256 500 3000 60 0 0
每一栏是一个参数,其中最重要的是前面几个参数。第一个数字是在"dirty"缓冲区达到多少的时候强制唤醒bdflush进程刷新硬盘,第二个数字是每次让bdflush进程刷新多少个dirty块。所谓dirty块是必须写到磁盘中的缓存块。接下来的参数是每次允许bd flush将多少个内存块排入空闲的缓冲块列表。 以上值为rhel 4.0中的缺省值。可以使用两种方法修改:
(1)使用命令
# echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush
并将这条命令加到/etc/rc.d/rc.local文件中去。
(2)在/etc/sysctl.conf 文件中加入如下行:
vm.bdflush = 100 128 128 512 5000 3000 60 0 0
以上的设置加大了缓冲区大小,降低了bdflush被启动的频度,vfs的缓冲刷新机制是linux文件系统高效的原因之一。
lamp优化:优化输入输出
i/o程序对linux系统性能也是相当重要的,网络硬件i/o对服务器尤其重要。现在大多数linux服务器使用10/100 mb以太网。如果有较重的网络负载,则可以考虑千兆以太网卡。如果没有能力购买千兆网卡的话:可以使用多块网卡虚拟成为一块网卡,具有相同的ip地址。这项技术,在linux中,这种技术称为bonding。bonding在linux2.4以上内核中已经包含了,只需要在编译的时候把网络设备选项中的bonding driver support选中见图1。当然利用bonding技术配置双网卡绑定的前提条件是两块网卡芯片组型号相同,并且都具备独立的bios芯片。
图1 linux内核的bonding driver support选项
然后,重新编译核心,重新起动计算机,执行如下命令:
#ismod bonding #ifconfig eth0 down #ifconfig eth1 down #ifconfig bond0 ipaddress #ifenslave bond0 eth0 #ifenslave bond0 eth1
现在两块网卡已经象一块一样工作了。这样可以提高集群节点间的数据传输.bonding对于服务器来是个比较好的选择,在没有千兆网卡时,用两块100兆网卡作bonding,可大大提高服务器到交换机之间的带宽.但是需要在交换机上设置连接bonding网卡的两个子口映射为同一个虚拟接口。编辑/etc/modules.conf文件,加入如下内容,以使系统在启动时加载bonding模块。
alias bond0 bonding options bond0 mode=0
“mode”的值表示工作模式,共有0、1、2和3四种模式,这里设定为0。bonding工作在负载均衡(load balancing (round-robin))方式下,即两块网卡同时工作,这时理论上bonding能提供两倍的带宽。bonding运行在网卡的混杂(promisc)模式下,而且它将两块网卡的mac地址修改为一样的。混杂模式就是网卡不再只接收目的硬件地址是自身mac地址的数据帧,而是可以接收网络上所有的帧。
lamp优化:减少虚拟终端机的数量
linux安装后系统默认是6个虚拟终端机,也就是 ctrl+alt f1~f6 那六个,作为服务器使用可以关掉其中四个,只留下 ctrl+alt f1~f2,大约省下 4 mbytes 的内存,但是这样一来,x-window 会从原来的 ctrl+alt f7 变成 ctrl+alt f3 。 修改 /etc/inittab 中,将 mingetty 3 ~6 全部加上 # 字号 。
lamp优化:关闭一些不用的服务
linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的。守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。
linux系统有很多守护进程,大多数服务器都是用守护进程实现的。如web服务http等。同时,守护进程完成许多系统任务,比如,作业规划进程crond、打印进程lqd等。有些书籍和资料也把守护进程称作:“服务”。关闭服务方法请查看笔者的文章:深入理解linux守护进程。链结:http://www.ccw.com.cn/server/yyjq/htm2005/20050914_14nd5_1.htm 。
lamp优化:使用工具软件powertweak优化系统
powertweak for linux0.99能够监视你的系统和网络连接,并且可以将你的系统设置为最佳。
软件安装:
#wegt http://prdownloads.sourceforge.net/powertweak/powertweak-0.99.2-1.i386.rpm; #wegt http://prdownloads.sourceforge.net/powertweak/powertweak-gtk-0.99.2-1.i386.rpm #rpm –ivh powertweak-0.99.2-1.i386.rpm #rpm –ivh powertweak-gtk-0.99.2-1.i386.rpm
其中powertweak-0.99.2-1.i386.rpm是主程序, powertweak-gtk-0.99.2-1.i386.rpm是kde环境下的图形前端。程序安装后会自动添加到主选单的“系统工具中”,运行界面见图2。
图-2 powertweak性能优化程序
powertweak能够对x86构架处理器,芯片组,voodoo等进行最优化设置的软件,支持大多数的*处理器和芯片组,包括intel,amd,与cyrix,内置四种最佳化设定功能,可以自行设定要最优化的硬件(*处理器、cd-rom、pci总线、硬盘、磁盘阵列)、内核(包括日志、安全、资源)、网络(包括ip、tcp、core、 icmp、unix domain routing、 arp 、token ring)、虚拟文件系统、性能内存管理(页面分配、高速缓存、交换分区)。powertweak是一个强大的系统性能调节软件。但是对于使用者要求比较高,许多选项要求你对linux系统比较了解才能准确填写。
关于apache、php、mysql软件安装,我们建议安装它们的最新版本,并且从源码安装程序。虽然很多linux发行版本(redhat 、suse、turbolinux)有相应的rpm包, 但从源码编译安装程序,会适合自己的机器设置,我们一般会装到 /usr/local 目录下,这样易于管理。安装过程这里笔者就不介绍了。