使用expvar进行监控

  • 前言:

    • 包expvar为公共变量提供了一个标准化的接口。如服务器中的操作计数器。
    • 它以 JSON 格式通过 /debug/vars 接口以 HTTP 的方式公开这些公共变量。
    • 设置或修改这些公共变量的操作是原子的。
    • 除了程序使用的公共变量,还注册了
      • cmdline:这个变量就是启动命令
      • memstats: 这个变量里面存放着内存的使用情况,
    •  expvar 的使用可参考: https://orangetux.nl/post/expvar_in_action/

    • 以下具体介绍memstats,存放在runtime.mstatss.go文件的 mstats struct
  • memstats:(单位为字节)红色为重点

    • Alloc 堆空间分配的字节数
    • TotalAlloc 从服务开始运行至今分配器为分配的堆空间总和
    • Sys 进程从系统获得的内存空间,虚拟地址空间
    • Lookups 被runtime监视的指针数
    • Mallocs 服务 malloc的次数
    • Frees 服务 回收的heap objects
    • HeapAlloc 进程 堆内存分配使用的空间,通常是用户new出来的堆对象,包含未被gc掉的
    • HeapSys  进程从系统获得的堆内存,因为golang底层使用TCmalloc机制,会缓存一部分堆内存,虚拟地址空间。
    • HeapIdle  回收了的堆内存
    • HeapInuse  正在使用的堆内存
    • HeapReleased 返回给OS的堆内存
    • HeapObjects  堆内存块申请的量
    • StackInuse  正在使用的栈
    • StackSys  系统分配的作为运行栈的内存
    • MSpanInuse uint64 用于测试用的结构体使用的字节数, 不受GC控制
    • MSpanSys uint64 系统为测试用的结构体分配的字节数
    • MCacheInuse mcache 结构体申请的字节数(不会被视为垃圾回收)
    • MCacheSys 操作系统申请的堆空间用于mcache的字节数
    • BuckHashSys 用于剖析桶散列表的堆空间
    • GCSys 垃圾回收标记元信息使用的内存
    • OtherSys golang系统架构占用的额外空间
    • NextGC 垃圾回收器检视的内存大小
    • LastGC 垃圾回收器最后一次执行时间
    • PauseTotalNs 圾回收或者其他信息收集导致服务暂停的次数
    • PauseNs  记录每次gc暂停的时间(纳秒),最多记录256个最新记录。
    • PauseEnd [256]uint64 一个循环队列,记录最近垃圾回收系统中断的时间开始点
    • NumGC 记录gc发生的次数。
    • NumForcedGC uint32 服务调用runtime.GC()强制使用垃圾回收的次数
    • GCCPUFraction float64 垃圾回收占用服务CPU工作的时间总和。如果有100个goroutine,垃圾回收的时间为1S,那么久占用了100S
    • EnableGC bool 是否启用GC
    • DebugGC bool 是否启动DebugGC
    • BySize [61]struct{} 内存分配器使用情况
  • 工具集成

posted @ 2019-08-22 20:29  Zereker  阅读(985)  评论(0编辑  收藏  举报