Я тестирую использование memcached для кеширования представлений django. Как я могу определить, кэширует ли memcached что-нибудь из командной строки Linux?
django
memcached
django-cache
MikeN
источник
источник
Вы можете использовать официальный сценарий perl:
memcached-tool 127.0.0.1:11211 stats
Или просто используйте 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-tool 127.0.0.1:11211 stats
- Телнет не нужен./usr/share/memcached/scripts/memcached-tool
./usr/share/memcached/scripts/memcached-tool /tmp/memcached.sock stats
или/usr/share/memcached/scripts/memcached-tool /var/run/memcached/memcached.sock stats
(корпус гнезда)Запустите memcache не как демон, а как обычно, так что просто запустите
memcached -vv
очень подробный. Вы увидите, когда на сервер кэша памяти поступают команды get и sets.источник
Простой способ проверить работу кэша памяти - прокомментировать каждую обслуживаемую страницу. Если временная метка оставалась неизменной при нескольких запросах страницы, значит, эта страница кэшировалась кешем памяти.
В настройках Django я также настраиваю механизм кеширования для использования файлового кеша в файловой системе (очень медленно), но после открытия страниц я мог видеть, что в пути к файлу были размещены фактические файлы кеша, поэтому я мог подтвердить, что кеширование было активен в Django.
Я использовал оба этих шага для решения моей проблемы с кешированием. На самом деле у меня в Django не было правильно включено кеширование. Более новый метод активации кеширования - использование промежуточного программного обеспечения django.middleware.cache.CacheMiddleware (а не промежуточного программного обеспечения с двумя частями промежуточного программного обеспечения, которые должны быть первой / последней настройками промежуточного программного обеспечения).
источник
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
, например.источник
В командной строке попробуйте выполнить следующую команду:
echo stats | nc 127.0.0.1 11211
Если он ничего не возвращает, кэш памяти не работает. В противном случае он должен возвращать кучу статистики, включая время безотказной работы (и количество попаданий и промахов)
Справочная статья находится здесь, https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/
Чтобы видеть изменения каждые 2 секунды:
watch "echo stats | nc 127.0.0.1 11211"
источник
subprocess.Popen('echo stats | nc 127.0.0.1 11211', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE )
Чтобы расширить ответ узла, вы можете использовать его
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
источник
В 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
package):memcdump --servers=localhost:11211
или же:
memdump --servers=localhost:11211
Если вы используете PHP, чтобы увидеть , поддерживается ли, проверить по:
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
источник
yum install memdump
, но ничего не вышло.memdump
является частьюmemcached
(илиlibmemcached
), так что попробуйте:yum install memcached
.memcdump
.Вы можете протестировать 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
источник
Можете ли вы использовать curl для получения страницы несколько сотен раз и времени результатов? Вы также можете посмотреть на запуск процесса на сервере, который при этом имитирует большую нагрузку на ЦП / диск.
источник
Я написал
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
источник
После сообщения Aryashree это помогло мне получить ошибку, если memcached не работает локально:
import subprocess port = 11211 res = subprocess.Popen(f"echo stats | nc 127.0.0.1 {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[-1] print(f"[MemCached] pid {pid} Running on port {port}") else: raise RuntimeError(f"No Memcached is present on port {port}")
источник
Я использую Mezzanine, и единственный ответ, который сработал для меня, был ответ Джейкобса. Итак, остановка демона и запуск
memcached -vv
источник