使用python做大数据缓存时遇到的问题

 

被gc和weakref打败了。 这两天在折腾一个数据缓存的rpc服务,简单说就是个内存缓存,计划不打算用redis,memcached。  因为毕竟这些nosql是跨进程的,链接又是tcp链接,肯定是有损耗的。 

但是,我想的太简单了。 再实现的过程中,发现内存总是释放不了,调用gc释放也是相当的有限,这让人十分的抓狂。一开始是以为自己程序的问题,但是随着一遍遍的看代码,发现不对劲,程序里面的那个hash已经基本清零了,但是占用内存还是不少。紧接着我换了套策略,改用lru,lfu的方式,最少使用算法和计数使用算法,看起来很时尚,永远会把旧的数据踢出去,但是……    踢不干净咋整?  lru 还真踢不干净….. 

      后来搜了下文档,说是用weakref这样的弱引用可以解决。。。 但是,效果也是不明显。  说实话,十分的郁闷呀。 

      这里针对我的程序,我简单写个demo,体现下我的问题。 有兴趣的朋友也可以看看。 

大家会发现,他的内存在gc收回和weakref消除后,还是不能缩减到他一开始的内存使用数。 我这边如果做缓存的话,占用内存大小估计在10G左右,但是如果总是消减不清楚,然后慢慢的,内存中垃圾数据了。 




3 Responses

  1. orangleliu 2014年10月31日 / 下午5:30

    后来怎么解决的? 专家

    • 峰云 2014年11月1日 / 上午7:09

      后来确定别的逻辑都回收,就mysql 在多线程复用得时候没回收,换了pymysql

  2. orangleliu 2014年10月31日 / 下午5:28

    lru,lfu 这个是啥,看不懂

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">