你好,游客 登录 注册 搜索
背景:
阅读新闻

Memsniff:一个健壮的Memcached流量分析工具

[日期:2017-08-15] 来源:infoq.com  作者:薛命灯 [字体: ]

著名在线资源存储网站Box.com近日发布了memsniff——一个开源的memcached流量分析工具。该工具的推出是为了在不影响memcached服务器的情况下诊断热键(hot key)问题。

背景

Box经历了从少数几台服务器和数据库到大规模、高性能平台的转变,与其他大型的网络公司一样,Box也使用了分布式缓存层来缓存经常被访问的数据。不过他们有时候会碰到热键问题,也就是说,某些数据对象的访问频率突然变得很高,导致数据服务器带宽负载过重,也会影响缓存服务器提供高性能的服务。

下图展示了出现热键问题的memcached服务器的网络带宽走势,其中棕色曲线部分表示出现了热键问题。

导致热键问题的原因有很多,有可能是因为后台任务造成的,也有可能是因为应用程序处理不当,又或者是因为用户频繁的活动。大部分缓存系统出于性能方面的考虑,几乎不提供日志,所以很难确定是哪些数据导致了这个问题。

而Box推出的memsniff另辟蹊径,它通过检查memcached服务器的网络数据包来分析数据键并提供实时的统计信息,包括数据的大小、请求速率和占用的带宽。这样就可以在不影响服务器的情况下找出有问题的数据键。

memsniff的灵感来自于Etsy的mctop和Tumblr的memkeys,它在高负载的情况下仍然可以处理几乎所有的网络包(超过99.99%)。它使用了golang的多线程原语,并不会占用太多的CPU或内存,如下图所示。

安装memsniff

memsniff使用了标准的golang toolchain,如果已经安装了golang toolchain,并设置了GOPATH环境变量,那么可以通过如下的命令来构建memsniff。

$ go get github.com/box/memsniff
$ go build github.com/box/memsniff

使用memsniff

memsniff需要超级用户权限来捕捉网络数据包,通过 -i 参数来指定网卡接口。

$ sudo memsniff -i eth0

memsniff也可以从tcpdump的数据包转储文件中读取数据。

$ sudo memsniff -r eth0.pcap

memsniff的GitHub主页上提供了更多的参数说明。

memsniff的原理

  1. 使用GoPacketlibpcap主线程抓取原始数据包。
  2. 解码工作线程解析原始数据包中的memcached协议部分,找出GET请求的响应消息,从中抽取数据键和数据项大小。
  3. 抽取出来的概要信息被发送给分析工具,并根据数据键进行分区,每一个工作线程持有一个分区。
  4. 分析工具合并各个工作线程的报告,将其展示给UI用户。

memsniff的性能

在一台配备了英特尔Xeon E5-2470处理器的服务器上运行memcached,每秒钟处理35万个左右的请求,得出如下的数据。

使用了4-5个核(20个左右的线程,每个20%左右的CPU使用率)

  • 处理100%数据包

    • 展示了99.99%的数据包,说明一直有一小部分数据包在启动时被丢弃。
    • 在发生热键问题的时候,网络接口出现饱和,仍然可以处理99.9%的数据包。
  • 使用40MB左右的堆内存

  • 100MB左右的RSS(可以通过GOGC进行调整)
  • 平均GC停顿0.6毫秒
  • 最大GC停顿2.0毫秒

memsniff路线图

更多的功能

  • TCP stream重组:get-miss跟踪、支持二进制协议,支持redis
  • 触发器(例如在发生热键问题时发出告警)
  • 在达到某些条件时自动记录日志(例如某个数据键的流量达到设定的阈值)
  • 通过过滤器限制数据集
  • 跟踪单个请求和响应
  • 根据客户端IP限制流量

功能改进

  • 支持指定memcached服务器端口
  • 支持更多的排序方式
  • 支持同时监听多个服务器
  • 支持GET以外的操作
  • 视图过滤
  • 支持创建稳定的报告,并输出到磁盘
  • 提供工具用于构建其他格式的包(如deb、rpm等)

为PHP安装Memcached扩展连接Memcached http://www.linuxidc.com/Linux/2016-05/131690.htm

Linux下Memcached安装与启用  http://www.linuxidc.com/Linux/2016-07/133423.htm

Memcached构建缓存加速集群部署 http://www.linuxidc.com/Linux/2017-02/140656.htm

Linux CentOS 7 下通过Memcached实现Session共享  http://www.linuxidc.com/Linux/2016-09/135552.htm

Memcached的安装配置及将PHP的session保存在Memcached中  http://www.linuxidc.com/Linux/2017-02/140679.htm

Linux CentOS 7 下通过Memcached实现Session共享  http://www.linuxidc.com/Linux/2016-09/135552.htm

CentOS 6.6下Memcached 源码安装配置  http://www.linuxidc.com/Linux/2015-09/123019.htm

Linux CentOS 7下Memcached 安装与配置  http://www.linuxidc.com/Linux/2016-09/135553.htm

Memcached 的详细介绍请点这里
Memcached 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-08/146240.htm

linux
相关资讯       Memsniff  Memcached流量分析工具 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款