@xuemingdeng
2017-08-14T10:11:02.000000Z
字数 1596
阅读 836
架构
著名在线资源存储网站Box.com近日发布了memsniff——一个开源的memcached流量分析工具。该工具的推出是为了在不影响memcached服务器的情况下诊断热键(hot key)问题。
Box经历了从少数几台服务器和数据库到大规模、高性能平台的转变,与其他大型的网络公司一样,Box也使用了分布式缓存层来缓存经常被访问的数据。不过他们有时候会碰到热键问题,也就是说,某些数据对象的访问频率突然变得很高,导致数据服务器带宽负载过重,也会影响缓存服务器提供高性能的服务。
下图展示了出现热键问题的memcached服务器的网络带宽走势,其中棕色曲线部分表示出现了热键问题。
导致热键问题的原因有很多,有可能是因为后台任务造成的,也有可能是因为应用程序处理不当,又或者是因为用户频繁的活动。大部分缓存系统出于性能方面的考虑,几乎不提供日志,所以很难确定是哪些数据导致了这个问题。
而Box推出的memsniff另辟蹊径,它通过检查memcached服务器的网络数据包来分析数据键并提供实时的统计信息,包括数据的大小、请求速率和占用的带宽。这样就可以在不影响服务器的情况下找出有问题的数据键。
memsniff的灵感来自于Etsy的mctop和Tumblr的memkeys,它在高负载的情况下仍然可以处理几乎所有的网络包(超过99.99%)。它使用了golang的多线程原语,并不会占用太多的CPU或内存,如下图所示。
memsniff使用了标准的golang toolchain,如果已经安装了golang toolchain,并设置了GOPATH环境变量,那么可以通过如下的命令来构建memsniff。
$ go get github.com/box/memsniff
$ go build github.com/box/memsniff
memsniff需要超级用户权限来捕捉网络数据包,通过 -i 参数来指定网卡接口。
$ sudo memsniff -i eth0
memsniff也可以从tcpdump的数据包转储文件中读取数据。
$ sudo memsniff -r eth0.pcap
memsniff的GitHub主页上提供了更多的参数说明。
在一台配备了英特尔Xeon E5-2470处理器的服务器上运行memcached,每秒钟处理35万个左右的请求,得出如下的数据。
使用了4-5个核(20个左右的线程,每个20%左右的CPU使用率)
处理100%数据包
使用40MB左右的堆内存
更多的功能
功能改进