KK的博客
Don't Repeat Yourself · 好奇心驱动进步
最新文章
初探 groupcache
groupcache 是用于 dl.google.com 的一个 memcached 的替代品,相对于 memcached,提供更小的功能集和更高的效率,以第三方库的形式提供服务。 groupcache 的常见部署可参考下图: 不同于 memcached,groupcache 面向的是静态的缓存系统,比如 google 家的下载站,用来缓存对应的文件区块。一经 set 操作,key 对应的 value 就不再变化。使用的时候,需要自定义缓存缺失时使用的 set 操作。当发生 miss 的时候,首 …
groupcache 是用于 dl.google.com 的一个 memcached 的替代品,相对于 memcached,提供更小的功能集和更高的效率,以第三方库的形式提供服务。 groupcache 的常见部署可参考下图: 不同于 memcached,groupcache 面向的是静态的缓存系统,比如 google 家的下载站,用来缓存对应的文件区块。一经 set 操作,key 对应的 value 就不再变化。使用的时候,需要自定义缓存缺失时使用的 set 操作。当发生 miss 的时候,首 …
systemtap 折腾笔记
在这货上花费了不少时间,都是受了 @agentzh 大神的蛊惑 :) 他写的 nginx-systemtap-toolkit 监测的数据很有价值,对于系统优化实在是利器。 最早折腾 systemtap,是在 Ubuntu 12.04 上搞的,内核版本是 3.8.0-29-generic,流程参考 官方教程 。因为 12.04 版本比较新,所以不需要重新编译内核了。然后添加带调试信息的内核,以及相关的 Linux 头文件。整个过程还算顺利,就是公司网速比较慢。下载完成后,用 ubuntu 官方仓库 …
在这货上花费了不少时间,都是受了 @agentzh 大神的蛊惑 :) 他写的 nginx-systemtap-toolkit 监测的数据很有价值,对于系统优化实在是利器。 最早折腾 systemtap,是在 Ubuntu 12.04 上搞的,内核版本是 3.8.0-29-generic,流程参考 官方教程 。因为 12.04 版本比较新,所以不需要重新编译内核了。然后添加带调试信息的内核,以及相关的 Linux 头文件。整个过程还算顺利,就是公司网速比较慢。下载完成后,用 ubuntu 官方仓库 …
Mongodb 在 NUMA 机器上的优化
10gen 在 mongodb 的部署指南上,提到了在 NUMA 机器上,mongodb 可能会出现问题,参见:http://docs.mongodb.org/manual/administration/production-notes/#production-numa 里面引用了一篇博客,主要讲 MySQL 的 swap insanity,而 mongodb 也会遇到类似的问题,博客地址 …
10gen 在 mongodb 的部署指南上,提到了在 NUMA 机器上,mongodb 可能会出现问题,参见:http://docs.mongodb.org/manual/administration/production-notes/#production-numa 里面引用了一篇博客,主要讲 MySQL 的 swap insanity,而 mongodb 也会遇到类似的问题,博客地址 …
转设置 Android 手机以使用 ARMStreamline 进行性能分析(一)
Streamline 5.7 版。Streamline 是 ARM Development Studio 5 的一个组成模块。因此,可通过下载 ARM DS-5 专业版、基础版或免费的 DS-5 公众版(针对 Android 系统)来获得它。 目标 ARM 设备,HTC Sensation 4G - [Qualcomm Snapdragon …
Streamline 5.7 版。Streamline 是 ARM Development Studio 5 的一个组成模块。因此,可通过下载 ARM DS-5 专业版、基础版或免费的 DS-5 公众版(针对 Android 系统)来获得它。 目标 ARM 设备,HTC Sensation 4G - [Qualcomm Snapdragon …
转设置 Android 手机以使用 ARMStreamline 进行性能分析(二)
General Setup( 常规设置 ),确保启用了 Profiling Support ( 分析支持 ) 选项。 Kernel Hacking( 内核开发 ),在子菜单中,导航至 Tracers 子菜单,然后按下 Enter。确保启用 Trace 进程上下文开关选项。 Kernel Features( 内核功能 ),确保启用 High Resolution Timer Support ( 高分辨率定时器支持 )。如果正在使用对称多处理器 (SMP) 设备,则启用 Use local …
General Setup( 常规设置 ),确保启用了 Profiling Support ( 分析支持 ) 选项。 Kernel Hacking( 内核开发 ),在子菜单中,导航至 Tracers 子菜单,然后按下 Enter。确保启用 Trace 进程上下文开关选项。 Kernel Features( 内核功能 ),确保启用 High Resolution Timer Support ( 高分辨率定时器支持 )。如果正在使用对称多处理器 (SMP) 设备,则启用 Use local …
FreeBSD 打开 DTrace 支持
主要翻译自:https://wiki.freebsd.org/DTrace FreeBSD 跟 Linux 发行版一个比较大的差异,就是提倡源码构建。因此这里提到比较多的编译开关设置。自 2012 年 5 月后,DTrace 支持默认是打开的,因此以下步骤不再需要了。留意 uname -a 输出的日期即可。 添加内核编译选项,打开 DTrace 支持 打开调试符号 makeoptions DEBUG="-g" # build kernel with gdb(1) debug symbols 对于 …
主要翻译自:https://wiki.freebsd.org/DTrace FreeBSD 跟 Linux 发行版一个比较大的差异,就是提倡源码构建。因此这里提到比较多的编译开关设置。自 2012 年 5 月后,DTrace 支持默认是打开的,因此以下步骤不再需要了。留意 uname -a 输出的日期即可。 添加内核编译选项,打开 DTrace 支持 打开调试符号 makeoptions DEBUG="-g" # build kernel with gdb(1) debug symbols 对于 …
压测周
本周主要工作是解决 dbd 的多线程 bug,可是失败了。 为了重现这个多线程的 bug,准备模拟多用户登录的情景,当多个用户需要保存数据的时候,就会跑到多线程序列化数据的部分,应该可以重现这个 bug。于是,从周一到周三,花了三天时间,用 python+gevent 写了一个模拟客户端,实现了客户端连接服务器和登录的流程。其实这个测试工具,在上一个项目里已经写了一点了,基本数据类型的解包比如整型,字符串解包已经有了。但是,我翻看代码才发现,当时没有写打包协议的实现写的过程比较流畅,用了 …
本周主要工作是解决 dbd 的多线程 bug,可是失败了。 为了重现这个多线程的 bug,准备模拟多用户登录的情景,当多个用户需要保存数据的时候,就会跑到多线程序列化数据的部分,应该可以重现这个 bug。于是,从周一到周三,花了三天时间,用 python+gevent 写了一个模拟客户端,实现了客户端连接服务器和登录的流程。其实这个测试工具,在上一个项目里已经写了一点了,基本数据类型的解包比如整型,字符串解包已经有了。但是,我翻看代码才发现,当时没有写打包协议的实现写的过程比较流畅,用了 …
类型系统线程安全
最近情绪有点失控,跟很欣赏的同事吵架了,真难过。有些话,可能真的只有吵架才会说出口,只好安慰自己,这未尝不是一次难得的交流。究其原因,就是一段代码由我开发,他接手维护,然后交给我继续跟进;最近频繁报 bug,他觉得在替我擦屁股,收拾代码,我也觉得我在替他擦屁股,大家心里有气,但是谁也没有说出口。多点面对面交流,多点讨论,工作压力小一点,可能就可以避免了。 最近修复的 dbd 的 bug,一个是字符串管理上面的, 上一篇博文 已经提到了 mapping_to_bson 的,这周还发现了 …
最近情绪有点失控,跟很欣赏的同事吵架了,真难过。有些话,可能真的只有吵架才会说出口,只好安慰自己,这未尝不是一次难得的交流。究其原因,就是一段代码由我开发,他接手维护,然后交给我继续跟进;最近频繁报 bug,他觉得在替我擦屁股,收拾代码,我也觉得我在替他擦屁股,大家心里有气,但是谁也没有说出口。多点面对面交流,多点讨论,工作压力小一点,可能就可以避免了。 最近修复的 dbd 的 bug,一个是字符串管理上面的, 上一篇博文 已经提到了 mapping_to_bson 的,这周还发现了 …
dbd 到 mongo 的序列化问题及稳定性
最近工作压力有点大,情绪偶然会失控,要好好反省一下自己。 上周本来打算写 CSP 相关的东西,但是目前做得还不够多,积累的经验不足,就放弃了。中间找到很好的参考资料,一并放在这里。一篇是比较短的论文,可以观其大略:http://www.cs.ucf.edu/courses/cop4020/sum2009/CSP-hoare.pdf,另一个链接是 hoare 写的关于进程演算的书 …
最近工作压力有点大,情绪偶然会失控,要好好反省一下自己。 上周本来打算写 CSP 相关的东西,但是目前做得还不够多,积累的经验不足,就放弃了。中间找到很好的参考资料,一并放在这里。一篇是比较短的论文,可以观其大略:http://www.cs.ucf.edu/courses/cop4020/sum2009/CSP-hoare.pdf,另一个链接是 hoare 写的关于进程演算的书 …
进程演算中的事件概念
最近将军团模块的 bug 修的差不多了,可以准备下一步的分布式改造了。只是每次想起这工程量,就有够头大的了。 在修改军团的时候,除了不断增补单元测试,就是思考分布式的交互。不同进程间的交互,一个 rpc 协议就是一个消息,消息间是有严格的先后顺序的,
最近将军团模块的 bug 修的差不多了,可以准备下一步的分布式改造了。只是每次想起这工程量,就有够头大的了。 在修改军团的时候,除了不断增补单元测试,就是思考分布式的交互。不同进程间的交互,一个 rpc 协议就是一个消息,消息间是有严格的先后顺序的,
青春请你归来,再伴我一会
加班到 12 点,走出公司的时候,发现大街上伴我同行的,只有一大帮小姐了,so sad 持续加班获得的效率红利已经渐渐消失,前面留下的技术债越来越成为前进的障碍。发版本的前一晚,提交频率非常高,经常有人抱怨更新后进不去游戏。客户端没有人搞单元测试,偏偏脚本又无法通过静态编译消灭一部分低级错误。于是,就变成了《唐伯虎点秋香》那一幕: 本周主要做的是公会的公告板系统。一般公会的聊天都是纯文本,只要记得记录就好,但是 coc 的公会还有同意和拒绝这种操作,以及捐兵,而且这两项还是实时推送。推送消息的时 …
加班到 12 点,走出公司的时候,发现大街上伴我同行的,只有一大帮小姐了,so sad 持续加班获得的效率红利已经渐渐消失,前面留下的技术债越来越成为前进的障碍。发版本的前一晚,提交频率非常高,经常有人抱怨更新后进不去游戏。客户端没有人搞单元测试,偏偏脚本又无法通过静态编译消灭一部分低级错误。于是,就变成了《唐伯虎点秋香》那一幕: 本周主要做的是公会的公告板系统。一般公会的聊天都是纯文本,只要记得记录就好,但是 coc 的公会还有同意和拒绝这种操作,以及捐兵,而且这两项还是实时推送。推送消息的时 …
再堕噩梦,斩龙之旅
本周继续做公会功能,有点乏味。 这次主要是基于上周完成的框架,进行具体功能的协议对接。原本以为对接会很简单,毕竟之前的功能模块都已经写过单元测试了,虽然覆盖率不高,好歹还是能跑通 happy path 的。实际用的时候,才发现上周设计的 api 粒度太细了。隐约记得第一次做公会,也是犯了这个错误,api 之间是十分正交,每一个完成的功能也很简单,方便测试。但是,用的时候需要调用多个 api,因此需要处理多种错误情况,而没有 goto 语句,又导致需要将同一段错误处理代码多次复制粘贴。 另一个比 …
本周继续做公会功能,有点乏味。 这次主要是基于上周完成的框架,进行具体功能的协议对接。原本以为对接会很简单,毕竟之前的功能模块都已经写过单元测试了,虽然覆盖率不高,好歹还是能跑通 happy path 的。实际用的时候,才发现上周设计的 api 粒度太细了。隐约记得第一次做公会,也是犯了这个错误,api 之间是十分正交,每一个完成的功能也很简单,方便测试。但是,用的时候需要调用多个 api,因此需要处理多种错误情况,而没有 goto 语句,又导致需要将同一段错误处理代码多次复制粘贴。 另一个比 …