在这货上花费了不少时间,都是受了@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. [问题2014A10] 复旦高等代数 I(14级)每周一题(第十二教学周)

    [问题2014A10]  设 \(A\) 为 \(n\) 阶实方阵满足 \(AA'=I_n\) (即 \(A\) 为 \(n\) 阶正交阵), 证明: \[\mathrm{rank}(I_n-A)=\ ...

  2. 使用phantomjs操作DOM并对页面进行截图需要注意的几个问题

    phantomjs是一个无界面浏览器,可用于网页截图和前端自动化测试,基于webkit内核(也就是chrome使用的内核),并使用js编写业务脚本来请求.浏览和操作页面.最近前端监控需要用到phant ...

  3. signtool

    https://msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx C:\Users\Administrator\.nuget\packa ...

  4. [转] 浅谈Linux系统的启动流程

    原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的S ...

  5. PHP 可变长度参数列表

    In PHP 5.6 and later, argument lists may include the ... token to denote that the function accepts a ...

  6. 下载SRA文件

    sratoolkit.2.6.2-centos_linux64/bin/prefetch  下载SRA文件 fastq-dump    --split-3    SRR2923014.sra    转 ...

  7. python打怪之路【第一篇】:99乘法表

    需求:实现99乘法表 代码: #!/usr/bin/env python # -*- coding:utf-8 -*- #author chenjing for i in range(10): for ...

  8. python的异常小结与assert

    异常的处理 一. 二. -----------------2016-4-20 18:04:06--

  9. VMWARE + CENTOS在windows下配置cocos2d-x android开发环境

    VMWARE + CENTOS在windows配置cocos2d-x android开发环境 之前使用cygwin在windows开发android,后来使用了c++11特性,在cygwin中更新工具 ...

  10. spring-mvc.xml中的配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...