Memcachedを使用してDjangoビューをキャッシュします。memcachedが実際にLinuxコマンドラインから何かをキャッシュしているかどうかを確認するにはどうすればよいですか?
Memcacheの動作をテストする簡単な方法は、提供されたページごとにコメントアウトされたタイムスタンプを忍び込ませることでした。ページへの複数のリクエストでタイムスタンプが同じままである場合、ページはmemcacheによってキャッシュされていました。
Django=設定では、ファイルシステムでファイルキャッシュを使用するようにキャッシュメカニズムも設定します(本当に遅い)が、ページにアクセスした後、実際にキャッシュファイルが配置されていることがわかりましたDjangoでキャッシュがアクティブであることを確認できるようにファイルパス。
キャッシングの問題を解決するために、これらの両方の手順を使用しました。私は実際にDjangoでキャッシュを正しくオンにしていませんでした。キャッシングをアクティブにする新しい方法は、「Django.middleware.cache.CacheMiddleware」ミドルウェアを使用することです(最初/最後のミドルウェア設定である必要がある2つのミドルウェア部分を含むミドルウェアではありません)。
私はこの質問が古いことを知っていますが、Djangoでmemcachedをテストするための別の便利なアプローチを次に示します。
@Jacobが述べたように、memcachedは非常に詳細なモード(デーモンとしてではなく)で起動できます。
memcached -vv
Djangoキャッシュ設定をテストするには、低レベルのキャッシュAPIを使用できます。
まず、pythonインタープリターを起動し、Djangoプロジェクト設定をロードします。
python manage.py Shell
シェルから、低レベルキャッシュAPIを使用してmemcacheサーバーをテストできます。
from Django.core.cache import cache
cache.set('test', 'test value')
キャッシュ構成が正しい場合、memcacheに次のような出力が表示されます。
<32 set :1:test 0 300 10
>32 STORED
デーモンとしてではなく通常としてmemcacheを起動します。非常に冗長にするためにmemcached -vv
を実行してください。 getおよびsetがmemcacheサーバーにいつ入るかがわかります。
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
Memcachedは、手動で再起動することなく、ログファイルに実際に書き込むことができます。 /etc/init.d/memcached
initスクリプト(EL7 +では/usr/lib/systemd/system/memcached.service
; ugh)は、/etc/memcached.conf
(またはEL5 +では/etc/sysconfig/memcached
)で指定されたオプションでmemcachedを呼び出すことができます。これらのオプションには、冗長性とログファイルパスがあります。
つまり、conf/sysconfigファイルにこれらの2行を追加(またはコメント解除)するだけです...
-vv
logfile /path/to/log
...そしてservice memcached restart
(EL3-7)または/etc/init.d/memcached restart
(debuntus)でデーモンを再起動します
そして、たとえばtail -f /path/to/log
などの従来の方法でこのログを監視できます。
Nodeの応答を拡張するには、socat UNIX-CONNECT:/var/run/memcached.sock STDIN
を使用して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
以下のスクリプトでmemcachedまたは任意のサーバーをテストできます
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
Bashでは、次のコマンドでmemcacheの統計を確認できます。
exec 3<>/dev/tcp/localhost/11211; printf "stats\nquit\n" >&3; cat <&3
キャッシュをフラッシュするには、memflush
コマンドを使用します。
echo flush_all >/dev/tcp/localhost/11211
統計情報が増加したかどうかを確認します。
キャッシュされたすべてのオブジェクトをダンプするには、memdump
またはmemcdump
コマンド(memcached
/libmemcached
パッケージの一部)を使用します。
memcdump --servers=localhost:11211
または:
memdump --servers=localhost:11211
PHPを使用している場合、サポートされているかどうかを確認するには、php -i | grep memcached
。
どのmemcachedプロセスが正確に処理しているかを確認するには、ネットワークスニファーまたはデバッガー(たとえば、Linuxではstrace
、Unix/OS Xではdtrace
/dtruss
)を使用できます。以下の例を確認してください。
Sudo strace -e read,write -fp $(pgrep memcached)
出力をより良い方法でフォーマットするには、次を確認してください: Shellでstraceをプレーンテキストに解析する方法は?
Dtrussは、Unixシステムで利用可能なdtraceラッパーです。次のように実行します。
Sudo dtruss -t read -fp $(pgrep memcached)
Sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10
expect
スクリプトis-memcached-running
memcachedがホスト/ポートの組み合わせで実行されているかどうかをテストします(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ターゲットにスタートアップを依存させることができます。チェックが失敗してciの実行を簡単にデバッグできず、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
Curlを使用してページを数百回取得し、結果の時間を計ることができますか?また、サーバー上で、CPU /ディスクの重い負荷をシミュレートするプロセスを実行することもできます。
コマンドラインから、以下のコマンドを試してください
エコー統計| nc 127.0.0.1 11211 *
何も返されない場合、memcacheは実行されていません。それ以外の場合は、稼働時間(およびヒットカウントとミスカウント)を含む統計の束を返す必要があります
リファレンス記事はこちら https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/
私はメザニンを使用しており、私のために働いた唯一の答えはジェイコブスの答えでした。したがって、デーモンを停止してmemcached -vv
を実行します
Aryashreeの投稿に続いて、memcachedがローカルで実行されていない場合、これによりエラーが発生しました。
import subprocess
port=11211
res=subprocess.Popen('echo stats | nc 127.0.0.1 %d' % (port), Shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE )
if res.stdout:
lines=res.stdout.read()
lineArr=lines.split('\r\n')
pidlineArr=lineArr[0].split(' ')
pid=pidlineArr[len(pidlineArr)-1]
print("[MemCached] pid %s Running on port %d" % (pid, port))
else:
raise RuntimeError("No Memcached is present on port %d" % port)