web项目中golang性能监控解析

目录
  • 性能监控
    • 一、web项目(如gin中)
    • 二、单个的go文件如果查看gc

性能监控

一、web项目(如gin中)

1.使用ginpprof

import "github.com/DeanThompson/ginpprof"
router := gin.Default()
ginpprof.Wrap(router)

2.使用pprof

只需要在main.go中引入:_ “net/http/pprof”

访问:127.0.0.1:8080/debug/pprof

/debug/pprof/profile:访问这个链接会自动进行 CPU profiling,持续 30s,并生成一个文件供下载
/debug/pprof/block:Goroutine阻塞事件的记录。默认每发生一次阻塞事件时取样一次。
/debug/pprof/goroutines:活跃Goroutine的信息的记录。仅在获取时取样一次。
/debug/pprof/heap: 堆内存分配情况的记录。默认每分配512K字节时取样一次。
/debug/pprof/mutex: 查看争用互斥锁的持有者。
/debug/pprof/threadcreate: 系统线程创建情况的记录。 仅在获取时取样一次。

二、单个的go文件如果查看gc

1.设置环境变量

set GODEBUG=gctrace=1

2.术语:

mark:标记阶段。

markTermination:标记结束阶段。

mutator assist:辅助 GC,是指在 GC 过程中 mutator 线程会并发运行,而 mutator assist 机制会协助 GC 做一部分的工作。

heaplive:在 Go 的内存管理中,span 是内存页的基本单元,每页大小为 8kb,同时 Go 会根据对象的大小不同而分配不同页数的 span,而 heaplive 就代表着所有 span 的总大小。

dedicated / fractional / idle:在标记阶段会分为三种不同的 mark worker 模式,分别是 dedicated、fractional 和 idle,它们代表着不同的专注程度,其中 dedicated 模式最专注,是完整的 GC 回收行为,fractional 只会干部分的 GC 行为,idle 最轻松

P:指处理器

3.含义

gc 4 @0.254s 5%: 2.0+1.0+9.9 ms clock, 16+0/2.0/2.0+79 ms cpu, 4->4->0 MB, 5 MB goal, 8 P

  • gc 4 :GC 执行次数的编号,每次叠加。第4次 GC。
  • @0.254s:自程序启动后到当前的具体秒数。:当前是程序启动后的 0.254s。
  • 5%:自程序启动以来在GC中花费的时间百分比。程序启动后到现在共花费 5% 的时间在 GC 上
  • 2.0+1.0+9.9ms clock:GC 的标记工作共使用的 CPU 时间占总 CPU 时间的百分比。
  • 2.0表示单个 P 在 mark 阶段的 STW 时间。(stop the world)
  • 1.0表示所有 P 的 mark concurrent(并发标记)所使用的时间。
  • 9.9表示单个 P 的 markTermination 阶段的 STW 时间
  • 16+0/2.0/2.0+79 ms cpu
  • 16:表示整个进程在 mark 阶段 STW 停顿的时间。
  • 0/2.0/2.0:0表示 mutator assist 占用的时间,2.0表示 dedicated + fractional 占用的时间,2.0 表示 idle 占用的时间。
  • 4->4->0 MB
  • 4表示开始 mark 阶段前的 heap_live 大小。
  • 4表示开始 markTermination 阶段前的 heap_live 大小。
  • 1表示被标记对象的大小。
  • 5 MB goal:表示下一次触发 GC 回收的阈值是 5 MB。
  • 8 P:本次 GC 一共涉及多少个 P

查看电脑的配置:

  • 运行-- dxdiag
  • 设备管理器

scvg4: inuse: 111, idle: 54, sys: 187, released: 0, consumed: 198 (MB)

  • inuse: 111,:使用多少M内存
  • idle: 54,:0 剩下要清除的内存
  • sys: 187,: 系统映射的内存
  • released: 0,: 释放的系统内存
  • consumed: 198: 申请的系统内存

以上就是web项目中golang性能监控解析的详细内容,更多关于web中golang性能监控的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解prometheus监控golang服务实践记录

    一.prometheus基本原理介绍 prometheus是基于metric采样的监控,可以自定义监控指标,如:服务每秒请求数.请求失败数.请求执行时间等,每经过一个时间间隔,数据都会从运行的服务中流出,存储到一个时间序列数据库中,之后可通过PromQL语法查询. 主要特点: 多维数据模型,时间序列数据通过metric名以key.value的形式标识: 使用PromQL语法灵活地查询数据: 不需要依赖分布式存储,各服务器节点是独立自治的: 时间序列的收集,通过 HTTP 调用,基于pull 模型

  • Golang标准库和外部库的性能比较

    目录 1.路由 2.JSON 序列化和反序列化 3.是否使用ORM框架 4.总结 前言: 我已经在生产中使用 Go 一段时间了,因为它的构建规模较小,并且由 goroutines 提供的并发性能以及直接在机器上运行构建的能力,所以我非常喜欢它的快速和可靠. 由于标准包的速度非常快,您可以在不使用任何第三方库或框架的情况下构建生产就绪的微服务.这并不是说 Go 中没有提供更多灵活性或速度的框架,只是它们不那么受欢迎. 官方通常告诉你坚持使用标准库.具有讽刺意味的是, golang 框架 的顶级 G

  • golang搭建静态web服务器的实现方法

    我胡汉三又回来啦.好久没发文了,为保持平台上的活跃度,我今天就分享下个刚学到的知识,使用golang搭建静态web服务器,亲测可用,附代码! 使用过golang语言的程序猿都应该知道,在使用golang开发的时候,我们是不需要诸如iis,apache,nginx,kangle等服务器支持的. 为什么呢? 原因是,golang的net/http包中已经提供了HTTP的客户端与服务端实现方案. 网上言论都说golang不适合做web开发,相对php.java..net.nodejs等各类后端语言来说

  • golang实现对docker容器心跳监控功能

    自己写的go程序放到线上本来编译成二进制扔上去就行啦,但是怀着一颗docker的心,最终还是将它放到docker容器中运行起来了,运行起来也ok,一个最小容器64M,统一管理起来也方便,但是毕竟是个线上长驻内存的服务程序,万一跑挂了怎么办,如何才能监控它,直接上go代码,网上代码,略微做了下注释,但实测过,真实有效: package main import ( "encoding/json" "errors" "flag" "fmt&q

  • 解决Golang在Web开发时前端莫名出现的空白换行

    问题: 在使用Golang做Web开发时,有时候渲染出来的模板在前台显示时会出现一些奇怪的空白换行,具体特征就是查看css样式表并没有相关定义的空白部分. 分析: 查看出现问题页面的网页源代码,复制空白换行部分转码为Unicode编码,发现其中包含了\u2028这样的字符[图一].  [图一] 另外,直接在浏览器检查里边的html选择Edit as html,也可发现在空白处存在小红点,鼠标移上会直接显示该字符是\u2028[图二].查阅资料发现,这样的换行符在JavaScript中并不支持.

  • 深入理解Golang的单元测试和性能测试

    前言 大家做开发的应该都知道,在开发程序中很重要的一点是测试,我们如何保证代码的质量,如何保证每个函数是可运行,运行结果是正确的,又如何保证写出来的代码性能是好的,我们知道单元测试的重点在于发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让线上的程序能够在高并发的情况下还能保持稳定.本小节将带着这一连串的问题来讲解Go语言中如何来实现单元测试和性能测试. go语言中自带有一个轻量级的测试框架testing和自带的go test命令来

  • web项目中golang性能监控解析

    目录 性能监控 一.web项目(如gin中) 二.单个的go文件如果查看gc 性能监控 一.web项目(如gin中) 1.使用ginpprof import "github.com/DeanThompson/ginpprof" router := gin.Default() ginpprof.Wrap(router) 2.使用pprof 只需要在main.go中引入:_ “net/http/pprof” 访问:127.0.0.1:8080/debug/pprof /debug/ppro

  • Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接如一个硬件设备,通过tcp通信,获取设备传上来的数据,并对数据做回应. 先看一下web的监听代码: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class

  • linux下用renameTo方法修改java web项目中文件夹名称的实例

    经测试,在Linux环境中安装tomcat,然后启动其中的项目,在项目中使用java.io.File.renameTo(File dest)方法可行. 之前在本地运行代码可以修改,然后传到Linux服务器上一直无法实现功能,自己一直在捣鼓,以为是window环境和Linux环境不同的原因导致,后面发现在项目中使用renameTo方法修改文件夹名称不行是因为之前改了java web项目中的js,在js中传入值到后台,后台根据值来修改文件夹名称.由于没清除缓存导致js中的代码没有刷新,所以一直出现错

  • Java Web项目中连接Access数据库的配置方法

    老师决定期末考试采用access数据库实现增删改查,我认为现在的我已经没有问题了,但是以前都是在JSP页面中连接access数据库,无论是以下的那种方式都进行了连接的练习,但是现在我想让我的项目中的访问access数据库的java代码,封装到DAO中,在DAO中连接数据库,没有和Servlet API有任何的关系.对于大多数人都会优先选择使用ODBC数据源的方式或者是使用绝对路径的方式连接access数据库,但是我个人认为,这样做不太好,如果采用这样的方式,项目做好后,放到他人的服务器上是无法运

  • 利用java读取web项目中json文件为map集合方法示例

    前言 本文主要介绍了关于java读取web项目中json文件为map集合的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实例介绍 假设当前项目web目录(/resource/test.json)下有一json文件如下: [ { "path": "content_111", "title": "文章1", "imgUrl": "../../../libs/img/ppt

  • 深入浅析java web log4j 配置及在web项目中配置Log4j的技巧

    在上篇文章给大家介绍了Java log4j详细教程,本文给大家介绍java web log4j配置及web项目中配置log4j的技巧.具体详情请看下文吧. 首先给大家提供log4j.jar下载:http://logging.apache.org/log4j/1.2/download.html 一.java web项目使用log4j 1.在web.xml文件中添加 <!-- 配置log4j --> <context-param> <param-name>webAppRoo

  • 在Web项目中引入Jquery插件报错的完美解决方案(图解)

    在学习Jquery插件的时候,遇到一个问题就是新建web工程后在WebRoot下引入Jquery插件的时候报错,不知道为什么好纠结,但是项目能正常运行,后来找到解决方案,在这里给大家分享一下. 解决方案如下所示: 1.在MyEclipse软件中找打-----windows----preferences,会出现一个如下图所示的界面: 2.在检索框输入一个validation----单击该validation节点,将对于JavaScript脚本的验证取消勾,然后点击Apply,一直yes就行. 3.

  • 在Java Web项目中添加定时任务的方法

    在Java Web程序中加入定时任务,这里介绍两种方式:1.使用监听器注入:2.使用Spring注解@Scheduled注入. 推荐使用第二种形式. 一.使用监听器注入 ①:创建监听器类: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class TimerDataTaskListener implements ServletContextListener

  • 解决idea web项目中out目录更新不同步问题

    今天碰到个很恶心的东西..就是明明导入了相应的依赖文件(css,html,js等文件),路径也正确..就是访问不了....弄了一个多小时... 原因在哪?看了一下web项目的生成位置,发现编译之后会重新生成一个out目录,更新不同步.... 解决方法:build->Build Artifact->clean,然后再build->build Artifact->rebuild...问题解决.. 如果使用的是maven构建的web项目,就简单很多直接cmd定位到项目根节点,有pom.x

  • Java web项目中的强制登录功能实现代码

    为了避免直接进入项目中存在的页面,使用filter过滤器 新建一个类loginFilter: package com.tjcu.filter; import com.tjcu.entity.User; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSe

随机推荐