今天同事反映网站打开巨慢无比,查看阿里云ECS Web服务器正常,而RDS MySQL数据库服务器有堵塞,都是被下面类似语句链接:
SELECT s.source, s.context, t.translation, t.language FROM mingluji_gongshang.locales_source s LEFT JOIN mingluji_gongshang.locales_target t ON s.lid = t.lid AND t.language = 'zh-hans' WHERE s.textgroup = 'default' AND s.version = '7.67' AND LENGTH(s.source) < '75'
屏蔽了很多爬虫,但依然没有缓解,打开Devel发现一个正常页面本来只有30个SQL查询的,现在变成了250个,其中220个都是上面这种一样的语句,明显是缓存没有起到作用。
在Linux下运行service memcached status,返回memcached (pid 22984) is running...,说明memcached还在运行中,但以前也遇到过memcached显示状态正常,而不能起作用的问题,于是重启memcached服务:
service memcached restart Stopping memcached: [ OK ] Starting memcached: [ OK ]
重启后,刷新Drupal站页面,只剩下大约30个SQL查询,再去看RDS后台,MySQL进程再无堆积,问题解决了。👌
这种问题遇到不止一次了,都是memcached运行很多天以后才会发生,例如这次重启前memcached已经运行了2个月多,以后考虑设置crontab把memcached定时重启。
memcached确实不太稳定,今天又发现有一台服务器上的一个站点巡检中报错,重启memcached不成功,显示
service memcached restart Stopping memcached: [FAILED] Starting memcached: [ OK ]
只有用ps -ef|grep memcached找出来kill掉,然后再用service memcached restart重启:
ps -ef|grep memcached 496 2478 1 2 03:04 ? 00:29:00 memcached -U 0 -d -l 127.0.0.1 -p 11211 -u memcached -m 2048 -c 1024 -P /var/run/memcached/memcached.pid kill 2478 kill 2478 bash: kill: (2478) - No such process
这种问题不是第一次出现了,其它服务器、其它站点也都出现过。
干脆在所有服务器的/etc/crontab中都设置了一句:
03 03 * * 0 root service memcached restart
每台服务器上的memcached都在周日凌晨3点3分重启,看这样是否可以大幅降低memcached出问题的机率。
评论2
radis和memched 这两个哪个好用点。
radis和memched 这两个哪个好用点。我没有用过redis,只用过memcached
我没有用过redis,只用过memcached,而且是CMS自己与memcached的接口,我们没有做这方面的程序开发,所以还没有详细的技术对比。抱歉。