cakePHP + php5-fpm + memcached =很多开放的TCP连接到memcached?

时间:2011-05-13 19:32:30

标签: cakephp tcp nginx memcached php

我很确定这是一个CakePHP错误,但是想到这里有人可能已经碰到了这个并知道如何修复。仅供参考 - 我创建了ticket

我通过php5-fpm在nginx下运行PHP作为fastcgi。当我使用'Memcache'作为蛋糕缓存的引擎时,我注意到TCP连接没有关闭。我注意到蛋糕的MemcacheEngine并没有调用PHP memcache::close()

对于在非fastcgi进程下运行PHP的人,我认为这是正常的,因为在PHP请求结束时进程结束,并“中断”PHP和memcached之间的TCP连接。

使用php5-fpm并非如此,因为PHP进程一直在运行以便重用。

有谁知道这方面的最佳做法?我正在考虑修改CakePHP代码以在处理结束时关闭连接 - 但我想知道是否有更好的方法。

注意:CakePHP的MemcacheEngine不使用pconnect

我的版本信息:

Ubuntu 10.10 64bit
PHP 5.3.3
PECL memcache 3.0.5
memcached 1.4.5
cakephp 1.3.8

1 个答案:

答案 0 :(得分:2)

原来MemcacheEngine使用Memcache::addServer(),默认情况下使用持久性。它正确地重用了我的FPM子节点和我的memcached池之间的连接。

Cake现在添加了一个'persistent'选项,允许覆盖那些希望的人的默认行为: http://cakephp.lighthouseapp.com/projects/42648/tickets/1705-cake-138-memcacheengine-does-not-close-connection