background image

PHP 教程:PHP 配置 memory_limit 参数

PHP5 中,对于 memory_limit 的设定已经从以往的 8M 扩大到 128M 的上限。
对于配置中的定义解释是:
memory_limit   =   128M             ;   Maximum   amount   of   memory   a   script   may 
consume (128MB)
最大单线程的独立内存使用量。也就是一个 web 请求,给予线程最大的内存使用量的定
义。
现有的大部分网站或者论坛应用中,应用软件的配备一般都是以如下的形式搭建:
    
Nginx(Apache  

) PHP Memcache Mysql

对于以上的应用软件的采用,优点我就不再多说。但对于 Memcache 的使用就是为了减
少 对 于 数 据 库 的 访 问 的 频 率 的 降 低 , 也 是 提 高 服 务 响 应 的 一 种 办 法 。 但 是 对 于
memcache 和数据库的数据存储有区别的是,memcache 的数据并不是以上数据的形
式存储在内存中,而是抽象化了之后以字符的形式,hash 表的形式存储在内存之中。这
样的存储区别导致,每次 memcache 的数据抽取必须全部数据反序拟化一次,将所有
的数据导入进独立的单一线程中,然后第二部才是进行过滤和抽取你所需要的数据。
在应用过程中,如果是读取数据库的数据,大家应该知道,优化的办法应该是在 SQL 语
句中比保证第一次过滤尽量是提高准确性,只取需要的字段,不要全部所有字段取出之
后再在应用中过滤得到自己想要的字段,这样对于服务器的负载会有本质的区别。
如果采用 memcache,必然做不到数据库在在第一次就精确过滤这点目标。那么就需要
在开始设计表的同时就需要考虑到这点,尽量保证被 memcache 数据表尽量保证数据
的较少,可以多分表来完成。
memory_limit 的内存分配,标配是 128M。
一旦独立的线程超过了 128M,那 PHP 会报错:
Fatal error: Allowed memory size of 33554432 bytes
对于 8G 内存的服务器,如果同时并发的响应达到 50,每个都是 128M 的峰值,那估计也
是服务器会卡死的时候。
尽量降低 128M 的内存配置,如果调整至 64M,服务器的负载基本能下降一半左右,如
果能调整至 32M 效果更好。
但是对于应用的要求就更高,很多表建立初期就没有考虑到这个问题,如果你要采用
memcache 作为数据的存储,必须提前完成优化数据表的设计部署,降低独立线程
PHP 的内存使用量,服务器的响应和负载降低的就不仅仅是几个百分点的效果了。