`
san_yun
  • 浏览: 2611439 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

python-memcached client 性能问题

 
阅读更多

线上发现memcached偶发超过100ms的情况,刚开始以为是memcached server连接数过多的问题,后台测试发现本地也存在这个问题,应该是memcached-client实现导致大并发下,性能太差:

ab -n1000 -c20 http://127.0.0.1:7299/category/life/


 

测试pylibmc性能很好,同样并发下面很少有耗时超过1毫秒的:


 

pylibmc的连接数也很稳定:

 


 

# -*- coding: utf-8 -*-
import time
import pylibmc

mc = pylibmc.Client(["127.0.0.1"])
class Client():
    
    def __init__(self, servers):
        '''
            忽略掉memcached的server配置,使用cache_server
        '''
        
    def get(self,key):
        starttime = time.time()
        val =  mc.get(key)
        endtime = time.time()
        exe_time = (endtime - starttime)*1000
        if exe_time>100:
            print "memcache3 get %s cost:%s"%(key,exe_time)
        return val
    
    def set(self, key, val, time=0, min_compress_len=100):
        return mc.set(key,val,time)
    
    def delete(self,key, time=0):
        return mc.delete(key)
    
    def incr(self, key, delta=1):
        return mc.incr(key,delta)
    
 

 

 

 

 

由于dboss-client是模仿python memcached  client实现的,也很慢,通过打点发现,瓶颈在:

def readline(self):
        buf = self.buffer
        recv = self.socket.recv
        while True:
            index = buf.find('\r\n')
            if index >= 0:
                break
            data = recv(4096)
            if not data:
                self.mark_dead('Connection closed while reading from %s'
                        % repr(self))
                self.buffer = ''
                return ''
            buf += data
        self.buffer = buf[index+2:]
        return buf[:index]

 

dboss测试对比了性能,和原来的差别不大:

AB:

memcached:
Percentage of the requests served within a certain time (ms)
  50%    785
  66%    931
  75%   1041
  80%   1102
  90%   1266
  95%   1428
  98%   1595
  99%   1682
 100%   1811 (longest request)


dboss:
Percentage of the requests served within a certain time (ms)
  50%    799
  66%    918
  75%    992
  80%   1038
  90%   1228
  95%   1382
  98%   1689
  99%   1998
 100%   2432 (longest request)

 

统计get的执行时间(20个并发)

 

dboss :

total: 75243

 0.014%  10ms  -  563ms(count:1100)

99.986%  <10ms

 

memcached :

total: 77508

0.014%  10ms  -  660ms(count:1100)

99.986%  <10ms

 

redis :

total: 2400

10%  4.2ms~127ms

90%  <4.2ms

 

最后看看恐怖的pylibmc:


 

  • 大小: 195.1 KB
  • 大小: 220.3 KB
  • 大小: 153.5 KB
  • 大小: 110.3 KB
分享到:
评论

相关推荐

    reviewboard安装全套工具软件

    CollabNetSubversion-client-1.6.12-1.win32 httpd-2.2.19-win32-x86-openssl-0.9.8r memcached-1.2.6-win32-bin mod_python-3.3.1.win32-py2.5-Apache2.2 MySQL-python-1.2.2.win32-py2.5 patch-2.5.9-7-setup PIL-...

    python-binary-memcached:一个纯Python模块(线程安全),可通过其二进制协议访问具有SASL身份验证的memcached

    一个纯python模块(线程安全),可以通过具有SASL auth支持的二进制文件访问memcached。 该模块的主要目的是能够与使用二进制协议的memcached通信并支持身份验证,因此它可以与Heroku一起使用。 有关在阅读文档的...

    openstack安装包(一)

    python-ceilometerclient-1.0.8-1.el6.noarch.rpm python-chardet-2.0.1-1.el6.rf.noarch.rpm python-cheetah-2.4.1-1.el6.x86_64.rpm python-cinderclient-1.0.7-2.el6.noarch.rpm python-cliff-1.4.4-1.el6.noarch...

    openstack安装包(二)

    python-ceilometerclient-1.0.8-1.el6.noarch.rpm python-chardet-2.0.1-1.el6.rf.noarch.rpm python-cheetah-2.4.1-1.el6.x86_64.rpm python-cinderclient-1.0.7-2.el6.noarch.rpm python-cliff-1.4.4-1.el6.noarch...

    ReviewBoard安装的所有文件包合总

    5 CollabNetSubversion-client-1.6.16-1.win32.exe 6 GetGnuWin32-0.6.3.exe 7 mod_python-3.3.1.win32-py2.5-Apache2.2.exe 8 MySQL-python-1.2.2.win32-py2.5.exe 9 patch-2.5.9-7-setup.exe 10 PIL-1.1.7.win32-...

    python 链接和操作 memcache方法

    2,使用python-memcached模块,进行简单的链接和存取数据 import memcache mc = memcache.Client(['127.0.0.1:12000'], debug=0) mc.set("foo", "bar") mc.get("foo") mc.disconnect_all() 3,其它方法请参考: ...

    python-diskcache:Python磁盘支持的缓存(与Django兼容)。 比Redis和Memcached更快。 纯Python

    DiskCache:磁盘支持的缓存是Apache2许可的磁盘和文件支持的缓存库,用纯Python编写,并且与Django兼容。 2021年基于云的计算将显着提高内存。... In [1]: import pylibmcIn [2]: client = pylibmc.Client(['127.0.0

    memcache-simplified:内存缓存 gettersetter

    内存缓存 ...python test-client/test.python 设计决策 多线程:主线程负责接受套接字连接。 接受 TCP 连接后,将创建一个新线程来处理响应。 Map实现:Map通过链表实现。 这是一个糟糕的选择,因为链

    pymemcache

    memcached client的python实现

    prometheus-http-client:Prometheus服务http客户端,使用包装器自动选择查询模式,无需任何实现

    Prometheus-http-client Prometheus服务的http客户端,方便的查询客户端,可扩展自定义功能。 更简单的扩展:使用包装器自动选择查询模式,无需任何实现。 @ prom def go_gc_duration_seconds ( self , ** ...

    RDM-2021.7.0.exe

    Redis Desktop Manager,简称rdm,是一款可以跨平台的redis可视化工具,该工具可以说很大程度上弥补了memcached这类key/value存储的不足,为Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、...

    kube-controller-demo

    此示例当前基于client-go v3.0.0-beta.0-但将在新版本可用时进行更新。 有用的资源 上游控制器开发和设计原则 上游Kubernetes控制器软件包 客户端示例(版本敏感,例如,将v3示例与v3签出一起使用) 创建...

    redis-desktop-manager-2019.4.rar

    Redis Desktop Manager是一款可以跨平台的redis可视化工具,该工具可以说很大程度上弥补了memcached这类key/value存储的不足,为Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等开发语言...

    Django 1.0 Website Development.pdf

    The test client 230 Testing the registration view 232 Deploying Django 236 The production web server 237 The production database 237 Turning off debug mode 237 Changing configuration variables ...

Global site tag (gtag.js) - Google Analytics