现象:通过nginx访问,偶现502
排查步骤:
1、查看日志,无异常日志打印
2、抓包分析,发现发送http请求后,被源站直接发fin。
3、注释代码关键逻辑,测试。定位到是access.lua阶段处理的问题。但因为没有日志,代码段太多,只能逐步排查。
4、过程中发现这个现象。
5、gdb dump,
崩溃位置在libmaxminddb.so中
6、github中阅读libmaxminddb相关源码,
7、继续排查调用相关api的方法
8、继续看源码,会释放一个pool,和gdb dump的位置能对应上
9、查看相关操作代码。有个遍历赋值操作。怀疑是遍历操作引起的。
10、修改代码,存放头指针位置,释放头指针,问题解决。