我遇到了一个非常令人沮丧的问题,我想不出来。
我有一个网站,每周流量高峰一次。它在PHP上运行,使用memcached缓存某些数据。当它达到峰值时,我看到memcache达到600+ req/s。这就是问题发生的时候。它时不时地抛出一条消息,告诉我PHP无法连接到memcache。这将导致我的页面显示随机的空白页。
我还想指出memcache并没有使用太多的空间。只有大约30MB。我遇到过一种情况,PHP多次访问同一个缓存对象。我还注意到,如果缓存中的同一个对象被多次访问,它的加载速度会比另一个不经常访问的对象稍慢。
其他注意事项:我在同一台机器上托管mysql, memcache, php-fpm和nginx。服务器似乎没有处于高负载下,因为它使用了大约20-35%的CPU,并且具有负载平均值<6、有足够的空闲内存
这只是一个粗略的假设,因为您的站点信息非常稀疏。但听起来你会碰到maximum number of open files
。或者其他类似的限制
显示您盒子上的参数(打开文件的最大数量的硬限制和软限制)
ulimit -Hn
ulimit -Sn
另一种可能是您没有在memcached配置中正确配置最大并行请求数。
memcached帮助:
-c max simultaneous connections (default: 1024)
您使用的是什么架构?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限制,但在下次进行主要操作系统更新时不会引起问题。