Loading...

Tag Archive for 'apc'

    AD: 猛买 | 快递查询 | Jobsdigg | 很棒的男装店

APC引起500错误

昨天说了在Windows上面安装APC,我用Apache的ab.exe测试了一下之前和之后服务器生成页面的速度,提升确实很明显。但是很快遇到了问题:服务器经常出现500错误,网站怎么也打不开。 在日志里的错误信息是这样的: [client 208.36.144.6] (OS 121)信号灯超时时间已到  : FastCGI: failed to connect to server “D:/AppServ/php5/php-cgi.exe”: CreateFile()/WaitNamedPipe() timed out [Tue May 13 09:53:10 2008] [error] [client 208.36.144.6] FastCGI: incomplete headers (0 bytes) received from server “D:/AppServ/php5/php-cgi.exe” 搜了一下,没搜到解决办法。又是一个不眠之夜,今天早上只好把APC关掉,访问就正常了。想了一下,failed to connect to server的错误,可能是fastcgi进程因为APC需要不停地查询缓存、更新缓存、整理碎片而被拖慢了。这该如何解决呢?

Windows上安装APC

心血来潮去翻Fenng以前整理出来的大型网站们批露的架构方面的信息,看到的都是很典型的,基于ROR的财帮子(不晓得现在JavaEye流量大还是财帮子大),基于.net的“PlentyOfFish”,深藏不露的豆瓣以及非常平民化的facebook(用的是PHP+MySQL)。有点纳闷,这些网站怎么没一个用java的,虽然说是“Architecture Scale”,但看起来java确实不受待见阿。 翻到Facebook的时候注意到它用了Memcached和APC。Memcached我已经用在服务器上了,APC以前在Dreamhost时使用过,不过效果一般。这里谈到Facebook用APC使得“一个页面显示的时间从4000多毫秒降到了100多毫秒”,肯定不是所有用了APC的地方都能有这么大的提升,但是使用APC确实能为PHP加速。 由于PHP是个解释型语言,执行的时候先得把程序读进来,(进行基本的差错,)然后“解释”成机器可以跑的程序。解释就会生成Opcode,如果可以把这个Opcode缓存起来,下次就能避免重新解释了。想想一下很多大型的系统,一个页面会包含很多文件,所以把这些文件的opcode存储起来,效果有点像“片段缓存”。我所知道的可以做PHP中opcode缓存的除了APC还有XCache,今天就安装了APC在自己的服务器上。 借用下面这张图,应该能弄清楚APC的作用了。 网上有很多在linux服务器上安装APC的指导,其实作为PHP的扩展,在windows的安装大同小异。先去perl4win.php.net,搜索APC,就能找到可以下载的DLL文件。这时需要选择一个和服务器PHP版本相匹配的。我服务器上的PHP是5.2.3,就下载了最后一个DLL。 下载回来后放到PHP插件文件夹,一般是php目录下的”ext”文件夹。之后编辑php.ini,在末尾加入: [apc] extension=”php_apc.dll” apc.enabled=1 apc.shm_segments=1 apc.shm_size=48 apc.ttl=7200 apc.user_ttl=7200 apc.num_files_hint=1024 apc.mmap_file_mask=d:/tmp/apc.XXXXXX apc.enable_cli=1 其中apc.shm_size就是给APC开的缓存大小,单位是M。我之前开了16M,有点小,就改成了48M。保存php.ini之后重启apache,如果你有一个显示phpinfo()的网页,刷新就能看到安装完成的apc了。 如果想得到apc运行的更多信息,可以去下载一个APC源代码包,里面有一个apc.php,放在web目录下就可以看到APC运行的详细情况。见下面的图: