문제

Memcached to Cache Django보기를 사용하여 테스트하고 있습니다. Memcached가 실제로 Linux 명령 줄에서 실제로 캐싱되는지 어떻게 알 수 있습니까?

도움이 되었습니까?

해결책 4

Memcache 작업을 테스트하는 간단한 방법은 제공되는 모든 페이지에서 댓글을 달린 타임 스탬프를 몰래 넣는 것이 었습니다. 타임 스탬프가 여러 요청에서 한 페이지에 동일하게 유지되면 Memcache가 페이지를 캐시했습니다.

Django 설정에서 파일 시스템에서 파일 캐시를 사용하는 캐시 메커니즘을 설정하지만 (실제로 느리게) 페이지를 치면 파일 경로에 실제 캐시 파일이 배치되어 Caching이 확인 될 수 있음을 알 수 있습니다. 장고에서 활동합니다.

이 두 단계를 사용하여 캐싱 문제를 해결했습니다. 나는 실제로 Django에서 캐싱이 올바르게 켜지지 않았습니다. 캐싱을 활성화하는 최신 방법은 'django.middleware.cache.cachemiddleware'미들웨어를 사용하는 것입니다 (첫 번째/마지막 미들웨어 설정이어야하는 두 개의 미들웨어 조각이있는 미들웨어가 아님).

다른 팁

나는이 질문이 오래되었음을 알고 있지만, 여기 Django로 Memcached를 테스트하는 또 다른 유용한 접근법이 있습니다.

@Jacob이 언급했듯이, 당신은 매우 장황한 모드 (데몬이 아님)에서 memcached를 시작할 수 있습니다.

memcached -vv

Django 캐시 구성을 테스트하려면 저수준 캐시 API를 사용할 수 있습니다.

  1. 먼저 Python 통역사를 시작하고 Django 프로젝트 설정을로드하십시오.

    python manage.py shell
    
  2. 쉘에서 저수준 캐시 API를 사용하여 Memcache 서버를 테스트 할 수 있습니다.

    from django.core.cache import cache
    cache.set('test', 'test value')
    

캐시 구성이 올바른 경우 다음과 비슷한 Memcache에서 출력이 표시됩니다.

<32 set :1:test 0 300 10
>32 STORED

Telnet 및 Stats Command를 사용할 수 있습니다.

# 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

Memcache를 데몬이 아니라 정상으로 시작하십시오. memcached -vv 매우 장점을 위해. Get 's and Sets가 Memcache 서버에 올 때를 볼 수 있습니다.

Memcached는 실제로 수동으로 다시 시작하지 않고도 로그 파일에 자체적으로 쓸 수 있습니다. 그만큼 /etc/init.d/memcached init 스크립트 (/usr/lib/systemd/system/memcached.service EL7+; ugh) 지정된 옵션으로 memcached를 호출 할 수 있습니다. /etc/memcached.conf (또는 /etc/sysconfig/memcached el5+). 이러한 옵션 중에는 Verbosity 및 Log 파일 경로가 있습니다.

요컨대,이 두 줄을 해당 conf/sysconfig 파일에 추가 (또는 무너질)하면 ...

-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.


트레이싱

정확히 처리되는 멤버링 프로세스를 확인하려면 네트워크 스니퍼 또는 디버거를 사용할 수 있습니다 (예 : strace 리눅스에서 또는 dtrace/dtruss UNIX/OS X)에서. 아래 몇 가지 예를 확인하십시오.

스트라스

sudo strace -e read,write -fp $(pgrep memcached)

더 나은 방법으로 출력을 포맷하려면 다음을 확인하십시오. 쉘에서 스트레이크를 평범한 텍스트로 구문 분석하는 방법?

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/디스크로드가 무거운 CPU/디스크로드를 시뮬레이션하는 프로세스를 실행하는 것을 볼 수도 있습니다.

나는 썼다 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

a에서 시스템을 실행하는 경우 Makefile 규칙에 따라, 스타트 업이 그것이 UP가 진행되고 있다고 주장하는 대상에 의존 할 수 있습니다 (또는 해당 상태를 얻는 데 도움이됩니다). 수표가 실패한 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

명령 줄에서 아래 명령을 시도하십시오

에코 통계 | NC 127.0.0.1 11211*

아무것도 반환하지 않으면 Memcache가 실행되지 않습니다. 그렇지 않으면 가동 시간을 포함한 많은 통계를 반환해야합니다 (및 히트 앤 미스 카운트).

참조 기사는 여기에 있습니다.https://www.percona.com/blog/2008/11/26/a-quick-way-to-get-memcached-status/

나는 메 자닌을 사용하고 있으며 나를 위해 일한 유일한 대답은 Jacobs Answer였습니다. 그래서 데몬을 멈추고 달리기 memcached -vv

Aryashree Post에 이어 로컬로 실행되지 않으면 오류가 발생하는 데 도움이되었습니다.

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top