线程内存监控优化方案
一、背景
目前我们使用 jemalloc 这个第三方库来对我们的项目进行内存管理。我们需要对线程级别的内存进行监控。因此使用 jemalloc 提供的一些接口来设计。方案:https://ku.baidu-int.com/knowledge/HFVrC7hq1Q/pKzJfZczuc/WRJGZXv7Ts/1Qi2RRW2Vf2y2v
简单来说,jemalloc 内部会使用 TLS(thread local storage)对线程分配内存,减少多线程竞争,提高性能。而 jemalloc 内部有两个变量分别用来记录当前线程申请的内存累加值、释放的内存累加值。我们获取到这两个变量的值,即可得到线程在一定周期的内存使用情况。
当前方案:我们使用 LD_PRELOAD 的方式 hook pthread_create 系统调用,当创建线程的时候,我们获取到 jemalloc 内部保存内存申请、释放情况的两个指针,将这两个指针进行保存。然后 pavaro 会每秒调度 resmon 执行器,由 resmon 执行器将这两个指针的值进行处理后,录到 bag 包中。
如上是我们的背景。下面说明我们遇到的问题。
线程内存监控的目的:监控线程内存使用的稳定性,查看是否有内存泄漏,线程的内存使用是否有冲高等等。但是目前发现: