跳到主要内容

LEP 性能剖析器

简介

LEP 的全称是 Linux Easy Profiling(Linux 易用剖析器),核心特点在于 Easy(简单),主要功能在乎 Profiling(剖析)。

LEP 的设计目标是:便利 Linux 的程序员,以最快最直接的方式,定位到系统里面一些 bug 的源头,以及一些性能瓶颈的原因。

LEP 工作原理

Linux 有很多现成的调试和剖析工具,比如 top、vmstat、iotop、perf、valgrind、powertop、free、pmap、slabtop 等,这些工具通过读取 /proc、/sys,分析硬件的 PMU(Performance Monitor Unit)数据、监控内存的申请释放以及读写等手段,获知单一进程或者系统的运行状态,以及进行故障分析。LEP 除了在功能上是这些工具的超集以外,在可视、交互、深度分析、数据比对、场景贴合等角度对这些工具进行进一步的增强。

LEP 主要分为两部分

LEP 技术架构

LEP 实际上是一个 all-in-one 的调试工具,它的软件架构如下图所示。与现有其他工具不同,被监控的服务器或开发板只需要部署 LEPD(LEP Daemon),该程序完全用 C 语言实现,只需要完成基本的数据采集功能,因此它能最小化对被监控系统本身的影响。数据的分析和处理,都移动到了 Web 服务 LEPV(LEP Viewer)和浏览器一端。

LEPD 采集被监控目标的运行数据,这些数据被 Web 服务端 LEPV 通过 JSONRPC 请求获得,LEPV 以 Python 对从 LEPD 获得的原始数据进行有针对性的加工,再发送给浏览器,浏览器把经过 LEPV 加工的数据,以各种丰富的图形进行显示。

这种架构的好处,LEPD 和 LEPV 分离,使得 LEPD 易于部署在资源贫乏的嵌入式设备上,而 LEPV 一般则运行在比较强壮的 x86 PC 上。当然,LEPD 和 LEPV 虽然分离,但在实际部署的时候,也可以部署于同一个 x86 PC,因此也可以用于非网络环境下的单机自身监控。

LEP 数据流转

LEP 的数据流程是清晰、简单的。例如,运行于被监控系统的 LEPD 读取 /proc/loadavg 数据,这些数据没有格式,是原始的,类似 "2.58 2.25 2.31 ...",LEPV 通过 JSONRPC 收到这些数据后,将其进行语义加工为 last1、last5、last15 这种过去 1 分钟、5 分钟、15 分钟系统平均负载,浏览器获取这些数据后,绘制为 3 条生动活泼的动感曲线。

安装

部署 LEPD

获取最新 LEPD 代码

git clone https://github.com/linuxep/lepd

编译

  • 对于 x86 平台

    apt-get install libev-dev 
    apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`
    apt-get install libncurses5-dev
    make ARCH=x86
  • 对于 ARM 平台

    apt-get install gcc-arm-linux-gnueabi
    make ARCH=arm

运行

sudo ./lepd &

部署 LEPV

获取最新 LEPV 代码

git clone https://github.com/linuxep/lepv.git

运行脚本构建 Docker 镜像

./buildDockerImage.sh

启动 Docker 容器

./runDockerContainer.sh

现在,你可以在浏览器输入 http://localhost:8889 查看监控页面。