memcached가 어떤 일을하고 있는지 어떻게 알 수 있습니까?


80

장고 뷰를 캐시하기 위해 memcached를 사용하여 테스트 중입니다. memcached가 실제로 Linux 명령 줄에서 어떤 것을 캐시하고 있는지 어떻게 알 수 있습니까?

답변:


46

이 질문이 오래되었다는 것을 알고 있지만 여기에 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

3
또한-memcached -vv를 실행하기 전에 이미 실행중인 memcache 인스턴스를 중지해야합니다. 그렇지 않으면 두 개의 인스턴스가 실행되고 django는 여전히 첫 번째 인스턴스에서 캐시를 설정합니다.
Monika Sulik 2014

철저한 설명 주셔서 감사합니다, 이것은 당신이 이미 그것이 어떻게 작동하는지 모르는 경우 캐시를 확인하는 방법에 대해 설명합니다
산티아고 천사

이것은 memcached가 작동하는지 테스트하는 가장 빠르고 안정적인 방법입니다. 받아 들여진 대답이어야합니다.
Drubio

45

공식 펄 스크립트를 사용할 수 있습니다.

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

35
memcached-tool 127.0.0.1:11211 stats-텔넷이 필요하지 않습니다.
JMHeap

^^이 댓글은 memcached를 테스트하는 올바른 방법입니다. 이를 사용하여 원격 memcached 클러스터에 대한 연결을 테스트합니다.
DrStrangepork

1
@JMHeap 나는 그 명령을 실행하고 몇 가지 임의의 텍스트를 보여줍니다. 우리는 어떻게 memcache가 실행되고 있는지 확인합니까 ..
shajin

9
우분투에서 memcached-tool을 찾는 데 어려움을 겪는 사람에게는 /usr/share/memcached/scripts/memcached-tool.
Aurelijus Rozenas

또한 시도 /usr/share/memcached/scripts/memcached-tool /tmp/memcached.sock stats또는 /usr/share/memcached/scripts/memcached-tool /var/run/memcached/memcached.sock stats(소켓 케이스)
하산 베이 그

42

memcache를 데몬이 아니라 정상으로 시작하므로 memcached -vv매우 자세하게 실행하십시오 . get 및 set가 memcache 서버에 들어올 때 볼 수 있습니다.


10

memcache 작업을 테스트하는 간단한 방법은 제공되는 모든 페이지에 주석 처리 된 타임 스탬프를 몰래 넣는 것입니다. 타임 스탬프가 페이지에 대한 여러 요청에서 동일하게 유지되면 페이지가 Memcache에 의해 캐시 된 것입니다.

Django 설정에서 파일 시스템에서 파일 캐시를 사용하도록 캐시 메커니즘을 설정했습니다 (정말 느림).하지만 페이지를 조회 한 후에는 파일 경로에 실제 캐시 파일이 있는지 확인할 수 있으므로 캐시가 Django에서 활성화되었습니다.

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


6

Memcached는 실제로 로그 파일을 수동으로 다시 시작하지 않고도 자체적으로 로그 파일에 쓸 수 있습니다. /etc/init.d/memcached(init 스크립트 /usr/lib/systemd/system/memcached.serviceEL7 +에, 우)는 지정된 옵션 memcached를 호출 할 수 있습니다 /etc/memcached.conf(또는 /etc/sysconfig/memcachedEL5 +에). 이러한 옵션에는 자세한 정보 및 로그 파일 경로가 있습니다.

간단히 말해서이 두 줄을 conf / sysconfig 파일에 추가 (또는 주석 해제)하면됩니다.

-vv
logfile /path/to/log

... service memcached restart(EL3-7) 또는 /etc/init.d/memcached restart(debuntus)를 사용 하여 데몬을 다시 시작합니다.

그런 다음 tail -f /path/to/log예를 들어 같은 전통적인 방식으로이 로그를 모니터링 할 수 있습니다 .


6

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

echo stats | nc 127.0.0.1 11211

아무것도 반환하지 않으면 Memcache가 실행되고 있지 않은 것입니다. 그렇지 않으면 가동 시간 (및 적중 횟수)을 포함한 많은 통계를 반환해야합니다.

참조 문서는 여기에 있습니다. 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 )
Evhz

5

확장 노드의 응답 socat UNIX-CONNECT:/var/run/memcached.sock STDIN을 위해 유닉스 소켓을 디버그하는 데 사용할 수 있습니다 .

예:

$ 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

5

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 프로세스가 정확히 처리 중인지 확인하려면 네트워크 스니퍼 또는 디버거 (예 : straceLinux 또는 dtrace/ dtrussUnix / OS X)를 사용할 수 있습니다. 아래에서 몇 가지 예를 확인하십시오.

Strace

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

더 나은 방법으로 출력 형식을 지정하려면 다음을 확인하십시오. 쉘의 strace를 일반 텍스트로 구문 분석하는 방법?

드 트러스

Dtruss는 Unix 시스템에서 사용할 수있는 dtrace 래퍼입니다. 다음과 같이 실행하십시오.

sudo dtruss -t read -fp $(pgrep memcached)

Tcpdump

sudo tcpdump -i lo0 -s1500 -w- -ln port 11211 | strings -10

memdump를 제공하는 패키지는 무엇입니까? 나는 시도했지만 yum install memdump실패했습니다.
Martin

@Martin memdumpmemcached(또는 libmemcached)의 일부 라고 생각 하므로 시도하십시오 yum install memcached.
kenorb

memcdump를 의미합니까?
jobima

@jobima 일부 시스템에서는 memcdump.
kenorb

3

아래 스크립트로 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

1

curl을 사용하여 페이지를 수백 번 가져오고 결과 시간을 측정 할 수 있습니까? 이 작업을 수행하는 동안 과도한 CPU / 디스크로드를 시뮬레이션하는 프로세스를 서버에서 실행하는 것도 살펴볼 수 있습니다.


1

memcached가 호스트 / 포트 조합에서 실행 중인지 테스트 하는 expect스크립트 is-memcached-running를 작성했습니다 (으로 실행 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

1

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}")

0

나는 Mezzanine을 사용하고 있으며 나를 위해 일한 유일한 대답은 Jacobs 대답이었습니다. 따라서 데몬을 중지하고 실행memcached -vv


원래의 대답에 comenting 또는 당신을 위해 일한 대답을 투표를 고려
wranvaud
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.