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

在高负载下,php无法连接到memcached,php,load,connection,memcached,Php,Load,Connection,Memcached,我有一个非常令人沮丧的问题,我想不出来 我有一个网站,流量每周一次激增。它在PHP上运行,使用memcached缓存某些数据。当它达到峰值时,我看到memcache获得600+req/s。这就是问题发生的时候。它不时抛出一条消息,告诉我PHP无法连接到memcache。这会导致我的页面显示随机空白页面 我还想指出,memcache没有占用太多空间。只有大约30MB。我遇到过PHP多次访问同一个缓存对象的情况。我还注意到缓存中的同一个对象被多次访问,它的加载速度比不经常访问的另一个对象稍慢 其他注

我有一个非常令人沮丧的问题,我想不出来

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

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

其他注意事项:我将mysql、memcache、php fpm和nginx托管在同一个框中。服务器似乎没有处于高负载状态,因为它使用了大约20-35%的CPU,loadavg<6,并且有大量可用内存


任何建议都将不胜感激。

这只是一个粗略的假设,因为您网站上的信息非常稀少。但听起来好像您达到了打开文件的最大数量。或者同一类型的不同限制

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

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

memcached帮助:

-c       max simultaneous connections (default: 1024)

您使用的是什么体系结构?森托斯?在版本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个限制,但不会在下次执行主要操作系统更新时导致问题。

结果:ulimit-Hn:1024 ulimit-Sn:1024 memcached-c设置为10000,因此我认为问题不存在。另外,如果这是一个文件描述符限制,它将在哪里记录此类错误,以便我可以检查以确认它确实是此类错误。非常感谢您的输入。日志中的位置取决于您的linux发行版以及您的设置。但最有可能的是
/var/log/messages
将保存信息。您可以使用
lsof-p
。但是在这个设置下,10000个并行连接是不可能的。我运行Ubuntu 10.04 64位。我在/var/log/messages中看到了大量类似这样的错误。7月20日13:47:18服务器1内核:[864540.650111]u速率限制:247次回调被抑制7月20日13:47:18服务器1内核:[864540.650115]php5 fpm[16194]一般保护ip:6b7123 sp:7FF65A6AA0错误:php5 fpm中的0[400000+717000]我编辑了nginx和php5 fpm,将rlimit从1024更改为8192,但是我仍然看到同样的错误发生。我还使用ulimit-n8192命令将硬/软ulimit更改为8192。我会密切关注日志,如果再次发生此错误,我会回复。再次感谢。听起来像是php和内核之间发生了segfault错误。不久前,nginx邮件列表上有一篇帖子
* soft nofile 4096
* hard nofile 10240