php apache mysql的优化

一、对付会见量稍大的站点,Apache的这些默认设置是无法满意需求的,我们仍需调解Apache的一些参数,使Apache可以或许在大会见量情况下发挥出更好的机能。以下我们对Apache设置文件httpd.conf中对机能影响较大的参数举办一些说明。
(1) Timeout 该参数指定Apache在吸收请求或发送所请求内容之前的最耐久待时间(秒),若高出该时间Apache则放弃处理惩罚该请求,并释放毗连。该参数默认值为120,推荐配置为60,对付会见量较大的网站可以配置为30。
(2) KeepAlive 该参数节制Apache是否答允在一个毗连中有多个请求,默认打开。但对付大大都论坛范例站点来说,凡是配置为off以封锁该支持。
(3) MPM - prefork.c 在默认环境下Apache利用Prefork(历程)事情模式,可以说这部门的参数配置是对Apache机能影响的焦点和要害。
查察你的apache运行的模式:
# /usr/local/apache2/bin/httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
然后用户可以在设置文档中找到以下设置段:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 15
MaxRequestsPerChild 0
这就是节制Apache历程事情的设置段,为了更好的领略上述设置中的各项参数,下面让我们先相识一下Apache是如何节制历程事情的。我们知道,在Unix系统中,许多处事(Service)的守护历程(Daemon)在启动时会建设一个历程以筹备应答大概的毗连请求,处事即进入了端口监听状态,当一个来自客户端(Client)的请求被发送至处事所监听的端口时,该处事历程即会处理惩罚该请求,在处理惩罚进程中,该历程处于独有状态,也就是说假如此时有其他请求达到,这些请求只能“列队”期待当前请求处理惩罚完成且处事历程释放。这样就会导致越来越多的请求处于行列期待状态,实际表示就是该处事处理惩罚本领很是低下。Apache利用Prefork模式很好的办理了这一问题。下面我们来看看Apache实际上是如何高效率事情的。
当Apache启动时,Apache会启动StartSpareServers个空闲历程同时筹备吸收处理惩罚请求,当多个请求到来时,StarSpareServers举办会越来越少,当空闲历程淘汰到MinSpareServers个时,Apache为了可以或许继承有丰裕的历程处理惩罚请求,它会再启动StartsServers个历程备用,这样就大大淘汰了请求行列期待的大概,使得处事效率提高,这也是为什么叫做Pre-fork的原因;让我们继承跟踪Apache的事情,我们假设Apache已经启动了200个历程来处理惩罚请求,理论上来说,此时Apache一共有205个历程,而过了一段时间,假设有100个请求都获得了Apache的响应和处理惩罚,那么此时这100个历程就被释放成为空闲历程,那么此时Apache有105个空闲历程。而对付处事而言,启动太多的空闲历程时没有任何意义的,反而会低落处事器的整体机能,那么Apache真的会有105个空闲历程么?虽然不会!实际上Apache随时在查抄本身,当发明有高出MaxSpareServers个空闲历程时,则会自动遏制封锁一些历程,以担保空闲历程不外过多。说到这里,用户应该对Apache的事情方法有了必然的相识,假如想得到更多更具体的说明请参阅Apache手册文档。
我们尚有两个参数没有先容:MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一时间内最多答允有几多客户端可以或许与其毗连,假如高出MaxClients个毗连,客户端将会获得一个“处事器忙碌”的错误页面。我们看到默认环境下MaxClients配置为15,这对一些中型站点和大型站点显然是远远不足的!也许您需要同时答允512个客户端毗连才气满意应用需求,好吧,那么就让我们把MaxClients修改为512,生存httpd.conf并退出,重启Apache,很遗憾,在重启进程傍边您看到了一些错误提示,Apache重启失败。错误提示中汇报您MaxClients最大只能设定为256,相信您必然很失望。不外不要沮丧,Apache作为世界一流的WebServer必然不会如此薄弱的!在默认环境下,MaxClients简直只能设定为不高出256的整数,可是,假如您有需要完全可以随意定制,此时就需要利用ServerLimit参数来共同利用,简朴的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过改换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要留意,MaxClients的设定命值是不能大于ServerLimit的设定命值的!
下面让我们相识一下MaxRequestPerChild参数,该参数指定一个毗连历程中可以有几多个线程同时事情。也许这样表明过于专业,那么您只要想想“网络蚂蚁”、“网际快车FlashGet”中的“多点同时下载”即可,该参数实际上就是限制最多可以用几个“点”。默认配置为0,即为:不限制。但需要留意,假如将该值配置的过小会引起会见问题,假如没有非凡需要可能会见量压力并非很大可以保持默认值,假如会见量很大则推荐配置为2048。
好了,表明白这么多,让我们看看颠末修改后Perfork.c设置段的推荐设置:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1024
MaxClients 768
MaxRequestsPerChild 0
完成了上述对Apache的调解,Apache已经得到了较大的机能改进。记着,在修改任何参数后都需要重启Apache才气生效的。有关Apache的优化远远不止这些,有乐趣的用户可以阅读Apache手册文档可能寻找一些文献资料进修。
二、PHP优化对付PHP的优化主要是对php.ini中的相关主要参数举办公道调解和配置,以下我们就来看看php.ini中的一些对机能影响较大的参数应该如何配置。
# vi /etc/php.ini
(1) PHP函数禁用找到:
disable_functions =
该选项可以配置哪些PHP函数是克制利用的,PHP中有一些函数的风险性照旧相当大的,可以直接执行一些系统级剧本呼吁,假如答允这些函数执行,当PHP措施呈现裂痕时,损失长短常严重的!以下我们给出推荐的禁用函数配置:
disable_functions = phpinfo,passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status
需留意:假如您的处事器中含有一些系统状态检测的PHP措施,则不要禁用shell_exec,proc_open,proc_get_status等函数。
(2) PHP剧本执行时间找到:
max_execution_time = 30
该选项设定PHP措施的最大执行时间,假如一个PHP剧本被请求,且该PHP剧本在max_execution_time时间内没能执行完毕,则PHP不再继承执行,直接给客户端返回超时错误。没有非凡需要该选项可保持默认配置30秒,假如您的PHP剧本确实需要长执行时间则可以适当增大该时间配置。
(3) PHP剧本处理惩罚内存占用找到:
memory_limit = 8M
该选项指定PHP剧本处理惩罚所能占用的最大内存,默认为8MB,假如您的处事器内存为1GB以上,则该选项可以配置为12MB以得到更快的PHP剧本处理惩罚效率。
(4) PHP全局函数声明找到:
register_globals = Off
网络上许多关于PHP配置的文章都推荐将该选项配置为On,其实这是一种及其危险的配置要领,很大概引起严重的安详性问题。假如没有非凡的需要,强烈推荐保存默认配置!
(5) PHP上传文件巨细限制找到:
upload_max_filesize = 2M
该选项设定PHP所能答允最大上传文件巨细,默认为2MB。按照实际应用需求,可以适当增大该配置。
(6) Session存储介质找到:
session.save_path
假如你的PHP措施利用Session对话,则可以将Session存储位置配置为/dev/shm,/dev/shm是Linux系统独占的TMPFS文件系统,是以内存为主要存储方法的文件系统,比RAMDISK更优秀,因为可以利用DISKSWAP作为增补,并且是系统自带的成果模块,不需要另行设置。想想看,从磁盘IO操纵到内存操纵,速度会快几多?只是需要留意,存储在/dev/shm的数据,在处事器重启后会全部丢失。不外这对付Session来说是无足轻重的
(7)找到short_open_tag = Off
修改成short_open_tag = On,一些海内的php措施不尺度,封锁大概会堕落。
三、mysql优化及安详配置
Mysql的优化配置
打开/etc/my.cnf文件,修改以下配置,假如没有,可手动添加。调解配置时,请实事求是,这与你的处事器的设置有关,出格是内存巨细。以下配置较量适合于1G内存的处事器,但并不停对。
#指定索引缓冲区的巨细,它抉择索引处理惩罚的速度,尤其是索引读的速度。通过查抄状态值Key_read_requests和Key_reads,可以知道key_buffer_size配置是否公道。比例key_reads /key_read_requests应该尽大概的低,至少是1:100,1:1000更好(上述状态值可以利用show status like’key_reads’得到)。key_buffer_size只对MyISAM表起浸染。纵然你不利用MyISAM表,可是内部的姑且磁盘表是MyISAM表,也要利用该值。可以利用查抄状态值created_tmp_disk_tables得知详情。
key_buffer = 384M
#要求MySQL能有的毗连数量。当主要MySQL线程在一个很短时间内获得很是多的毗连请求,这就起浸染,然后主线程花些时间(尽量很短)查抄毗连而且启动一个新线程。back_log值指出在MySQL临时遏制答复新请求之前的短时间内几多个请求可以被存在仓库中。只有假如期望在一个短时间内有许多毗连,你需要增加它,换句话说,这值对到来的TCP/IP毗连的侦听行列的巨细。你的操纵系统在这个行列巨细上有它本身的限制。试图设定back_log高于你的操纵系统的限制将是无效的。默认数值是50
back_log = 200
#一个包的最大尺寸。动静缓冲区被初始化为net_buffer_length字节,可是可在需要时增加到max_allowed_packet个字节。缺省地,该值太小必能捕获大的(大概错误)包。假如你正在利用大的BLOB列,你必需增加该值。它应该象你想要利用的最大BLOB的那么大。
max_allowed_packet = 4M
#答允的同时客户的数量。增加该值增加 mysqld要求的文件描写符的数量。这个数字应该增加,不然,你将常常看到 Too many connections 错误。 默认数值是100
max_connections = 1024
#指定表高速缓存的巨细。每当MySQL会见一个表时,假如在表缓冲区中尚有空间,该表就被打开并放入个中,这样可以更快地会见表内容。通过查抄峰值时间的状态值Open_tables和Opened_tables,可以抉择是否需要增加table_cache的值。假如你发明open_tables便是table_cache,而且opened_tables在不绝增长,那么你就需要增加table_cache的值了(上述状态值可以利用showstatus like’Open_tables’得到)。留意,不能盲目地把table_cache配置成很大的值。假如配置得太高,大概会造成文件描写符不敷,从而造成机能不不变可能毗连失败。
table_cache = 512
#每个线程排序所需的缓冲
sort_buffer_size = 4M
#当一个查询不绝地扫描某一个表,MySQL会为它分派一段内存缓冲区。read_buffer_size变量节制这一缓冲区的巨细。假如你认为持续扫描举办得太慢,可以通过增加该变量值以及内存缓冲区巨细提高其机能。
read_buffer_size = 4M
#加快排序操纵后的读数据,提高读分类行的速度。假如正对远远大于可用内存的表执行GROUP BY或ORDER BY操纵,应增加read_rnd_buffer_size的值以加快排序操纵后头的行读取。仍然不大白这个选项的用处……
read_rnd_buffer_size = 8M
#用于REPAIR TABLE。不大白这个选项的用处,百度上找到的配置偏向也是八门五花,有128M、64M、32M等,折中选一个。
myisam_sort_buffer_size = 64M
#可以复用的生存在中的线程的数量。假如有,新的线程从缓存中取得,当断开毗连的时候假如有空间,客户的线置在缓存中。假如有许多新的线程,为了提高机能可以这个变量值。通过较量 Connections 和 Threads_created 状态的变量,可以看到这个变量的浸染。
thread_cache_size = 128
#查询功效缓存。第一次执行某条SELECT语句的时候,处事器记着该查询的文本内容和它返回的功效。处事器下一次遇到这个语句的时候,它不会再次执行该语句。作为取代,它直接从查询缓存中的获得功效并把功效返回给客户端。
query_cache_size = 32M
#最大并发线程数,cpu数量*2
thread_concurrency = 2
#配置超时时间,能制止长毗连
wait_timeout = 120
#封锁不需要的表范例,假如你需要,就不要加上这个
skip-innodb
skip-bdb
关于mysql的优化配置及查抄,这篇文章很值得一看 
Mysql的安详配置
打开/etc/my.cnf文件,修改以下配置,假如没有,可手动添加。
#打消文件系统的外部锁
skip-locking
#不举办域名反理会,留意由此带来的权限/授权问题
skip-name-resolve
#克制MySQL顶用“LOAD DATA LOCAL INFILE”呼吁。这个呼吁会操作MySQL把当地文件读到数据库中,然后用户就可以犯科获取敏感信息了。网络上传播的一些进攻要领中就有用它的,它也是许多新发明的SQL Injection进攻操作的手段!
local-infile = 0
#封锁长途毗连,即3306端口。这是MySQL的默认监听端口。由于此处MySQL只处事于当地剧本,所以不需要长途毗连。尽量MySQL内建的安详机制很严格,但监听一个TCP端口仍然是危险的行为,因为假如MySQL措施自己有问题,那么未授权的会见完全可以绕过MySQL的内建安详机制。(你必需确定,你是否真的不需要长途毗连mysql)
skip-networking
修改完my.cnf后,还需要对mysql的用户名、帐号、及默认数据库举办调解
首先先登录mysql,在终端窗口输入 /usr/local/mysql/bin/mysql -u root -p
然后会提示输入暗码,输入正确暗码后,会呈现mysql>提示符。
输入以下呼吁:
mysql>use mysql;
mysql>update user set user="centos" where user="root"; (将mysql的root用户名修改成centos,防备root的暗码被暴力破解)
mysql>select Host,User,Password,Select_priv,Grant_priv from user;
mysql>delete from user where user=’’; (删除user用户)
mysql>delete from user where password=’’; (删除user用户)
mysql>delete from user where host=’’; (删除user用户)
mysql>drop database test; (删除默认的test数据库)
mysql>flush privileges; (刷新mysql的缓存,让以上配置当即生效)
mysql>quit;
为了使以上优化和安详配置生效,请重启Mysql处事或Linux。
关于Mysql的安详配置,这篇文章很值得一看
?fid=21&id=459

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8419.html