最近新配置一台li服务器,正想研究其中的一些高级特性,作下记录.
在apache下用memcache作session handler已经有一段时间了,感觉还不错,最近移植到使用lighttpd的机器上来,问题就来了,还困扰了
我不短的时间,现记录一下:
1.用法
动态编译memcache的php扩展,在程序中用dl('memcache.so')引入
直接用ini_set('session.save_handler','memcache')来启用memcache handler
2.问题现象
第一次访问正常,刷新时连不上memcached,停止,再刷,又正常...如此反复,一次正常一次不正常
3.查找原因
1.怀疑memcached使用的内存不够,加大n倍后,问题依旧,因如果不用作session save_handle,而是在程序中用作缓存处理,一切正常,所
以确定memcached正常.
2.因在apache下正常,因为apache跟memcache不同机器,而lighttpd与memcache相同,怀疑本机访问有问题(我曾试过mysql有这个问题
,是dns的设置有问题),换用n种地址写法,未果.重编n次lighttpd,加入--enable-memcache,仍然不行.在google上翻了n个十页,未有找到想
要的.(只找到memcache官方文档中,有不推荐直接用memcache作session handler的说明)
3.开始怀疑动态编译的memcache.so有问题,尝试静态方式,但不成功(将pecl下载的memcache源码解到php/ext下,执行./buildconf,
但./configure --help|grep memcache时没有看到被加入)
4.实在没有办法了,采用在php.ini中加入extension=memcache.so的方式替代dl的方式,奇迹出现了,开始正常了,来一个ab -n 1000 -c 50,
效率还不错 ^&^
4.结论
lighttpd+fastcgi下,session.save_handler = memcache并使用dl('memcache.so')会有问题,原因未明(可能是lighttpd的BUG)

