在这货上花费了不少时间,都是受了@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. SQL MD5加密

    ) 加密结果:

  2. Java开发中经典的小实例-(字符串倒序输出)

    public class Test12 {    public static void main(String[] args) {        // TODO Auto-generated meth ...

  3. 逻辑操作符---Lua: and,or,not 对比 C++:&&,||,!

    lua中有三个逻辑操作符:and,or,not(逻辑与,逻辑或,逻辑非),同样c++也有类似的三个逻辑操作符:&&,||,!(逻辑与,逻辑或,逻辑非).他们的运算对象就是真和假.lua ...

  4. 学习笔记Jmail收发邮件

    一.利用Jmail发送邮件  1/// <summary> 2/// 利用Jmail发送邮件 3/// </summary> 4private void SendMailByJ ...

  5. Codeforces Round #371 (Div. 2) C. Sonya and Queries

    题目链接 分析:01trie树,很容易就看出来了,也没什么好说的.WA了一发是因为没有看见如果数字位数大于01序列的时候01序列也要补全0.我没有晚上爬起来打,白天发现过的人极多. /******** ...

  6. JS只弹出一个居中弹出窗口

    var newWindow;//定义一个窗口,有利于窗口间的通讯function makeNewWindow(url) {   if (!newWindow || newWindow.closed) ...

  7. JSON.parse()和JSON.stringify()的区别

    1. parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age": ...

  8. 一些iOS心得

    ARC 1,arc是什么? automatic referece counting   mrc mannualiOS5 之后出来的技术// 2,arc的原理是什么?//   在程序编译的时候,系统帮我 ...

  9. My Game --线段数据

    在背景中用到了一个自定义的类 VectArr : class VectArr { public: VectArr( const Bezier & bz, int conut = 30 ) : ...

  10. mac 下安装jmeter

    1.http://jmeter.apache.org/download_jmeter.cgi 下载jmeter 2.解压包 3.进入解压目录/bin/ 4.sh jmeter