我有一个非常令人沮丧的问题,我无法弄清楚。
我有一个网站每周流量一次。它使用memcached在PHP上运行以缓存某些数据。当它达到峰值时,我看到memcache获得600+ req / s。这是问题发生的时候。它偶尔会抛出一条消息,告诉我PHP无法连接到memcache。这会导致我的页面显示随机空白页面。
我还想指出memcache没有占用太多空间。只有大约30MB。我有一种情况,PHP多次访问相同的缓存对象。我还注意到,缓存中的同一个对象被多次访问,它的加载速度比另一个不经常访问的对象稍慢。
其他说明:我在同一个盒子上托管mysql,memcache,php-fpm和nginx。服务器似乎没有处于高负载状态,因为它使用了大约20-35%的CPU并且具有loadavg< 6,并且有足够的空闲记忆。
非常感谢任何建议。
答案 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限制,但下次执行主要操作系统更新时不会导致问题。