导航

2021年4月28日

摘要: sync.Once能确保实例化对象Do方法在多线程环境只运行一次,内部通过互斥锁实现 Do方法 Once类型的Do方法只接收一个参数,参数的类型必须是func(),即无参数无返回的函数。该方法的功能并不是对每一种参数函数都只执行一次,而是只执行首次被调用时传入的那个函数,并且之后不会再执行任何参数函 阅读全文

posted @ 2021-04-28 14:33 luoming1224 阅读(299) 评论(0) 推荐(0) 编辑

2021年4月16日

摘要: 背景 项目中遇到死锁,使用搜索引擎搜索goroutine堆栈中出现的“sync.runtime_Semacquire deadlock”时,搜到一篇说sync.WaitGroup死锁,特此记录一下 当然项目中的问题不是这个导致的,是sync.RWMutex重入导致的 问题复现 func TestRe 阅读全文

posted @ 2021-04-16 16:01 luoming1224 阅读(1231) 评论(0) 推荐(0) 编辑

摘要: 背景 最近项目中遇到两次RWMutex死锁问题,所以稍微看了一下资料和源码,稍作记录 源码 type RWMutex struct { w Mutex // held if there are pending writers writerSem uint32 // semaphore for wri 阅读全文

posted @ 2021-04-16 11:25 luoming1224 阅读(328) 评论(0) 推荐(0) 编辑

2021年4月9日

摘要: 现象 生产某集群各节点已使用内存比较大,在清理了大量业务无用数据后,节点已使用内存却未下降。 排查与分析 通过info memory命令查看,内存碎片率略高,但是对某个主节点新添加的从节点内存使用依然很高,所以排除了内存碎片率的问题。 然后在info memory命令返回数据中,看到 number_ 阅读全文

posted @ 2021-04-09 15:24 luoming1224 阅读(1447) 评论(0) 推荐(0) 编辑

摘要: 现象 一个组件实现了raft分布式协议,在分布式部署环境中来进行选主,在某客户现场突然发生文件句柄泄露,在打印某些错误日志后,几个小时内没有日志打印,然后某个协程突然报无可用的文件句柄。 分析 经过代码和日志分析,组件正常每分钟会打印所有部署节点的日志信息,没有打印日志说明定时器处理逻辑for... 阅读全文

posted @ 2021-04-09 11:59 luoming1224 阅读(881) 评论(0) 推荐(0) 编辑

2019年7月12日

摘要: 无意中看到一篇文章说,当在for循环里使用select + time.After的组合时会产生内存泄露,于是进行了复现和验证,以此记录 内存泄露复现 问题复现测试代码如下所示: 1 package main 2 3 import ( 4 "time" 5 ) 6 7 func main() { 8 阅读全文

posted @ 2019-07-12 11:11 luoming1224 阅读(2718) 评论(2) 推荐(0) 编辑