用户agentzh的头像

agentzh

查看新浪微博主页
  • 用户头像

    agentzh

    用 stap++ 编写了一个分析工具,可以在线统计指定的 nginx worker 进程中在 rewrite 请求处理阶段里的延时分布。文档在 🔗 网页链接 这里的 rewrite 阶段延时包括(非阻塞)I/O 时间。公司的 CDN 调度器是完全用 Lua 编写的,它就是运行在 rewrite 阶段的。该工具能单独测量此阶段的延时。
    展开全文
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    Lily 老师 @Miss渣 曾经把我的(程序员)职业戏称为“弹小黑框”的。现在我自己看看我的微博配图,确实有好多的“小黑框”耶。。。
    原微博
  • 用户头像

    agentzh

    我们公司作网页缓存的 nginx 使用的是它自己的 http cache,配合 SSD 硬盘作存储(最好的机器使用是 Fusion IO 的盘)。一个很有趣的问题就是这些 nginx worker 进程的文件 IO 究竟有多少命中了内核的 page cache. 对于我们的生产环境,94G 内存的机器的命中率有 95% ~ 96%,而 47G 内存也有 90%.
    展开全文
    今天在 Josh Stone 从前写的一个 stap 脚本的基础上用 stap++ 语言编写了一工具,叫做 vfs-page-cache-misses 可以实时统计指定的单线程进程上下文中所有 vfs_read 调用对应的 page cache 的命中率:🔗 网页链接 当然,用户也可以在命令行上指定统计其他的内核函数或系统调用。见下图的例子。
    1. 微博附图
    转发 1评论 0
    原微博
  • 用户头像

    agentzh

    最近我使用 off-CPU time 火焰图工具捕捉到一个比较严重的线上瓶颈。线上通过 ngx-sample-bt-off-cpu 工具(🔗 网页链接 )采样 nginx 得到的火焰图在这里:🔗 网页链接 从图上可以看到有一个使用互斥锁的 http cache 检查代码让绝大部分的 off-CPU 时间(70%)都花在等待进程锁上。
    展开全文
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    上周末无聊给我的个人网站 agentzh.org 手绘的两个傻傻的 logo 贴到了下面。因为用工具转换成 16x16 的大小之后一片模糊,所以不能作为 favicon 了,但不影响放到这里供大伙乐一乐
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    Packt 出版社的几个编辑经常会发邮件问我是否有意撰写他们的一些微型技术图书的主题,有 Nginx 相关的,也有 Lua 相关的。他们一般会自己定好一些比较具体的标题,然后去 GitHub、邮件列表等地方物色合适的作者。无奈我工作一直很忙,要不花时间多写一些英文的东西也挺有意思的
    展开全文
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    这里的 ngx.re.match 和 ngx.re.gsub 都是调用 PCRE 库进行正则匹配。而我们线上启用了 PCRE 的 Just-in-Time 即时编译模式,同时 PCRE 动态生成的机器代码是没有调试符号的,所以当 CPU 在跑这些机器代码的时候,systemtap 等工具是无法拿到当前的 C 调用栈的。幸运的是,我们仍可以取得 Lua 调用栈。
    展开全文
    接前一条微博:从同一台机器采样到的Lua语言级别的“火焰图”(flamegraph)是这个样子的:🔗 网页链接 我们可以注意到 ngx_http_lua_re_gsub 和 ngx_http_lua_re_match 这两个函数(分别对应 ngx.re.gsub 和 ngx.re.match 这两个函数)占用了 80% 以上的样本(即对应相同比例的 CPU 时间)。
    1. 微博附图
    转发 1评论 0
    原微博
  • 用户头像

    agentzh

    其实这里由 GitHub 生成的 subweek-offset heat map 也是挺直观的。Brendan Gregg 一直使用 dtrace 为 Joyent Cloud 的生产环境绘制 CPU 使用率和系统调用次数的 subsecond-offset heat map: 🔗 网页链接 数据可视化做好了确实很有意义,做不好只不过看着曲线无谓地上上下下罢了。
    展开全文
    今天一大早收到了以色列用户 Tzury 同学的邮件,他分享了一个链接,可以根据我的 GitHub 提交活跃度自动生成音乐:🔗 网页链接 看来过去的一年里我的 GitHub 旋律几乎一直比较激昂呀,其中去年 4 月有一周我完全没有开过机上过网,所以算是短暂的停歇吧。
    1. 微博附图
    转发 1评论 0
    原微博
  • 用户头像

    agentzh

    今天一大早收到了以色列用户 Tzury 同学的邮件,他分享了一个链接,可以根据我的 GitHub 提交活跃度自动生成音乐:🔗 网页链接 看来过去的一年里我的 GitHub 旋律几乎一直比较激昂呀,其中去年 4 月有一周我完全没有开过机上过网,所以算是短暂的停歇吧。
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    刚看到我在 GitHub 上的 follower 数过千了,看来我后面会更忙了。用户驱动的开发就是辛苦呀,呵呵。
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    我越来越真切地体会到,开发和驾御复杂的软件系统的能力,很大程度上其实取决于测试和调试水平的先进程度。“Only trust what you can test”被无数次地验证,即使在那些我本不情愿承认的场合。而花费在测试工具链、调试工具链乃至代码静态分析工具方面的投入,再多也不会嫌过分
    展开全文
    原微博
  • 用户头像

    agentzh

    GitHub 的技术支持回复还挺快的,但有些意外的是,回复竟是让我给他们开源在 GitHub 上的网站组件发 pull request,汗!于是便有了我这个小补丁:🔗 网页链接 幸好只需要编辑一个 YAML 文件,不用去动他们的 Ruby 代码……GitHub 的技术支持天然 0 成本呀!谁让他们的用户是开源程序员呢?
    展开全文
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    我的 Amazon EC2 测试集群昨晚捕捉到了 Nginx 核心中的一个小 bug. 当 ngx_resolver 和 ngx_poll_module 一起使用时可能会引发段错误而导致 nginx 进程崩溃。刚刚我为 Nginx 准备了一个小补丁提交到了 nginx-devel 邮件列表:🔗 网页链接 通过测试集捕捉到的 bug 比线上环境容易复现多了 :)
    展开全文
    原微博
  • 用户头像

    agentzh

    刚刚看 Intel 的技术手册才发现竟然有 BTS 这么好用的 CPU 指令,可以直接把操作数中指定的比特位加载进 CF 标志位并自动将该操作数中的这个比特位置为 1,省去了我使用 TEST + OR 这两条指令的麻烦,同时也避免了加载 64 位立即数。在 Intel 的 PDF 手册里搜索真是享受,难怪 Google 里难搜到好东西。
    展开全文
    原微博
  • 用户头像

    agentzh

    Josh Haberman 最近写了一篇博客,专门介绍如何编写最简单的 Just-In-Time (JIT) 编译器:🔗 网页链接 这也是我见到的第一篇比较完整的 DynASM 的入门教程。该文还包含了一个 brainfuck 语言的完整的 x86_64 JIT 编译器实现;Mike Pall 的 DynASM 工具链确实让 JIT 的实现变得清晰而优美。
    展开全文
    原微博
  • 用户头像

    agentzh

    最近接触了一下 Brainfuck 语言,8 条极简单的命令构成的图灵完全的语言。用它书写的 Hello World 程序看起来都像密码(而且不是人为故意扭曲的!)。难为 wikipedia 上还有一个非常详尽的条目介绍它:🔗 网页链接
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    刚才跟同事 Matthieu Tourne 在 gtalk 上聊天,说到我想在新的一年里取得对 LuaJIT 代码基的足够控制力时,他说很喜欢我说的一句话,觉得很值得引用:“It is all about gaining control over the code base. It is a constructive thing, not destructive or anti-social. -- agentzh”
    展开全文
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    今晚我和 Piotr Sikora 受邀与 Nginx 的创始人 Igor Sysoev 及 Nginx 公司的 Andrew 一起在旧金山吃了顿饭。我和 Igor 老大一见如故,相谈甚欢,从 Nginx 的前世今生一直聊到中国和印度的古代史。生活中的 Igor 非常活泼和健谈,完全不同于他在邮件中给人留下的冰冷沉默的大叔形象
    展开全文
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    早上看到了这篇文章,很有意思:🔗 网页链接 "Network Storage in the Cloud: Delicious but Deadly" 确实快速而准确地隔离、定位和排除各种不可预见的故障的能力永远是第一位的。
    原微博
  • 用户头像

    agentzh

    刚刚在 OpenResty 中文邮件列表里借着回复一位用户问询的机会,详细介绍了一下我在 Linux 上使用 SystemTap 和 Brendan Gregg 的 FlameGraph 工具为正在运行中的某个 nginx worker 进程(或其他任意进程)生成纯用户态或者用户态 + 核心态的“火焰图”的详细步骤:🔗 网页链接 (可能需翻墙)
    展开全文
    1. 微博附图
    原微博
  • 用户头像

    agentzh

    James Hurst 将于下周四在每月一次的 London Lua 聚会上分享 OpenResty: 🔗 网页链接 可惜我不能到现场,不过 James 说会后将把幻灯片和视频放上去 :)
    原微博
  • 用户头像

    agentzh

    根据@Simon李晓明 同学先前在 openresty 邮件组中的报告,我刚刚在 ngx_openresty 的仓库中把 <openresty_prefix>/lualib/?/init.lua 添加进了 ngx_lua 模块默认的 Lua 包搜索路径列表(package.path),补丁在 🔗 网页链接 该更动将包含在下一个 ngx_openresty 开发版发布 1.0.15.1 中 :)
    展开全文
    原微博