今天同事反映網站打開巨慢無比,查看阿裡雲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的接口,我們沒有做這方面的程序開發,所以還沒有詳細的技術對比。抱歉。