问题来源
笔者从事供应链saas系统的开发工作,在系统线上环境运行后,根据线上性能监控及运维同事反馈,发现销售服务自启动后3天内就会出现内存占满及服务崩溃的现象。同时与运维在k8s上查看运行情况,了解到以下问题:
销售服务模块内存占满并崩溃
订单服务内存占有量太高
生产及基础服务的内存占有也比较高以上现象已经极大的影响的系统使用,问题已经刻不容缓。
工具介绍
笔者之前调试dump文件的经验比较匮乏,一番学习后,学习到一点dump文件生成及调试知识。
生成dump文件的工具:
- coredump(适用于netcore3.0以下版本);
- dotnet-dump collect(适用于netcore3.0及以上版本)。
dump文件调试工具:
- lldb:linux下使用,且lldb的版本与netcore版本有对应关系;
- Dotnet-dump analyze 工具,windows与linux都可以使用,执行"dotnet tool install -g dotnet-dump"进行安装
- Windbg:windows下使用,下载安装
- VS:windows下使用,下载安装
dotnet-dump官方介绍,其中包含了dump文件收集及分析的具体介绍
因为笔者使用的是netcore2.2进行的开发,后续也将介绍如何使用lldb容器调试dump文件,同时此种方式也是使用步骤较为复杂的一种,调试所使用到的命令参考dotnet-dump官方介绍中的“分析 SOS 命令”部分。
环境搭建
1.首先搭建linux服务器(笔者使用的是centos),安装docker环境,服务器ip地址为192.168.100.102;
2. 100.102上使用" docker pull huangzhihong/dotnet-lldb:2.2.6"获取lldb3.9的容器;
3. 100.102上新建目录/tmp,使用rz命令将dump压缩包拷入,并使用tar zxf解压文件,稍后会将/tmp文件夹映射到docker容器中。
4. 使用命令"docker run -d -v /tmp:/dump -it --name lldb huangzhihong/dotnet-lldb:2.2.6 /bin/bash"运行容器
5. 执行命令docke