扁鹊见蔡桓公
文章平均质量分 73
记录大规模分布式系统问题排查方法、问题记录、疑难杂症
~千溪杂谈(随风而逝)~
北京交通大学本科
中国科学院硕士
蚂蚁集团-高级技术专家
展开
-
gcore调试一个并发问题
一、现象最近测试发现了任务卡住的问题,比较有意思,记录一下现象简单描述下:数据最终无法输出通过日志发现有一个模块A任务统计长期增长,但是消费的统计长期不动,怀疑卡住了pstack进程,确认卡住了,如下:1621 Thread 2 (Thread 0x7f0ac81c8700 (LWP 26481)):1622 #0 0x00007f0ccf785d62 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.原创 2021-03-16 11:12:24 · 1071 阅读 · 0 评论 -
cannot allocate memory in static TLS block问题记录
一、背景最近发了一个新版本,服务升级后,加载动态库时候抛出了一个很奇怪的报错“cannot allocate memory in static TLS block”,导致服务启动失败,但是在线下测试是没任何问题的。在解决问题后,二、TLS2.1 定义TLS:全程是Thread Local Storage,即线程局部存储:在多线程中,存储和维护一些线程相关的数据,即线程之间隔离,因此也就没有多线程之间资源竞争问题。目的:因为数据线程局部,不需要锁来保护,可以利用这特性达到优化性能的目的。2.2 实原创 2020-10-25 17:49:23 · 15251 阅读 · 0 评论 -
Linux dlopen加载rocksdb.so coredump
一、背景最近使用rocksdb遇到一个比较奇怪的问题,在虚拟机部署一个应用,通过dlopen加载rocksdb动态库会core dump,但是在其他环境都不可复现二、原因gdb看堆栈比较奇怪__static_initialization_and_destuction --rocksdb.so同时看到Illegal instructions引起的signal怀疑环境有点问题rocksdbrocksdb的官方文档——installBy default the binary we prod原创 2021-07-07 11:53:24 · 497 阅读 · 0 评论 -
NFS nfs4_reclaim_open_state lock reclaim failed
背景最近看了比较奇怪的问题,挂载共享了一个NFS,进程会持久化数据到NFS,但是突然开始有一个任务的进度都不动了,查看日志发现是lock报错资源不可用排查之前怀疑有并发的场景,导致资源卡住不释放,导致其他lock无法成功看调度没什么问题,通过看日志,看到在某个时间,全部lock失败,不太像并发dmesg -T| grep NFSsudo grep NFS /var/log/messages都看到大量NFS nfs4_reclaim_open_state lock reclaim failed原创 2021-07-15 17:27:42 · 2836 阅读 · 0 评论 -
记一次排查内存占用逐渐增长问题
一、背景最近改了好多代码做优化,然后线下测试发现很不符合预期,表现如下:跑一段时间,内存占用越来越大一种怀疑内存泄漏,查询了一下午,终于定位,特别写下mark下二、排查简述任务回收内存是通过异步线程池基于监控项,发现异步线程池堆积任务持续增加,因此导致内存增大,不能及时释放基于现有监控项+撸了几遍代码,很难找到为啥堆积,继续丰富监控项,详细描述了到底堆积了什么任务,类似如下:taskA多少个,taskB多少,taskC多少个。。。发现其中A堆积最大,占用总任务个数的百分95。继续看代码,原创 2020-11-26 19:51:57 · 1197 阅读 · 0 评论 -
c++ 排查一次内存错乱问题
背景最近工程项目实现个功能,出现了BUG,记录一下场景简述如下:有个模块,一组线程池来做类似任务的格式化操作。每个任务包含若干条数据。但是发现跑一段时间,会出现输出数据错乱,或者数据校验不正确的问题,而且每次位置都不相同,偶尔core的位置也不相同。初步看了下,怀疑是内存错乱了或者内存写坏了分析初步review了新加的代码应该没问题的,同时分析代码逻辑,怀疑数据错乱一定发生在了格式化...原创 2020-02-11 20:20:43 · 605 阅读 · 0 评论 -
C++-如何排查内存写坏
C++-如何排查内存写坏问题内存写坏问题mprotect函数原型注意事项mmap函数原型例子内存写坏问题c++内存写坏问题,有很多原因造成,包括野指针、指针越界、并发场景等,出现很难排查,有很多内存分析工具可以使用,比如Valgrind1等很多方式本文总结一种容易排查定位的方法:mprotect+堆栈调用打印方式,从而定位到哪里写坏内存mprotectmprotect是一种系统调用,m...原创 2019-12-22 17:38:13 · 1377 阅读 · 0 评论 -
浅谈大规模C++工程中一些疑难杂症及解决方案
疑难杂症笔者写C++代码好多年,特别近几年在写大规模分布式系统相关,会遇到最头疼的几类问题,特别是新写大模块,或者重构功能基本都会遇到,如下:内存泄漏内存写坏死锁并发导致状态不对或者结果错误…上述几类问题,还可能互相夹杂影响,比如因为并发场景考虑不周全,任务引用计数获取和变化不原子,进而导致内存无法释放,结果不正确。面对大规模C++工程,总会遇到上述问题,记录一些总结,方便查阅以及后续补充问题内存泄漏检测工具类:比如...原创 2022-04-16 15:04:55 · 1480 阅读 · 1 评论