记一次go耗时操作的查询实战。

背景:

处于php to go的过程,有些接口迁移到go服务里面去了。目前我们的流量转发是在应用层做的转发,这样其实是不好的。回归正传,最近上了个接口,功能很简单,取一组id,过滤,组成count个再返回,count是前端传来的,可以理解为一页的个数。但是有个特别的对方,就是过滤这个条件,会导致数据需要多次循环去凑够这个count,开发中就意料到这种很危险了,没想到果然在意料中,上了线后还是出现问题了。

现象:

在app上调用这个接口时,发现数据没有更新。抓包请求发现接口报400,然后去查询了php的日志,发现php调用这个接口报了读写超时的错误。检查了php配置文件后,发现超时时间设置的是1.5秒,已经很高了,由此断定了这个接口有问题。但是由于对自己的自信,觉得没什么问题,然后就直接调go服务的接口,去复现,证明自己没有问题。打脸的是复现了,这时候还是觉得调别人的东西慢,但是看了半天代码,也没发现有什么问题。

排查:

开始尝试使用pprof查看代码。之前写过一篇pprof的基础篇,链接如下:

https://blog.csdn.net/qq_28119741/article/details/109711641

已经讲的很清楚了,说几个问题

1.可以远程执行go tool pprof 去采集对应的远程服务

go tool pprof 'http://url/debug/pprof/profile'

2.可以不在远程服务器上安装graphviz,在本机上安装,然后在远程服务器上开启go tool pprof服务端,即可以在本机浏览器上查看。

go tool pprof -http=0.0.0.0:8090  pprof.server.samples.cpu.001.pb.gz

本次我是在测试机上采集的远程服务,然后在测试机上安装的graphviz,然后开启的pprof服务端,然后在本机上浏览器远程访问测试机。(主要是本机上安装不上graphviz)

下面直接展示采样数据

list 函数名后,产生如下数据

可以看出来,确实死循环了。知道问题在哪了,就认命吧,分析一下代码。在list 函数名时,遇到一个问题,就是找源码的路径不对,这个我查了下,大概会在执行go tool pprof命令的路径找,所以可以把包拷到项目里执行go tool pprof。在执行list  func 就没这个问题了。

主要是测试环境不好复现,并发的情况下会出现这个问题。所以说不要以为测试环境不能复现,就觉得没有问题,毕竟和线上总是会有些差异的。

结论:问题原因找到了,还是自己写的有问题,同时代码边界也没考虑全(其实这个也不算根本原因吧),吃一堑长一智吧。要考虑周全。

go pprof初实操体验相关推荐

  1. 理论+实操:docker入门初体验,申请阿里镜像加速器

    文章目录 一:Docker概述 1.1 docker概念: 1.2 docker设计的目标: 1.3 docker的组成: 1.4 docker的使用场景 1.5 docker版本: 二: docke ...

  2. 产品必备技能(二):尼尔森原则-产品体验框架,实操使用以尼尔森十大可用性原则体验产品

    文章目录 产品体验目标 尼尔森原则-体验框架 体验原则1:状态可见原则 体验原则2:环境贴切原则 体验原则3:用户可控原则 体验原则4:一致性原则 体验原则5:错误预防原则 体验原则6:识别好过记忆 ...

  3. cam350怎么看顶层_厉害的人是怎么分析问题的?(实操干货)

    "经常做一个方案,几十页PPT还没把问题讲清楚,老板一个问题就貌似发现了关键,这到底是一种怎么样的思维方式?" 我在职场这么多年,也遇到过很多次这样的问题. 在我初入职场时,经领导 ...

  4. 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年3月刊

    本文为大家整理了墨天轮数据社区2023年3月发布的优质技术文章,主题涵盖Oracle.MySQL.PostgreSQL等数据库的基础安装配置操作.故障处理.性能优化等日常实践操作,以及概念梳理.常用脚 ...

  5. 【Social listening实操】作为一个合格的“增长黑客”,你还得重视外部数据的分析!

    本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,作者引出了"外部数据"这一概 ...

  6. MetagenoNets:在线宏基因组网络分析实操教程

    宏基因组研究中网络分析已经十分普及,但却缺少整合的分析方法,限制了广大同行的使用. 关于网络分析的基本步骤,和现在工具的比较,详见原文解读 - NAR:宏基因组网络分析工具MetagenoNets 本 ...

  7. 作为产品经理,你需要了解的基本算法知识和实操

    https://blog.csdn.net/Amydom/article/details/78404659 今日头条的走红带动了"个性化推荐"的概念,自此之后,内容型的产品,个性化 ...

  8. 网络分析系统_MetagenoNets:在线宏基因组网络分析实操教程

    宏基因组研究中网络分析已经十分普及,但却缺少整合的分析方法,限制了广大同行的使用. 关于网络分析的基本步骤,和现在工具的比较,详见原文解读 - NAR:宏基因组网络分析工具MetagenoNets 本 ...

  9. ansys怎么合并体_亚马逊合并拆分变体实操(干货)-合并

    合并和拆分变体是亚马逊运营必备的一项操作,通过合并和拆分变体,能够更好的调整布局,达到一些运营的目的.下面来具体介绍一下如何合并和拆分变体. 一.什么是亚马逊变体? 亚马逊变体(又称为父/子关系)是彼 ...

最新文章

  1. Python标准库queue模块原理浅析
  2. 支付签约_与支付巨头万事达卡签约,金融服务集团FlexiGroup股价领涨
  3. 从权限管理看互联网产品的盈利方式
  4. 【转】Java删除文件夹和文件
  5. 解决cocos2dx调用removeFromParent后报错问题
  6. some interview question
  7. aptio2018设置u盘启动_华硕笔记本重装系统时,BIOS内无法设置u盘启动怎么办?
  8. oracle+导入导出教程,oracle导入导出整理(一)
  9. 软件工程—需求分析阶段
  10. 固体火箭发动机三维装药逆向内弹道计算
  11. vue点击按钮跳转路由
  12. python判断是否为英文_Python判断字符串是否纯英文(纯ASCII码字符)
  13. CSDN中用Markdown如何给文本加下划线(可延长下划线)
  14. java 泛型参数具体类型获取、泛型返回具体类型获取
  15. 如何立即尝试macOS High Sierra Beta
  16. MMFNet: A Multi-modality MRI Fusion Network for Segmentation of Nasopharyngeal Carcinoma
  17. 中国软件10大最具影响力人物
  18. 深圳软件测试培训:移动测试ExpandableListView
  19. 贵阳c语言学习,贵阳市c语言编程
  20. HDU 3364 Lanterns 高斯消元(水 异或方程

热门文章

  1. 大数据好找工作吗?企业在招什么样的大数据工程师?
  2. Photoshop制作倒影的两种方法
  3. 倒计时4天!2018高考“爆款”新专业发布,大数据、机器人等成“网红”
  4. 洛谷P1096 Hanoi 双塔问题(数论,高精度)
  5. 如何申请服务器证书,申请域名的步骤有哪些?如何申请安装ssl服务器证书?
  6. 指向const的指针和const指针
  7. 【译】 我从高薪科技工作中学到的惨痛教训#IT人的升职加薪tips#
  8. Java开发环境的安装与卸载
  9. 【原创】也来评评微软收购诺基亚
  10. 京东官宣涨两个月工资;美团优选取消 996, 开启双休!