大家好,我是蓝胖子,关于性能分析的视频和文章我也大大小小出了有一二十篇了,算是已经有了一个系列,之前的代码已经上传到 github.com/HobbyBear/performance-analyze ,接下来这段时间我将在之前内容的基础上,结合自己在公司生产上构建监控系统的经验,详细的展示如何对线上服务进行监控,内容涉及到的指标设计,软件配置,监控方案等等你都可以拿来直接复刻到你的项目里,这是一
大家好,我是蓝胖子,在golang中可以使用go pprof的工具对golang程序进行性能分析,其中通过go trace 命令生成的trace view视图对于我们分析系统延迟十分有帮助,鉴于当前对trace view视图的介绍还是很少,在粗略的看过trace统计原理后,我将对这部分做比较详细的介绍。 trace view 视图简介 在go代码里,我们可以通过trace.Start和trac
大家好,我是蓝胖子,关于性能分析的视频和文章我也大大小小出了有一二十篇了,算是已经有了一个系列,之前的代码已经上传到github.com/HobbyBear/performance-analyze, 接下来这段时间我将在之前内容的基础上,结合自己在公司生产上构建监控系统的经验,详细的展示如何对线上服务进行监控,内容涉及到的指标设计,软件配置,监控方案等等你都可以拿来直接复刻到你的项目里,这是一套非
ringbuffer因为它能复用缓冲空间,通常用于网络通信连接的读写,虽然市面上已经有了go写的诸多版本的ringbuffer组件,虽然诸多版本,实现ringbuffer的核心逻辑却是不变的。但发现其内部提供的方法并不能满足我当下的需求,所以还是自己造一个吧。 源码已经上传到github https://github.com/HobbyBear/ringbuffer 需求分析 我在基于epo
iptables的表和链 iptables可以设置不同的规则,并且它把规则按用途进行分类,分成了4个表,分别是 表 用途 raw 表 用于去除数据包上的连接追踪机制(Connection Tracking)。 mangle 表 用于修改数据包的报文头信息,比如服务类型(Type Of Service,ToS)、生存周期(Time to Live,TTL)。 nat 表 用于修
大家好,我是蓝胖子,今天我们来分析下网络连接中经常出现的RST信号,连接中出现RST信号意味着这条链接将会断开,来看下什么时候会触发RST信号,这在分析连接断开的原因时十分有帮助。 在开始分析触发RST的场景之前,我们先来准备下需要的客户端和服务端代码,以方便我们进行测试。 服务端代码目前先是在8080端口监听,然后将接收到的消息打印出来。 func main() { listen, e
请求慢的原因很多,当出现前端反应接口慢时,而通过后端日志查看请求处理时间并不慢时,往往会手足无措,当面对网络问题出现手足无措时,这就是在提醒你该抓包分析了,那么一般如何根据抓包文件去分析慢请求呢,今天我们就来看看。 抓包文件分析 准备用我在测试环境抓到的包去进行分析,首先执行抓包命令。 sudo tcpdump -i lo port 6310 -w http.pcap -w 命令能让我在
为什么mysql存储数据要用b+tree去做,为什么时序数据库又是用lsm去做索引,为什么es又是用倒排索引,各种索引之间有什么不同?我们又该在什么时候选择什么索引呢?我将一一揭晓这些答案。
??性能优化,服务监控方面的知识往往涉及量广且比较零散,希望将这部分知识整理成册,愿以后性能排查不再抓瞎。
我又和redis超时杠上了 服务监控系列文章 服务监控系列视频 背景 经过上次redis超时排查,并联系云服务商解决之后,redis超时的现象好了一阵子,但是最近又有超时现象报出,但与上次不同的是,这次超时的现象发生在业务高峰期,在简单看过服务器的各项指标以后,发现只有cpu的使用率在高峰期略高,我们是8核cpu,高峰期能达到90%的使用率,其余指标都相对正常。 但究竟是不是cpu占比高的问题导致
(5)500行代码手写docker-实现硬件资源限制cgroups 本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。 本章的源码已经上传到github,地址如下: https://github.com/HobbyBear/tinydocker/tre
https 实践篇 基于https原理篇,这篇文章将会用openssl 工具以及golang程序来演示下https加解密过程。 依据前文已经知道 声明一个https服务需要为其颁发证书已经它的私钥。 生成服务器私钥 openssl genrsa -out server.key 2048 生成x509证书 openssl req -new -x509 -key server.key -out s
https 原理篇 经典三问,是什么,为什么,怎么做? 是什么 是一种http的安全协议,在tcp ip网络模型里,http应用层是在tcp 传输层之上的,https协议规定了在tcp传输层之上还有一层tls/ssl层,这一层对http应用层发出去和接收的报文做加密和解密。 为什么 出现https原因,在我看来有两点 1,因为http是明文传输,极不安全,需要对报文进行加密。 2,我们无法确认浏
(4)500代码行代码手写docker-设置网络命名空间 本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。 本章的源码已经上传到github,地址如下: https://github.com/HobbyBear/tinydocker/tree/cha
(3)500行代码代码手写docker-将rootfs设置为只读镜像 本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。 本章的源码已经上传到github,地址如下: https://github.com/HobbyBear/tinydocker/tr
(2)500行代码手写docker-以新命名空间运行程序 本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。 本章的源码已经上传到github,地址如下: https://github.com/HobbyBear/tinydocker/tree/cha
(1)500行代码手写docker开篇-goland远程编译环境配置 本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。 代码最终运行效果 本系列源码已经上传到githuhub,地址如下: https://github.com/HobbyBear/t
一次排查某某云上的redis读超时经历 问题背景 最近一两天线上老是偶现的redis读超时报警,并且是业务低峰期间,甚是不解,于是开始着手排查。 以下是我的排查思路。 排查思路 查阅 redis 慢查询日志 既然是redis超时,首先想到的还是 对于redis的操作命令存在慢查询导致的。 redis的慢查询阈值是10ms,唯一的慢查询是备份时的bgrewriteaof语句,并不是业务命令,既然从
一次系统延迟性优化案例问题背景线上隔三差五晚上10点左右总会有sql报警出现,且是同样的sql,我们的sql报警是在应用程序内部通过对sql操作增加钩子函数,对sql前后执行的位置记录下时间戳,然后sql执行完毕后,对时间戳进行相减得到sql执行时长,大于1s则报警。晚上10点正好是我们的业务高峰。部分接口也会在此期间出现超过2s的响应。探索过程排查sql慢查询由于是执行sql的地方出现报警,所以
mysql invalid conn排查问题背景我们的服务端程序是使用golang进行开发 ,mysql的客户端库是go-mysql-driver ,系统测试环境频繁总时不时报出invalid conn 错误,但实际拿sql执行时却是正常执行。排查思路原因分析客户端使用了无效连接由于报错信息是invalid conn 连接无效的提示,首先考虑了客户端使用了过期连接。mysql服务器端和客户端都能配
一次goroutine 泄漏排查案例背景这是一个比较经典的golang协程泄漏案例。背景是这样,今天看到监控大盘数据发现协程的数量监控很奇怪。呈现上升趋势,然后骤降。虽然对协程数量做了报警机制,但是协程数量还是没有达到报警阈值,所以没有报警产生。不过有经验的开发应该应该能一眼看出,这个肯定是协程泄漏了,因为协程数量一直在上涨,没有下降趋势,,中间下降的曲线其实是服务器重启造成的。pprof分析为了
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号