在多个
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 调优