2012-03-02 18 views
5

मैं रेडिस (2.4.2) का उपयोग कर रहा हूं और INFO कमांड के साथ मैं अपने Redis सर्वर के बारे में आंकड़े पढ़ सकता हूं।रीसेट रीसेट "used_memory_peak" stat

कुछ आंकड़े हैं, जिनमें से कुछ मेमोरी का उपयोग किया जाता है। और एक "used_memory_peak" है जो कि रेडिस ने कभी भी लिया है स्मृति की अधिकतम मात्रा को पकड़ने लगता है।

मैंने कुंजी का एक गुच्छा हटा दिया है, और मैं इस स्टेट को रीसेट करना चाहता हूं क्योंकि यह मेरे मुनिन ग्राफ के पैमाने को प्रभावित करता है।

एक CONFIG RESETSTAT कमांड है, लेकिन ऐसा लगता है कि यह इस विशेष स्थिति को प्रभावित नहीं करता है।

कोई विचार नहीं कि मैं अपने डेटासेट को निर्यात/हटा/आयात किए बिना कैसे कर सकता हूं?

संपादित:

अनुसार खुद को (issue 369 on GitHub) @antirez लिए, यह एक अभिप्रेत व्यवहार है, लेकिन यह इस सुविधा एक भविष्य के रिलीज में और अधिक उपयोगी हो करने के लिए सुधार किया जा सकता।

उत्तर

4

कॉन्फ़िग RESETSTAT के कार्यान्वयन काफी सरल है:

} else if (!strcasecmp(c->argv[1]->ptr,"resetstat")) { 
    if (c->argc != 2) goto badarity; 
    server.stat_keyspace_hits = 0; 
    server.stat_keyspace_misses = 0; 
    server.stat_numcommands = 0; 
    server.stat_numconnections = 0; 
    server.stat_expiredkeys = 0; 
    addReply(c,shared.ok); 

तो यह server.stat_peak_memory कभी Redis द्वारा प्रयुक्त स्मृति की अधिकतम राशि स्टोर करने के लिए इस्तेमाल किया क्षेत्र को प्रारंभ नहीं होता है। मुझे नहीं पता कि यह एक बग या सुविधा है या नहीं।

रेडिस को रोकने के बिना मूल्य को रीसेट करने के लिए यहां एक हैक है। विचार वैरिएबल के मान को बदलने के लिए बैच मोड में जीडीबी का उपयोग करना है (जो स्थिर संरचना का हिस्सा है)। आम तौर पर रेडिस डिबगिंग प्रतीकों के साथ संकलित किया जाता है।

# Here we have plenty of things in this instance 
> ./redis-cli info | grep peak 
used_memory_peak:1363052184 
used_memory_peak_human:1.27G 

# Let's do some cleaning: everything is wiped out 
# don't do this in production !!! 
> ./redis-cli flushdb 
OK 

# Again the same values, while some memory has been freed 
> ./redis-cli info | grep peak 
used_memory_peak:1363052184 
used_memory_peak_human:1.27G 

# Here is the magic command: reset the parameter with gdb (output and warnings to be ignored) 
> gdb -batch -n -ex 'set variable server.stat_peak_memory = 0' ./redis-server `pidof redis-server` 
Missing separate debuginfo for /lib64/libm.so.6 
Missing separate debuginfo for /lib64/libdl.so.2 
Missing separate debuginfo for /lib64/libpthread.so.0 
[Thread debugging using libthread_db enabled] 
[New Thread 0x41001940 (LWP 22837)] 
[New Thread 0x40800940 (LWP 22836)] 
Missing separate debuginfo for /lib64/libc.so.6 
Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2 

warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff51ff000 
0x00002af0b5eef218 in epoll_wait() from /lib64/libc.so.6 

# And now, result is different: great ! 
> ./redis-cli info | grep peak 
used_memory_peak:718768 
used_memory_peak_human:701.92K 

यह एक हैक है: इस उदाहरण को उत्पादन उदाहरण पर लागू करने से पहले दो बार सोचें।

+0

जो दिलचस्प है, लेकिन मुझे लगता है कि मैं उस कम/गहरे नहीं जाऊंगा। वैसे भी इस अच्छी नोक के लिए धन्यवाद। – jlecour

1

सरल चाल गड़गड़ाहट स्मृति ::

चरण 1 खाली करने के लिए:

/घर/logproc/redis/bin/redis-CLI BGREWRITEAOF

इंतजार जब तक यह खत्म एओएफ फाइल को फिर से लिखना।

चरण 2:

पुनः आरंभ redis

हो गया dB। बस।

संबंधित मुद्दे