在这货上花费了不少时间,都是受了@agentzh 大神的蛊惑:) 他写的nginx-systemtap-toolkit监测的数据很有价值,对于系统优化实在是利器。

最早折腾systemtap,是在Ubuntu 12.04上搞的,内核版本是3.8.0-29-generic,流程参考官方教程。因为12.04版本比较新,所以不需要重新编译内核了。然后添加带调试信息的内核,以及相关的Linux头文件。整个过程还算顺利,就是公司网速比较慢。下载完成后,用ubuntu官方仓库自带的systemtap 1.6,却出现各种奇怪的C编译错误,于是换到了git clone下来的最新版本。这次错误信息友好了很多,但tapset的脚本跟内核的dwarf信息似乎对应不上,报semantic error: not accessible at this address [man error::dwarf]。至此,ubuntu上的systemtap只能打出hello world,其他脚本都跑不了,遂放弃。教训是,systemtap要新版,内核要老版,若用老systemtap和新内核,一般是会挂的。

对systemtap的用户态监控还是很口水,虽然我司用的是自己写的定制语言,但是-g编译后应该可以监控私有语言的脚本栈,进而分析性能瓶颈。于是,死皮赖脸抢夺了一台CentOS的机器做测试。机器版本如下:

[root@localhost systemtap]# uname -rm
2.6.-.el6.x86_64 x86_64
 
[root@localhost systemtap]# cat /etc/redhat-release
CentOS release 6.3 (Final)

用的systemtap版本是最新的。跟Ubuntu相比,CentOS的包管理就比较差了,内核的调试信息包需要自己手动下载安装。参考官方教程,安装debuginfo-common和debuginfo后,就可以开搞了。还好,这次不需要编译内核。安装好systemtap后,跑起来却出现这个问题:

stap -e 'probe begin { log("hello world") exit() }'

提示:

Checking "/lib/modules/2.6.32-279.el6.x86_64/build/.config" failed with error: 没有那个文件或目录

检查了一下相关的目录,/lib/modules/2.6.32-279.el6.x86_64/是一个软连接,链接到/usr/src/kernels/里去的。而2.6.32-358.23.2.el6.x86_64这个目录是真的没有,有的是2.6.32-358.23.2.el6.x86_64。谷歌了一下,这个目录是kernel-devel包的,通过yum安装的是最新的2.6.32-358.23.2.el6.x86_64,跟当前运行的内核不符。继续放狗,找到2.6.32-279.el6.x86_64的kernel-devel rpm包,安装完就有对应目录了。试了一下iotop终于成功了。

看了一下,systemtap似乎是根据写的probe编译成二进制模块,加载到内核里执行的。所以systemtap会在home目录下建立一个cache目录,避免重复编译相同的脚本。而nginx-systemtap-toolkit对Lua的栈探测,是通过监视LuaL开头的函数实现的,接下来准备按他的思路搞一下我们的私有语言。

systemtap折腾笔记的更多相关文章

  1. MacBook外置显卡eGPU折腾笔记

    MacBook外置显卡eGPU折腾笔记 硬件选购 当今市场上个人电脑的独立显卡,基本上能选的只有NVIDIA和AMD了,如果你想买外置显卡来打游戏的话,NVIDIA和AMD的都可以,但如果是像我一样准 ...

  2. SystemTap 学习笔记 - 安装篇

    https://segmentfault.com/a/1190000000671438 在安装前,需要知道下自己的系统环境,我的环境如下: uname -r 2.6.18-308.el5 Linux ...

  3. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  4. ASP.NET Core 折腾笔记一

    前言: 在ASP.NET Core 1.0时,曾折腾过一次,后因发现不了System.Data而停止. 更因VS2015提示过期Delete掉VS了,其实主要还是笔记本的硬盘空间吃紧. 快双十一了,本 ...

  5. Ubuntu Gnome 14.04.2 lts 折腾笔记

    unity感觉不爽,于是来折腾gnome3 = = 首先去官网下载ubuntu gnome 14.04.2 lts的包(种子:http://cdimage.ubuntu.com/ubuntu-gnom ...

  6. 【转】Kali Linux 新手折腾笔记

    原作者:http://defcon.cn/1618.html 最近在折腾Kali Linux 顺便做一简单整理,至于安装就不再多扯了,估计会出现的问题上一篇文章<VMware虚拟机安装Kali ...

  7. Kali Linux 新手折腾笔记

    http://defcon.cn/1618.html 2014年09月29日 渗透测试 暂无评论 阅读 55,052 次   最近在折腾Kali Linux 顺便做一简单整理,至于安装就不再多扯了,估 ...

  8. Kivy折腾笔记

    最近想用Python开发APP,选择kivy,记录过程 首先是源码安装,各种蛋疼的报错放弃了.cython高版本有问题. python3 -m pip install cython==0.23 pyt ...

  9. RHEL6 Systemtap 安装笔记

    以 RHEL6u3 为例 1  Systemtap 安装 yum install systemtap 跟systemtap有关的有6,7个,全装上,别偷懒 就用yum安装,别傻傻的去下rpm包,吃力不 ...

随机推荐

  1. DSO、CUBE区别(覆盖、合计)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. python的ujson与simplejson

    一.使用了simplejson import simplejson as json 二.使用ujson import ujson as json 参考链接:下载win下的:ujson

  3. ThreadLocal的分享

    最开始的时候打算自己写点什么,但是看了这些博客以后感觉真的不知道应该写点什么了,全部都是好文章,只做分享了,链接如下: 1.http://www.cnblogs.com/dolphin0520/p/3 ...

  4. unittest框架介绍

    1.test fixture(测试框架) 测试准备前要做的工作和测试执行完成后要做的工作,例如测试前需要把数据初始化,测试完成后需要把测试环境中需要关的东西都关掉.主要包括setUp()和tearDo ...

  5. Python内置的字符串处理函数整理

    Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 ...

  6. SiteFactory简单配制

    进入后台管理: 指向节点,有点节点ID,这个节点ID就是siteFactory根据规则能生成的页面,页面更新网址: http://www.elexcon.com/Category_节点ID/Index ...

  7. 6/13 Sprint2 看板和燃尽图

    部分页面展示

  8. iframe 内显示的网页 只显示改网页的某一部分!

    使用iframe调用指定网页的特定位置(显示目标网页某区域的我想要的内容) 有些时候我们并不需要显示iframe标签属性src指定的目标网页的所有内容,往往只需要显示某一特定区域.现有两种实现方法提供 ...

  9. 在POM 4中,<dependency>中还引入了<scope>可以使用5个值

     在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: * compile,缺省值,适用于所有 ...

  10. HTML5 WebSocket 实时推送信息测试demo

    测试一下HTML5的websocket功能,实现了客户端→服务器实时推送信息到客户端,包括推送图片: websocket实现MessageInbound类 onTextMessage()/onBina ...