你怎么知道memcached是否在做什么?

我正在使用memcached来cachingdjango视图。 我怎么知道memcached是否实际上caching了Linux命令行中的任何内容?

启动memcache不是一个守护进程,但正常,所以只需运行memcached -vv非常详细。 当get和set进入memcache服务器时,您会看到。

我知道这个问题是旧的,但这是另一个用djangotestingmemcached的有用方法:

正如@Jacob提到的,你可以以非常详细的模式启动memcached(而不是守护进程):

 memcached -vv 

要testing你的djangocachingconfiguration,你可以使用低级cachingapi。

  1. 首先,启动python解释器并加载你的django项目设置:

     python manage.py shell 
  2. 从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/