• 优化你的服务器Apache、MySQL、PHP


    硬件上的考虑
    其实起50%的作用,当然是越快越好。如果不知道哪个快,就换成越贵越好。可实际上不可能做到这些,因为银子有限,所以按照这个顺序考虑:内存越大
    越好-
    >硬盘SCSI好于SATA->CPU越快越好。下面是一个比较极端的高级配置(指运行MySQL数据库级别的网站,想克隆ebay的去扎风
    投然后买曙光好了):
    Dual Xeon 3.x + 4G RAM + SCSI 集群做MySQL服务器
    Dual Xeon 3.x + 4G RAM + SCSI 做HTTP。
    下面是一个更为靠普的推荐配置:
    Dual Xeon 3.x + 4G RAM + SCSI 做MySQL+HTTP的单机服务器
    而下面这个也是更为广泛的配置:
    Dual Xeon 3.x + 2G RAM + SATA 做MySQL+HTTP的单机服务器
    对于这种情况需要用心优化了。
    记住,当有更多预算时,首先考虑的是内存,其次是高速硬盘和RAID,最后才是CPU。
    软件的版本
    软件指操作系统、Apache、MySQL和PHP的版本。对于操作系统,我一直习惯使用RedHat系列,现在用的是32位的Red Hat
    Enterprise Linux企业版,可能是因为家里的开发PC装的是免费的Fedora
    Core。而目前流行的被认为最适合做Web服务器的是CentOS,不过我没有用过。
    相对于OS的版本,内核的版本更为重要,建议随时升级到最新版本的内核。关于内核比较重要的事情是跟超线程CPU的兼容。早期的超线程功能往往会被
    禁掉,因为软件不支持,而现在的内核是支持超线程技术的,所以确保内核的更新是很有必要的。(参考文档:Hyper-Threading speeds
    Linux)
    对于Apache、MySQL和PHP,都属于双线版本。即同时维护两个版本的产品线,我建议使用最新版本的Apache
    2.0,因为Apache 2.0在HTTP的性能上做了很大的改进(Apache网站语),而MySQL根据自己的爱好,我使用MySQL
    4.1系。注意如果你使用MySQL 3.x版,强烈建议你现在就升级到MySQL 4.1,你可以即刻看到网站速度提高。
    对于PHP,我依然使用4.4系,因为现有的应用都是在4下面开发的,同时听说很多升级到PHP5后的惨痛故事,我就不冒险了。说到PHP,不得不
    抱怨几句,因为PHP的发行版经常有一些匪夷所思的BUG,比如有一次我发现某个在开发PC上用的好好的函数在服务器上突然用不了(服务器自动抢鲜升级了
    PHP),最后折腾1天得知PHP发布新版本的小子忘了把那个函数打包进去了(非常常用的函数apache_note)。
    Apache参数的优化
    按照前面提到的版本问题,Apache可以直接使用2.0版本产品线。针对Apache的优化主要是针对httpd.conf的优化,当然还有其他
    地方,如果特别留意的话,网上常有专家惊呼“居然这么多人忽略xxxx处的优化”等等,实际情况也确实如此,因为优化的地方实在太多了,
    httpd.conf只能做一个出发点。即便如此如果仅仅使用httpd.conf出厂默认值的话还是令人痛心不已。
    httpd.conf的优化点有以下几处:
    1. KeepAlive
    我安装的Apache2.0出厂值居然是Off。除非你的网站只有文字没有图片,否则改成On。然后所有的麻烦就来了。
    以前看到过一个Web2.0和Web1.0的服务比较图,有印象的就是AdSense是1.0,垃圾Chitika成了2.0,同样Akamai是
    1.0,
    BitTorrent成了2.0,真晕。其实Akamai的图片存储服务主要解决服务器的KeepAlive问题。看下面这个sample.html:
    Hello worldimg src="http://blog.penner.cn/hello.gif" />
    当浏览器将请求发送给Apache后,Apache会为该用户建立连接,返回/sample.html的内容,浏览器解析HTML文件,发现还需要
    显示
    /hello.gif,就再次向Apache发出请求。这时如果KeepAlive为Off,Apache就需要重新建立连接。试想如果页面请求了
    1000个图片,Apache就需要建立1000个连接(但建立第N个时候N-x个连接已经被Apache聪明的关闭了)。如果KeepAlive为
    On,Apache会在同一个连接中处理所有这些请求,大大的节省了连接资源,可惜这个世界上有很多攻击者,他们会利用这个连接不断的特性不停的请求文
    件,耗尽服务器的资源。所以一些大公司像Yahoo、AOL都选用Akamai作为图片存储服务,结果这些公司的sample.html版本就成了这个样
    子:
    Hello worldimg src="/hello.gif" />
    (真实地图片地址会比这个复杂)这样一来每次用户访问仅会向本机服务器的Apache请求一次,剩下的请求发送到akamai了。不必为akamai的能力担心,因为它有充足的抗负载技术,Web2.0的大喇叭们想用BT取代akamai,我靠。
    2. MaxKeepAliveRequests
    明白了1中的内容,这个看名字就知道一个连接可以最多发送多少次请求。默认是500。
    3. KeepAliveTimeout
    同样,两次请求间超过这个数字就中断这个连接。如果你的KeepAlive是On,MaxKeepAliveRequests是500,
    KeepAliveTimeout是100,你可以算算攻击者们用多久可以耗干你的Apache。我把KeepAliveTimeout设为5,因为从我
    网站受众人群的上网速度和网站的图片大小、数量考虑,5秒种可以完成加载多数页面。
    4. StartServers
    StartServers
    的数字表示Apache启动后直接创建的httpd数量。比如你的服务器平时平均需要100个httpd,如果把StartServers设为10就会导
    致Apache启动之初不停的创建剩下的90个httpd。如果你的服务器平时最多就用20个httpd,把StartServers设为50就浪费了资
    源。这个参数没什么大不了,因为Apache会自己趋向于适合的httpd服务数。
    5. MinSpareServers、MaxSpareServers
    保留备用的httpd服务数最小值和最大值。即当不需要这么多httpd服务时,依然最少保留MinSpareServers个服务,但不超过MaxSpareServers个服务。需要根据Apache的运行寻找经验值。
    6. ServerLimit,MaxClients
    比较重要的一个值。ServerLimit通常应该等于MaxClients。MaxClients决定了最大的httpd进程数,如果攻击者占用

    MaxClients的httpd服务数,你的网站就拒绝正常访问者访问了。但MaxClients的大小受内存的限制,因此Apache2的默认值是
    250,并加上了ServerLimit参数作限制,如果想设大MaxClients,必须同时扩大ServerLimit,但ServerLimit不
    应超过MaxClients。
    7. MaxRequestsPerChild
    决定了每个httpd服务可以处理的最大请求数,超过这个数字就需要新的httpd服务,后者又由MaxClients限制,环环相套。我的MaxRequestsPerChild是10000。
    8. HostnameLookups
    设为Off,避免DNS查询的等待。
    除了这8个参数外,Apache的另一个可塑点是加载的Module,把不需要的LoadModule注释掉即可,大大的节省了内存。但是问题是你
    不知道那个Module不需要,即便对照着Apache的Module文档朗读各个Module作用,也只能注释掉很少几个。下面是我比较踏实的注释掉的
    几个Module:
    mime_magic_module、info_module、userdir_module、proxy_module、proxy_ftp_module、proxy_http_module、proxy_connect_module。
    PHP加速器
    PHP 没什么值得优化的地方(这种东西真省心)。只是建议把php.ini中的数据库永久连接关闭以避免难堪的”Too many
    connections”错误。关闭php的mysql永久链接,即使php客户端mysql_pconnect这样的语句失效,但是不比担心现有的代码
    发生错误,因为PHP会自动将mysql_pconnect当作mysql_connect处理,并且在页面执行完毕自动关闭数据库链接。缺点是每次访问
    一个页面都会建立一次数据库链接,但不同于Apache的链接,因为Apache是每页都有N个链接机会,而数据库通常每页只需连接一次。
    相对于对PHP本身的优化,安装一个PHP加速工具更有意义。以前是PHP
    Eaccelerator,而现在流行的是eAccelerator(此中有很多恩恩怨怨)。eAccelerator在程序层缓存php文件,而不是缓
    存php的执行、输出结果,因此不必担心时效性。eAccelerator安装非常简便,只需要按步实施即可。
    eAccelerator是继前面提到的升级硬件、内存和升级MySQL到4.x外另一个可以显著导致网站速度提升的武器。
                    
                   

  • 相关阅读:
    《文献管理与信息分析》速看提问
    《构建之法(第三版)》速读提问
    《深入理解计算机系统》速读提问
    2017-2018-1 20179205《Linux内核原理与设计》第八周作业
    《从问题到程序》第一、二章学习
    2017-2018-1 20179205 第三周测试 汇编混合编程
    2017-2018-1 20179205《Linux内核原理与设计》第七周作业
    第三周main参数传递-1 课堂测试
    2017-2018-1 20179205《Linux内核原理与设计》第六周作业
    2017-2018-1 20179203 《Linux内核原理与分析》第八周作业
  • 原文地址:https://www.cnblogs.com/jthb/p/3171887.html
Copyright © 2020-2023  润新知