background image

在多个

apache 前端架 http 层的 proxy,如 haproxy,nginx。在这些地方记录

日志。接入层负载一般不高,所以

proxy 可以做一些记录日志的工作。在这种

配置下,可以关闭

apache 的日志。

 
四、

realpath()问题

大家可以看一下

www.ks-global.com 这篇文章:

http://bugs.php.net/bug.php?id=43864

lstat64 调用多了之后,主机 CPU 和 IO 都会比较高。
究其原

www.fuweitek.com 因,因为 php5.2.x 对 realpath()的实现不够好,导

致会针对目录层次,逐级调用

lstat64()。

为了解决这个问题,它使用了

realpath_cache,针对某个文件,存储其

realpath。这里只存储了叶子节点的 realpath,而对 路径上的内容没有存储,所以
在做

"/a/b/c/d/e/f/g/a.php"realpath 检查的时候逐级调用 lstat64,而在做"/a/b/c 

/d/e/f/g/b.php"检查的时候,还要对""/a/b/c/d/e/f/g/"做逐级检查。所以有些优化建
议就是

“减少目录层次,甚至放到"/"根目录下”。当然我不推荐这么干。从

5.3.0 开始,php 对 realpath()做了高效的实现,路 realpath 的中间路径也做了
缓存,以上面的情

www.ks-yongan.com 况为例,检查"/a/b/c/d/e/f/g/b.php"的时候

就只会做

“b.php”的检查了。所以,升级到 php5.3.0 以上版本能够很好地解决这个

问题。

解决方法:
1. 尽量少用 include_once 和 require_once
因为这两

www.jinyilai.cn 个函数会做 realpath 检查,防止有符号链接的情况

导致重复加载。不用它们就能减少

realpath 的调用。

2. 合理设定 php.ini 中的 realpath_cache_size 和 realpath_cache_ttl 参数
既然使用了

realpath_cache,那肯定有大小限制。对于使用了很多文件,比

如用了

Zend Framework 的项目,可能默认 realpath_cache_size=16k 就太小了,

需要增大这个设置,推荐设置为

256K 以上。另外默认

realpath_cache_ttl=120,2 分钟就过时了,怎么也要设定为 3600(1 小时)。

这里需要注意的是,这个

realpath_cache 是每隔 apache 进程独占的,所以很

吃内存的,不能设置的太大。

3. 升级到 php5.3.x
没什么好说的,如果应用经过详细测试没有问题,那么推荐升级到高版本。
 
五、

APC 的使用

apc 能够缓存 php 的 opcode 码,能普遍提升 30%的性能。但是默认

apc.stat=1,这样每次请求都会访问需要使用的 php 文件,看看这个文件是否更
新了,已决定是否重新编译

php 文件。这个是很耗性能的,推荐关掉。

解决方法:
1. 设定 apc.stat=0,不必每次请求都访问需要用到的 php 文件。
需要注意的是:每次发版本改动了

php 文件的时候,必须调用 apc_clear()

清除

apc 缓存,否则你的代码永远也不会生效。

六、

smarty 调优