PHP性能的主要影响因素
2009-06-08 11:19
232 查看
影响PHP性能的因素比较多,如下:
(a) 网络带宽
如果你有10M的带宽——最多你只能获得1M/秒的传输速度。如果假设每个PHP页的客户端输出为30k,那么每秒仅仅只传输33页就将使你的网络带宽达到饱和。更多导致瓶颈产生的因素包括频繁访问低速DNS,或者网络设备仅能获得十分有限的存储。
(b) CPU
一个纯静态HTML页面并不会增加CPU负担。对于由
PHP生成的复杂动态页面,你的CPU速度自然将成为限制因素之一。拥有包含多个CPU的服务器或者一个服务器阵列将减轻因CPU带来的影响。
(c) 文件系统
访问硬盘的速度至少比直接读取内存要慢50到100倍。使用高速缓存将使情况有所好转。然而低内存空间将适用于文件缓冲的内存(通常称为虚拟内存)空间减少,进而导致整体性能下降。虚拟内存容易产生大量文件碎片,导致访问硬盘速度下降。在Unix系统上使用大量链接标记同样也会石访问硬盘的速度下降。缺省Linux安装模式下的默认硬盘访问设置也是很不被看好的,因为它是为了兼容性而不是速度。必要时请使用hdparm命令来更改Linux硬盘配置。
(d) 进程管理
在Windows系统创建一个新的进程是很缓慢的操作。这意味着系统上作涉及到进程创建的CGI应用会慢许多。这种时候在多进程模式下运行PHP将会有所改善。
应避免你的服务器产生过多的无效进程。举个例子,如果你的服务器是纯Web服务,需关闭(设置是不安装)X-Windows窗口系统。有些程序你可以考虑删除包括一些不常用的网络协议、邮件服务、病毒扫描、(鼠标,红外线端口)驱动程序等。
(e) 连接到其他服务器
如果你的服务器需要其他服务器提供的服务,此时有可能是其他服务器产生了瓶颈。最常见的就是一个很慢的执行诸多复杂查询的数据库服务器服务于很多其他服务器。
(f)数据库
MySQL是一个非常高效快速的数据库,要让他发挥到最大的性能,同时也不要过量的去掘取他的优势所在:
1
适当的分表:超过10G的表,在打开和关闭以前更新的时候效率明显下降很多,尽可能的优化SQL都可以做到事半功倍的。
2
减少的sleep进程。MySQL出现大量Sleep进程是因为采用的PHP的MySQL长链接数据库方式,即使用了mysql_pconnect来打开链接数据库,解决办法就是使用“短”链接,即mysql_connect函数。在使用mysql_connect短链接方式打开数据库,每个页面在打开数据库后,执行SQL完成,当页面脚本结束的时候,这个MySQL连接会自动关闭并且释放内存。另外,还要注意以下几点:
A:处理HTTP请求响应变得太慢.
硬盘上存在大量的静态文件,或者WEB服务器负荷太重,在处理HTTP请求响应变得太慢.这样也有可能导致出现大量Sleep进程,解决方法适当调整WEB服务参数和文件,一味的静态或者缓存化网页内容并不是灵丹妙药。
B:PHP应用的算法太耗时
在网页脚本中,有些计算和应用可能非常耗时,比如在0秒的时候打开数据库执行完一段SQL代码后,网页脚本随即花了20秒钟进行一段复杂的运算,或者是require了一个庞大的PHP文件(比如含有几千个违规关键字的过滤函数),哪么这个时候在MySQL后台看到的进程中,这个20秒的过程
MySQL并没有做任何事情了,一直处于Sleep状态,直到这个页面执行完毕或者达到wait_timeout值(被强行关闭),优化网页脚本,尽量让程序快速运行,或者在执行这段耗时的运行过程中,执行mysql_close把当前MySQL链接强行关闭。
(a) 网络带宽
如果你有10M的带宽——最多你只能获得1M/秒的传输速度。如果假设每个PHP页的客户端输出为30k,那么每秒仅仅只传输33页就将使你的网络带宽达到饱和。更多导致瓶颈产生的因素包括频繁访问低速DNS,或者网络设备仅能获得十分有限的存储。
(b) CPU
一个纯静态HTML页面并不会增加CPU负担。对于由
PHP生成的复杂动态页面,你的CPU速度自然将成为限制因素之一。拥有包含多个CPU的服务器或者一个服务器阵列将减轻因CPU带来的影响。
(c) 文件系统
访问硬盘的速度至少比直接读取内存要慢50到100倍。使用高速缓存将使情况有所好转。然而低内存空间将适用于文件缓冲的内存(通常称为虚拟内存)空间减少,进而导致整体性能下降。虚拟内存容易产生大量文件碎片,导致访问硬盘速度下降。在Unix系统上使用大量链接标记同样也会石访问硬盘的速度下降。缺省Linux安装模式下的默认硬盘访问设置也是很不被看好的,因为它是为了兼容性而不是速度。必要时请使用hdparm命令来更改Linux硬盘配置。
(d) 进程管理
在Windows系统创建一个新的进程是很缓慢的操作。这意味着系统上作涉及到进程创建的CGI应用会慢许多。这种时候在多进程模式下运行PHP将会有所改善。
应避免你的服务器产生过多的无效进程。举个例子,如果你的服务器是纯Web服务,需关闭(设置是不安装)X-Windows窗口系统。有些程序你可以考虑删除包括一些不常用的网络协议、邮件服务、病毒扫描、(鼠标,红外线端口)驱动程序等。
(e) 连接到其他服务器
如果你的服务器需要其他服务器提供的服务,此时有可能是其他服务器产生了瓶颈。最常见的就是一个很慢的执行诸多复杂查询的数据库服务器服务于很多其他服务器。
(f)数据库
MySQL是一个非常高效快速的数据库,要让他发挥到最大的性能,同时也不要过量的去掘取他的优势所在:
1
适当的分表:超过10G的表,在打开和关闭以前更新的时候效率明显下降很多,尽可能的优化SQL都可以做到事半功倍的。
2
减少的sleep进程。MySQL出现大量Sleep进程是因为采用的PHP的MySQL长链接数据库方式,即使用了mysql_pconnect来打开链接数据库,解决办法就是使用“短”链接,即mysql_connect函数。在使用mysql_connect短链接方式打开数据库,每个页面在打开数据库后,执行SQL完成,当页面脚本结束的时候,这个MySQL连接会自动关闭并且释放内存。另外,还要注意以下几点:
A:处理HTTP请求响应变得太慢.
硬盘上存在大量的静态文件,或者WEB服务器负荷太重,在处理HTTP请求响应变得太慢.这样也有可能导致出现大量Sleep进程,解决方法适当调整WEB服务参数和文件,一味的静态或者缓存化网页内容并不是灵丹妙药。
B:PHP应用的算法太耗时
在网页脚本中,有些计算和应用可能非常耗时,比如在0秒的时候打开数据库执行完一段SQL代码后,网页脚本随即花了20秒钟进行一段复杂的运算,或者是require了一个庞大的PHP文件(比如含有几千个违规关键字的过滤函数),哪么这个时候在MySQL后台看到的进程中,这个20秒的过程
MySQL并没有做任何事情了,一直处于Sleep状态,直到这个页面执行完毕或者达到wait_timeout值(被强行关闭),优化网页脚本,尽量让程序快速运行,或者在执行这段耗时的运行过程中,执行mysql_close把当前MySQL链接强行关闭。
相关文章推荐
- 《统计自然语言处理基础》笔记(4)词性标注 之 作用和影响性能的主要因素
- 影响java性能的主要因素及调优
- 影响PHP模块性能的关键因素
- 影响SQL Server数据库应用性能的几个常见因素
- 影响HBase insert性能的几个因素
- Unity中影响性能的几个因素
- 影像无线通信距离和传输性能的主要因素
- J2EE系统中影响性能的一些因素
- 影响SqlServer性能的因素分析与解决方法
- 影响SEO优化的主要因素
- ch6 影响 MySQLServer 性能的相关因素
- 影响ActiveMQ性能的几个重要因素
- 影响mysql性能的因素
- Java中影响方法调用性能的因素
- 客单价怎么算 影响客单价的主要因素有哪些?
- 影响软件性能的因素
- 性能瓶颈可能有很多影响因素
- 扛得住mysql 之 影响数据库性能的因素
- PHP回收机制性能方面考虑的因素
- Android之编程中存在性能影响的主要方面