硬件上的考虑
其实起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外另一个可以显著导致网站速度提升的武器。

优化你的服务器Apache、MySQL、PHP的更多相关文章

  1. 云服务器Apache+MySQL(远程连接)+PHP等环境安装2021.5.9号配置

    云服务器Apache+MySQL(远程连接)+PHP等环境安装2021.5.9号配置 Linux版本:centos8.2 (其他版本提供适配) 安装方式:yum 今天使用centos8系统搭建了下云主 ...

  2. centos linux服务器apache+mysql环境访问慢优化方法

    查找软件安装目录:find / -name 软件名称 一.优化apache配置增加MaxClients的值 默认情况下,2.0及以上apache版本MaxClients的值为256,对于中大型应用访问 ...

  3. CentOS 6.4中yum安装配置LAMP服务器(Apache+MySQL+PHP5)

    准备篇: 1.配置防火墙,开启80端口.3306端口 vim  /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp ...

  4. CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)

    准备篇: CentOS 6.6系统安装配置图解教程 http://www.osyunwei.com/archives/8398.html 1.配置防火墙,开启80端口.3306端口 vi /etc/s ...

  5. CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)

    这篇文章主要介绍了CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)的方法,需要的朋友可以参考下 文章写的不错,很详细:IDO转载自网络: 准备篇: 1.配置防火墙,开启 ...

  6. 阿里云服务器CentOS 5.7(64位)安装配置LAMP服务器(Apache+PHP5+MySQL)

    一.快速安装Apache+PHP5+MySql ----------------------------------------------------- 补充:由于163的yum源上只有php5.1 ...

  7. CentOS 6.3安装配置LAMP服务器(Apache+PHP5+MySQL)

    准备篇: 1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp -- ...

  8. 4G内存服务器的MySQL配置优化

    公司网站访问量越来越大(日均超10万PV),MySQL自然成为瓶颈,关于 MySQL 的优化,最基本的是 MySQL 系统参数的优化. MySQL对于web架构性能的影响最大,也是关键的核心部分.My ...

  9. 阿里云服务器建站——centos7部署apache+mysql+php

    自己也是忙活了半天,才完成了阿里云服务器的建站,这里就来分享一下. 首先如果是要自己搭建一个网站的话,除了服务器以外还要购买域名,并且要去备案,一般在哪买的域名都有备案的系统,备案的话一般要两到三个星 ...

随机推荐

  1. Python3中super()的参数传递

    1. super([type[, object-or-type]]) super() 在使用时至少传递一个参数,且这个参数必须是一个类. 通过super()获取到的是一个代理对象,通过这个对象去查找父 ...

  2. Linux下平滑升级nginx

    一.升级前准备 1.对nginx的配置文件nginx.conf做备份: 2.新建目录/root/nginx,将安装包和脚本上传到该目录下: 二.平滑升级nginx 1.开始编译新版本的nginx cd ...

  3. HTML与XML的区别

    什么是HTML HTML的全拼是Hypertext Markup Language, 中文也就是超文本链接标示语言.HTML(HyperTextMark-upLanguage)即超文本标记语言,是WW ...

  4. sql server中的数据类型转换函数

    1.cast(字段名 as varchar(40)) 2.convert(varchar(50),字段名)  日期转换: CONVERT(varchar(20), GETDATE(),120)

  5. 暑假训练Round1——G: Hkhv的水题之二(字符串的最小表示)

    Problem 1057: Hkhv的水题之二 Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format: ...

  6. HDU 3001 Travelling ——状压DP

    [题目分析] 赤裸裸的状压DP. 每个点可以经过两次,问经过所有点的最短路径. 然后写了一发四进制(真是好写) 然后就MLE了. 懒得写hash了. 改成三进制,顺利A掉,时间垫底. [代码] #in ...

  7. BZOJ3261 最大异或和 【可持久化trie树】

    题目 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p,满 ...

  8. Jerasure库接口简介及性能测试

    http://blog.chinaunix.net/uid-20196318-id-3277600.html Jerasure库提供Reed-Solomon和Cauchy Reed-Solomon两种 ...

  9. CI(CodeIgniter)框架中的增删改查操作

    我们创建一个模型( 项目目录/models/),请注意:模型名与文件名相同且必须继承数据核心类CI_Model,同时重载父类中的构造方法 CodeIgniter的数据函数类在 \models\User ...

  10. echarts 图表用例

    参考博客:http://blog.csdn.net/verne_feng/article/details/51731653 http://echarts.baidu.com/echarts2/doc/ ...