अगर आप कुछ भी कर रहे हैं तो आपको कैसे पता चलेगा?


80

मैं django विचारों को कैश करने के लिए मेमकाटेड का उपयोग करके परीक्षण कर रहा हूं। मैं कैसे बता सकता हूं कि क्या वास्तव में मेमेकैक्ड लिनक्स कमांड लाइन से कुछ भी कैशिंग कर रहा है?

जवाबों:


46

मुझे पता है कि यह सवाल पुराना है, लेकिन यहाँ django के साथ मेमेकैल्ड परीक्षण के लिए एक और उपयोगी तरीका है:

जैसा कि @ जेकॉब ने उल्लेख किया है, आप बहुत क्रिया मोड में याद रखना शुरू कर सकते हैं (डेमन के रूप में नहीं):

memcached -vv

अपने django cache config का परीक्षण करने के लिए, आप निम्न-स्तरीय कैश एप का उपयोग कर सकते हैं।

  1. सबसे पहले, अजगर दुभाषिया शुरू करें और अपनी django परियोजना सेटिंग्स लोड करें:

    python manage.py shell
    
  2. शेल से, आप अपने मेम्चेचे सर्वर का परीक्षण करने के लिए निम्न-स्तरीय कैश एपीआई का उपयोग कर सकते हैं:

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

यदि आपका कैश कॉन्फ़िगरेशन सही है, तो आपको इसके समान मेमेचे में आउटपुट देखना चाहिए:

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

3
इसके अलावा - ध्यान देने योग्य बात यह है कि मेमस्कैड -vv चलाने से पहले आपको पहले से चल रहे मेमेकैस इंस्टेंस को रोकना होगा अन्यथा आपके पास दो इंस्टेंस चल रहे होंगे और django अभी भी पहले एक में कैश सेट कर रहा होगा।
मोनिका सुलिक

पूरी तरह से स्पष्टीकरण के लिए धन्यवाद, यह बताता है कि कैश की जांच कैसे करें यदि आप पहले से ही नहीं जानते कि यह कैसे काम करता है
सैंटियागो एंजेल

यह परीक्षण करने का सबसे तेज़ और सबसे विश्वसनीय तरीका है अगर मेमकेड काम कर रहा है। स्वीकृत उत्तर होना चाहिए।
ड्रूबियो

45

आप आधिकारिक पर्ल स्क्रिप्ट का उपयोग कर सकते हैं:

memcached-tool 127.0.0.1:11211 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

^ ^ यह टिप्पणी मेमेकड टेस्ट करने का सही तरीका है। मैं इसका उपयोग अपने दूरस्थ मेमक्लेटेड क्लस्टर्स से कनेक्टिविटी का परीक्षण करने के लिए करता हूं।
Drrangerangepork

1
@ जेएम हाइप मैं उस कमांड को चलाता था और कुछ रैंडम टेक्स्ट दिखा रहा था, हम कैसे पुष्टि करते हैं कि मेमेचे चल रहा है ..
शाज़िन

9
मेमबेडेड-टूल को खोजने के लिए संघर्ष करने वाले किसी व्यक्ति के लिए - ubuntu पर /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(सॉकेट केस)
हसन बेग

42

मेमने को एक डेमन के रूप में नहीं बल्कि सामान्य रूप से शुरू करें, इसलिए memcached -vvबहुत वर्बोज़ के लिए दौड़ें । जब मेम के सर्वर में सेट और सेट आते हैं तो आप देखेंगे।


10

मेकचेस काम करने के लिए परीक्षण करने का सरल तरीका यह था कि हर पेज पर टाइमस्टैम्प पर टिप्पणी की जाए। यदि टाइमस्टैम्प एक पृष्ठ पर एक से अधिक अनुरोधों पर एक ही रहा, तो मेमेचे द्वारा पृष्ठ को कैश किया जा रहा था।

Django सेटिंग्स में, मैं फ़ाइल सिस्टम पर फ़ाइल कैश का उपयोग करने के लिए कैश तंत्र को भी सेटअप करता हूं (वास्तव में धीमा), लेकिन उन पृष्ठों को मारने के बाद मैं देख सकता था कि फ़ाइल पथ में वास्तविक कैश फाइलें रखी जा रही थीं, इसलिए मैं कैशिंग की पुष्टि कर सकता था Django में सक्रिय।

मैंने अपनी कैशिंग समस्या के समाधान के लिए इन दोनों चरणों का उपयोग किया। मैंने वास्तव में Django में कैशिंग को सही ढंग से चालू नहीं किया था। कैशिंग को सक्रिय करने की नई विधि 'django.middleware.cache.CacheMiddleware' मिडलवेयर (दो मिडलवेयर टुकड़ों के साथ मिडलवेयर नहीं है जो पहले / अंतिम मिडलवेयर सेटिंग होना चाहिए) का उपयोग कर रहा है।


6

Memcached वास्तव में अपने आप ही एक logfile को लिख सकता है, बिना इसे मैन्युअल रूप से पुनरारंभ करने का सहारा लेने के। /etc/init.d/memcachedInit स्क्रिप्ट ( /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(डिबंटस)

और फिर आप इस लॉग को पारंपरिक तरीके से देख सकते हैं, जैसे tail -f /path/to/log, उदाहरण के लिए।


6

कमांड लाइन से, नीचे दिए गए कमांड का प्रयास करें:

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 )
इव्ज़

5

Node की प्रतिक्रिया का विस्तार करने के लिए, आप उपयोग कर सकते हैं 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

बैश में, आप इस आदेश द्वारा मेमचे के आंकड़ों की जांच कर सकते हैं:

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यूनिक्स / ओएस एक्स पर) का उपयोग कर सकते हैं । नीचे कुछ उदाहरण देखें।

स्ट्रेस

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

आउटपुट को बेहतर तरीके से फॉर्मेट करने के लिए, चेक करें: शेल में प्लेन टेक्स्ट में पार्स कैसे करें?

दारुवास

Dtruss एक dtrace आवरण है जो यूनिक्स सिस्टम पर उपलब्ध है। इसे इस रूप में चलाएं:

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:।
केनोरब

तुम्हारा मतलब क्या है?
jobima

@jobima कुछ प्रणालियों पर इसे बुलाया जा सकता है memcdump
कीनोरब

3

आप स्क्रिप्ट या किसी भी सर्वर को स्क्रिप्ट के नीचे देख सकते हैं

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

क्या आप पृष्ठ को कुछ सौ बार लाने और परिणामों के लिए कर्ल का उपयोग कर सकते हैं? आप सर्वर पर एक प्रक्रिया को भी देख सकते हैं जो ऐसा करते समय भारी सीपीयू / डिस्क लोड का अनुकरण करता है।


1

मैंने एक 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नियम से अपना सिस्टम चलाते हैं , तो आप अपने स्टार्टअप को एक ऐसे लक्ष्य पर निर्भर कर सकते हैं जो यह सुनिश्चित करता है कि वह ऊपर है और चल रहा है (या आपको वह स्थिति प्राप्त करने में मदद करता है)। यह क्रिया है जब चेक हमारे लिए विफल ci रन को डिबग करना आसान बनाता है, गायब होने पर मेमस्कैस्ट स्थापित करता है, और संक्षिप्त है और अन्यथा बिंदु पर है:

#! /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

आर्यश्री पद के बाद, इसने मुझे एक त्रुटि प्राप्त करने में मदद की अगर स्थानीय स्तर पर नहीं चल रहा है:

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

मैं मेजेनाइन का उपयोग कर रहा हूं और मेरे लिए काम करने वाला एकमात्र उत्तर जैकब्स उत्तर था। इसलिए डेमन को रोकना और भागनाmemcached -vv


मूल उत्तर पर ध्यान देने या केवल आपके लिए काम करने वाले उत्तर के लिए मतदान करने पर विचार करें
wranvaud
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.