Я тестирую использование memcached для кэширования представлений django. Как я могу определить, действительно ли memcached кэширует что-либо из командной строки Linux?
Откуда вы знаете, что memcached что-то делает?
Ответ 1
Простой способ проверить работу memcache заключался в том, чтобы прокрасться в отмеченную метку времени на каждой странице, поданной вверх. Если временная метка осталась прежней при нескольких запросах на страницу, страница была кэширована memcache.
В настройках Django я также настраиваю механизм кэширования для использования кеша файлов в файловой системе (очень медленно), но после попадания на страницы я мог видеть, что в пути к файлу помещаются фактические файлы кеша, чтобы я мог подтверждение кэширования было активным в Django.
Я использовал оба эти шага для решения моей проблемы с кешированием. На самом деле у меня не было кэширования в Django. Новым методом активации кеширования является использование промежуточного программного обеспечения django.middleware.cache.CacheMiddleware(а не промежуточного программного обеспечения с двумя промежуточными компонентами, которые должны быть первыми/последними настройками промежуточного программного обеспечения.)
Ответ 2
Я знаю, что этот вопрос старый, но вот еще один полезный подход для тестирования memcached с django:
Как упоминал @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
		Ответ 3
Вы можете использовать команду telnet и команду статистики, например:
# 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
		Ответ 4
Запустите memcache не как демона, а нормальный, поэтому просто запустите memcached -vv для очень подробного. Вы увидите, когда на сервер memcache войдут get и sets.
Ответ 5
 Memcached может на самом деле записывать в файл журнала самостоятельно, без необходимости перезапускать его вручную. Сценарий инициализации /etc/init.d/memcached (/usr/lib/systemd/system/memcached.service на EL7+; тьфу) может вызывать memcached с параметрами, указанными в /etc/memcached.conf (или /etc/sysconfig/memcached на EL5+). Среди этих параметров - подробность и путь к файлу журнала.
Короче говоря, вам просто нужно добавить (или раскомментировать) эти две строки в этот файл conf/sysconfig...
-vv
logfile /path/to/log
 ... и перезапустите демон с помощью service memcached restart (EL3-7) или /etc/init.d/memcached restart (debuntus)
 И затем вы можете отслеживать этот журнал традиционным способом, например, tail -f/path/to/log.
Ответ 6
Для расширенного ответа 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
		Ответ 7
Вы можете протестировать memcached или любой сервер ниже script
lsof -i :11211 | grep 'LISTEN'>/dev/null 2>/dev/null;echo $?
если он возвращает 0, то сервер фактически запущен или если его не так, если вы хотите знать, что сервер фактически работает на каком-то порту, используйте следующий script
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
		Ответ 8
В 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 php -i | grep memcached.
трассировка
 Чтобы проверить, какой именно процесс memcached выполняет обработку, вы можете использовать для этого сетевые снифферы или отладчики (например, strace в Linux или dtrace/dtruss в Unix/OS X). Проверьте некоторые примеры ниже.
Strace
sudo strace -e read,write -fp $(pgrep memcached)
 Чтобы лучше отформатировать вывод, проверьте: Как разобрать strace в оболочке в обычный текст?
Dtruss
Dtruss - это оболочка dtrace, доступная в системах Unix. Запустите это как:
sudo dtruss -t read -fp $(pgrep memcached)
 Tcpdump
sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10
		Ответ 9
Можете ли вы использовать завиток, чтобы получить страницу в несколько сотен раз и время результатов? Вы также можете посмотреть, как выполняется процесс на сервере, который имитирует нагрузку на процессор/диск при этом.
Ответ 10
Я написал expect script 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, вы можете сделать ваш запуск зависимым от целевой цели, которая утверждает, что она запущена и работает (или помогает вам получить это состояние). Это обстоятельство, когда проверка не позволяет нам легко отлаживать неработающие ци, запускает 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
		Ответ 11
В командной строке попробуйте выполнить команду
Эхо-статистика | nc 127.0.0.1 11211 *
Если он ничего не возвращает, memcache не запущен. В противном случае он должен вернуть кучу статистики, включая время безотказной работы (и количество попаданий и пропусков)
Справочная статья здесь, https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/
Ответ 12
Я использую Mezzanine, и единственный ответ, который работал у меня, - это ответ Джейкобса. Таким образом, остановка демона и запуск memcached -vv
Ответ 13
После публикации в 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)