• 使用Python操作Memcached


    1、安装

    yum install memcached
    easy_install python-memcached

    2、操作memcached

    import memcache
    mc = memcache.Client(['127.0.0.1:12000'],debug=True)
    mc.set('name','luo',60)
    print mc.get('name')
    mc.delete('name') 

    3、监控脚本

    """
    Server Density Agent Plugin for memcached
    This script requires a config entry in the agent config
    [Memcached]
    host = '127.0.0.1'
    port = 12000
    """
    
    import sys
    import telnetlib
    import re
    import socket
    import logging
    import json
    import time
    
    
    class Memcached:
        def __init__(self, agentConfig, checksLogger, rawConfig):
            self.agentConfig = agentConfig
            self.checksLogger = checksLogger
            self.rawConfig = rawConfig
    
        def run(self):
            stats = {}
    
            if hasattr(self.rawConfig['Memcached'], 'host'):
                host = self.rawConfig['Memcached']['host']
            else:
                host = '127.0.0.1'
    
            if hasattr(self.rawConfig['Memcached'], 'port'):
                port = self.rawConfig['Memcached']['port']
            else:
                port = 12000
    
            try:
                telnet = telnetlib.Telnet()
                telnet.open(host, port)
                telnet.write('stats
    ')
    
                out = telnet.read_until("END")
    
                telnet.write('quit
    ')
                telnet.close()
            except socket.error, reason:
                sys.stderr.write("%s
    " % reason)
                sys.stderr.write("Is memcached running?
    ")
                sys.stderr.write("Host: %s Port: %s
    " % (host, port))
                return stats
    
            # Current / Total
            stats['curr_items'] = int(re.search("curr_items (d+)", out).group(1))
            stats['total_items'] = int(re.search("total_items (d+)", out).group(1))
    
            # Memory Usgae
            stats['limit_maxbytes'] = int(re.search("limit_maxbytes (d+)", out).group(1))
            stats['bytes'] = int(re.search("bytes (d+)", out).group(1))
    
            # Network Traffic
            stats['bytes_read'] = int(re.search("bytes_read (d+)", out).group(1))
            stats['bytes_written'] = int(re.search("bytes_written (d+)", out).group(1))
    
            # Connections
            stats['curr_connections'] = int(re.search("curr_connections (d+)", out).group(1))
            stats['total_connections'] = int(re.search("total_connections (d+)", out).group(1))
    
            # Hits / Misses
            stats['cmd_get'] = int(re.search("cmd_get (d+)", out).group(1))
            stats['cmd_set'] = int(re.search("cmd_set (d+)", out).group(1))
            stats['get_hits'] = int(re.search("get_hits (d+)", out).group(1))
            stats['get_misses'] = int(re.search("get_misses (d+)", out).group(1))
            stats['delete_hits'] = int(re.search("delete_hits (d+)", out).group(1))
            stats['delete_misses'] = int(re.search("delete_misses (d+)", out).group(1))
            stats['incr_hits'] = int(re.search("incr_hits (d+)", out).group(1))
            stats['decr_hits'] = int(re.search("decr_hits (d+)", out).group(1))
            stats['incr_misses'] = int(re.search("incr_misses (d+)", out).group(1))
            stats['decr_misses'] = int(re.search("decr_misses (d+)", out).group(1))
    
            # Evictions
            stats['evictions'] = int(re.search("evictions (d+)", out).group(1))
            stats['reclaimed'] = int(re.search("reclaimed (d+)", out).group(1))
    
            return stats
    
    
    if __name__ == '__main__':
        """
        Standalone test configuration
        """
        raw_agent_config = {
            'Memcached': {
                'host': '127.0.0.1',
                'port': 12000,
            }
        }
    
        main_checks_logger = logging.getLogger('Memcached')
        main_checks_logger.setLevel(logging.DEBUG)
        main_checks_logger.addHandler(logging.StreamHandler(sys.stdout))
        host_check = Memcached({}, main_checks_logger, raw_agent_config)
    
        while True:
            try:
                print json.dumps(host_check.run(), indent=4, sort_keys=True)
            except:
                main_checks_logger.exception("Unhandled exception")
            finally:
                time.sleep(60)

    可以把记录写入日志文件,用gnuplot或者rrdtool绘成图片会更好

    4、压力测试脚本

    #!/usr/bin/python2
    import memcache
    import time
    def test_set():
        m = memcache.Client(['127.0.0.1:12000'],debug=True)
        for i in range(100000):
            m.set('name'+ str(i) ,'problem'+str(i),5000)
        return
    
    def test_get():
        m = memcache.Client(['127.0.0.1:12000'],debug=True)
        for i in range(100000):
            m.get('name'+ str(i))
        return
    def test_delete():
        m = memcache.Client(['127.0.0.1:12000'],debug=True)
        for i in range(100000):
            m.delete('name'+ str(i))
        return
    def bench(desc):
        start=time.clock()
        desc()
        stop=time.clock()
        diff=stop-start
        print "%s has token %s" % (desc.func_name,str(diff))
    if __name__=='__main__':
        bench(test_set)
        bench(test_get)
        #bench(test_delete)

    10W次读取需要1s多,读取也是1s多 ,5-6W QPS问题不大

  • 相关阅读:
    使用ActivityGroup来切换Activity和Layout
    Fragment
    [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree
    [Swift]LeetCode298. 二叉树最长连续序列 $ Binary Tree Longest Consecutive Sequence
    [Swift]LeetCode296. 最佳开会地点 $ Best Meeting Point
    [Swift]LeetCode294. 翻转游戏之 II $ Flip Game II
    [Swift]LeetCode293. 翻转游戏 $ Flip Game
    [Swift]LeetCode291. 单词模式 II $ Word Pattern II
    [Postman]发出SOAP请求(18)
    [Postman]生成代码段(17)
  • 原文地址:https://www.cnblogs.com/chenpingzhao/p/4874003.html
Copyright © 2020-2023  润新知