你怎么知道memcached是否在做什么?
我正在使用memcached来cachingdjango视图。 我怎么知道memcached是否实际上caching了Linux命令行中的任何内容?
启动memcache不是一个守护进程,但正常,所以只需运行memcached -vv
非常详细。 当get和set进入memcache服务器时,您会看到。
我知道这个问题是旧的,但这是另一个用djangotestingmemcached的有用方法:
正如@Jacob提到的,你可以以非常详细的模式启动memcached(而不是守护进程):
memcached -vv
要testing你的djangocachingconfiguration,你可以使用低级cachingapi。
-
首先,启动python解释器并加载你的django项目设置:
python manage.py shell
-
从shell中,您可以使用低级cachingapi来testing您的memcache服务器:
from django.core.cache import cache cache.set('test', 'test value')
如果你的cachingconfiguration是正确的,你应该看到类似于这个memcache的输出:
<32 set :1:test 0 300 10 >32 STORED
你可以使用telnet和stats命令例如:
# telnet localhost [memcacheport] Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. stats STAT pid 2239 STAT uptime 10228704 STAT time 1236714928 STAT version 1.2.3 STAT pointer_size 32 STAT rusage_user 2781.185813 STAT rusage_system 2187.764726 STAT curr_items 598669 STAT total_items 31363235 STAT bytes 37540884 STAT curr_connections 131 STAT total_connections 8666 STAT connection_structures 267 STAT cmd_get 27 STAT cmd_set 30694598 STAT get_hits 16 STAT get_misses 11 STAT evictions 0 STAT bytes_read 2346004016 STAT bytes_written 388732988 STAT limit_maxbytes 268435456 STAT threads 4 END
testingmemcache工作的简单方法是在提供的每个页面上隐藏已注释的时间戳。 如果时间戳在对页面的多个请求中保持不变,则该页面由memcachecaching。
在Django的设置中,我还设置了caching机制来在文件系统上使用文件caching(真的很慢),但是在点击页面之后,我可以看到有实际的caching文件被放置在文件path中,所以我可以确认caching是活跃在Django。
我用这两个步骤来解决我的caching问题。 我实际上没有在Django中正确打开caching。 激活caching的新方法是使用“django.middleware.cache.CacheMiddleware”中间件(而不是中间件,中间件必须是第一个/最后一个中间件设置)。
为了扩展Node的响应,可以使用socat UNIX-CONNECT:/var/run/memcached.sock STDIN
来debugging一个unix套接字。
例:
$ socat UNIX-CONNECT:/var/run/memcached.sock STDIN stats STAT pid 931 STAT uptime 10 STAT time 1378574384 STAT version 1.4.13 STAT libevent 2.0.19-stable STAT pointer_size 32 STAT rusage_user 0.000000 STAT rusage_system 0.015625 STAT curr_connections 1 STAT total_connections 2 STAT connection_structures 2
您可以通过以下脚本testingmemcached或任何服务器
lsof -i :11211 | grep 'LISTEN'>/dev/null 2>/dev/null;echo $?
如果它返回0,那么服务器实际上正在运行,或者如果1它不是如此,如果你想知道服务器实际上在某个端口上运行,使用下面的脚本
lsof -i :11211 | grep 'LISTEN'>/dev/null 2>/dev/null; if [ $? -eq 0]; then echo "Your memcache server is running" else echo "No its not running" fi
Memcached实际上可以自己写入日志文件,而不必手动重新启动它。 /etc/init.d/memcached
初始化脚本可以使用/etc/memcached.conf
指定的选项调用memcached。 这些选项包括详细信息和日志文件path。
总之,你只需要添加(或取消注释)这两行到/etc/memcached.conf
:
-vv lofgile /path/to/log
…并使用service memcached restart
或/etc/init.d/memcached restart
守护进程
然后你可以用传统的方式监视这个日志,比如tail -f /path/to/log
。
在Bash中,你可以通过这个命令检查memcache的统计信息:
exec 3<>/dev/tcp/localhost/11211; printf "stats\nquit\n" >&3; cat <&3
要刷新caching,请使用memflush
命令:
echo flush_all >/dev/tcp/localhost/11211
并检查数据是否增加。
要转储所有caching对象,请使用memdump
命令( memcached
/ libmemcached
包的一部分):
memdump --servers=localhost:11211
如果您使用的是PHP,要查看是否受支持,请检查: php -i | grep memcached
php -i | grep memcached
。
追踪
要检查正在处理哪个memcached进程,可以使用networking嗅探器或debugging器(例如,Linux上的strace
或Unix / OS X上的dtrace
/ dtruss
)。 检查下面的一些例子。
strace的
sudo strace -e read,write -fp $(pgrep memcached)
要更好地格式化输出,请检查: 如何将shell中的straceparsing为纯文本?
Dtruss
Dtruss是一个在Unix系统上可用的dtrace包装器。 运行它为:
sudo dtruss -t read -fp $(pgrep memcached)
TCPDUMP
sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10
你可以使用curl来获取一个页面几百次和时间的结果? 你也可以看看在服务器上运行一个模拟CPU /磁盘负载繁重的进程。
我编写了一个expect
脚本is-memcached-running
,用于testingmemcached是否在主机/端口组合上运行(以is-memcached-running localhost 11211
):
#! /usr/bin/env expect set timeout 1 set ip [lindex $argv 0] set port [lindex $argv 1] spawn telnet $ip $port expect "Escape character is '^]'." send stats\r expect "END" send quit\r expect eof
如果您从Makefile
规则运行系统,则可以使启动依赖于使其处于运行状态(或帮助您获得该状态)的make目标。 当检查不能让我们很容易地debugging失败的ci运行,在缺lessmemcached的时候安装memcached,并且是简短的,否则:
#! /bin/bash if [[ "$(type -P memcached)" ]]; then echo 'memcached installed; checking if it is running' memcached_debug=`mktemp memcache-check.XXXXX` if is-memcached-running localhost 11211 >$memcached_debug 2>&1; then echo 'Yep; memcached online' else cat $memcached_debug echo echo '****** Error: memcached is not running! ******' if [[ "$OSTYPE" =~ ^darwin ]]; then echo echo 'Instructions to auto-spawn on login (or just start now) are shown' echo 'at the end of a "brew install memcached" run (try now, if you did' echo 'not do so already) or, if you did, after a "brew info memcached".' echo fi exit 1 fi rm -f $memcached_debug else echo memcached was not found on your system. if [[ "$OSTYPE" =~ ^darwin ]]; then brew install memcached elif [[ "$OSTYPE" =~ ^linux ]]; then sudo apt-get install memcached else exit 1 fi fi
我正在使用夹层,唯一的答案是雅各布的回答。 所以停止守护进程并运行memcached -vv
从命令行,请尝试下面的命令
回声stats | nc 127.0.0.1 11211 *
如果它不返回任何内容,则memcache不会运行。 否则,它应该返回一堆统计信息,包括正常运行时间(和计数和计数)
参考文章在这里, https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/