php在高负载下无法连接到memcached

时间:2011-07-20 18:02:55

标签: php load connection memcached

我有一个非常令人沮丧的问题,我无法弄清楚。

我有一个网站每周流量一次。它使用memcached在PHP上运行以缓存某些数据。当它达到峰值时,我看到memcache获得600+ req / s。这是问题发生的时候。它偶尔会抛出一条消息,告诉我PHP无法连接到memcache。这会导致我的页面显示随机空白页面。

我还想指出memcache没有占用太多空间。只有大约30MB。我有一种情况,PHP多次访问相同的缓存对象。我还注意到,缓存中的同一个对象被多次访问,它的加载速度比另一个不经常访问的对象稍慢。

其他说明:我在同一个盒子上托管mysql,memcache,php-fpm和nginx。服务器似乎没有处于高负载状态,因为它使用了大约20-35%的CPU并且具有loadavg< 6,并且有足够的空闲记忆。

非常感谢任何建议。

2 个答案:

答案 0 :(得分:0)

由于您网站上的信息非常稀少,这只是一个粗略的假设。但听起来有点像maximum number of open files。或者同一种不同的限制。

显示盒子上的参数(最大打开文件的硬限制和软限制)

ulimit -Hn
ulimit -Sn

另一个选择是你没有在memcached配置中正确配置最大并行请求数。

memcached帮助:

-c       max simultaneous connections (default: 1024)

答案 1 :(得分:0)

您使用的是哪种架构? CentOS的?在版本6中,对/etc/security/limits.conf进行了一些更改(文件/etc/security/limits.d/90-nproc.conf会覆盖这些更改,默认情况下最多为1024个文件)。你需要创建一个像`/etc/security/limits.d/99-memcache.conf'这样的新文件:

* soft nofile 4096
* hard nofile 10240

由于此limits.d文件夹中的文件按字母顺序处理,因此将覆盖1024限制,但下次执行主要操作系统更新时不会导致问题。