GithubHelp home page GithubHelp logo

isgasho / pprofplus Goto Github PK

View Code? Open in Web Editor NEW

This project forked from q191201771/nazaext

0.0 1.0 0.0 25 KB

🍀 pprofplus用于采集Go进程的各项内存指标(包含Go runtime内存管理相关的,以及RSS等),并按时间维度绘制成折线图,可以通过网页实时查看。

License: MIT License

Go 94.00% Shell 6.00%

pprofplus's Introduction

目录

  • 简介
  • 效果图
  • 接入方法
  • 实现细节
  • 第三方库依赖
  • TODO
  • 其他

简介

pprofplus用于采集Go进程的各项内存指标(包含Go runtime内存管理相关的,以及RSS等),并按时间维度绘制成折线图,可以通过网页实时查看。配合原有Go pprof工具,可以快速监控和分析Go进程的内存使用情况。

效果图

效果图

分析案例:

接入方法

1. 被监控的进程中添加以下代码:

import "github.com/q191201771/pprofplus/pkg/pprofplus"

pprofplus.Start()

使用示例,以及更多个性化配置的方法见: example/example.go

支持的配置项见:pprofplus.go

2. 启动dashboard程序(web展示用,与被监控的进程在一台机器):

./dashboard

更多的定制化配置见: ./dashboard -h

我在另一个repo中提交了编译好的二进制文件可供直接使用:https://github.com/q191201771/pprofplus.bin

3. 浏览器访问网页查看图表:

http://<yourhostname>:10001/pprofplus

为什么要单独搞一个dashboard展示程序,而不直接放在被监控的进程中展示?

因为独立开可以保证,展示部分使用的内存,不会增加被监控进程的内存使用。

实现细节

说起来十分简单,接入宿主程序的部分,会周期性获取自身进程的各项指标。

获取到的数据会写入到本地文件中。

dashboard读取本地文件中的数据,将数据以图表的方式通过http页面返回给用户查看。

第三方库依赖:

pprofplus部分

  • 获取进程虚拟内存和常驻内存: github.com/shirou/gopsutil/process

dashboard部分

  • http图表: github.com/go-echarts/go-echarts/charts

编译dashboard注意事项

如果你不需要对代码进行二次开发,建议直接从 https://github.com/q191201771/pprofplus.bin 下载编译好的dashboard直接使用。

如果自行编译dashboard,并且想要发布到非开发机器上使用。需在编译前执行以下操作(一次即可):

// Linux/MacOS
$ cd $GOPATH/src/github.com/chenjiandongx/go-echarts
$ ./doPackr.sh

// Windows
$ cd %GOPATH%\src\github.com\chenjiandongx\go-echarts
$ doPackr.bat

这是因为第三方库go-echarts说白了是对前端echarts库的封装,它在运行时需要用到echarts的一些静态文件。
在非开发机器上由于没有这些静态文件,会导致运行出错。
go-echarts的解决方案是通过上面的命令,将这些静态文件打包成了go文件,这样就直接编译进宿主程序中了。
这其实也是我把dashboard独立出来的原因之一,不想让宿主程序依赖这个库。。

TODO

整体

  • go mod 支持
  • pprofplus和pprofplus.bin的版本管理,包括数据的版本

采集端

  • 增加打开、关闭接口,可以在服务运行期间修改是否采集
  • 目前单个进程的dump文件没有切割

展示端dashboard

  • url中增加参数
    • 开始时间、结束时间,或者距离最近的时间段
  • 目前只读取固定目录下serviceName匹配的最新的那个文件,可支持指定特定文件,特定pid
  • dashboard中的一部分代码从app移入pkg中,业务方也可选择直接在宿主进程中直接接入dashboard

长远计划

结合实际使用场景,增加更多的指标,并且可能还会添加内存以外的指标。绘制多张图表。但是会尽力小而美。

其他

欢迎提issues讨论。

本项目只在macos和linux下做过测试,windows的表现未知也不做保证。。

pprofplus's People

Contributors

q191201771 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.