如何在 Docker 环境下自动给 .NET 程序生成 Dump

前言

之前“一线码农”大佬有写文章介绍了如何在 windows 下自动 dump,正好手里有个在 docker 环境下 dump 的需求,所以在参考大佬文章的基础上,有了本篇。

工具

dotnet-dump (https://docs.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump)
ProcDump for linux (https://github.com/Sysinternals/ProcDump-for-Linux)

dotnet-dump

dotnet-dump是微软官方推出的一个.NET全局工具,安装和使用都非常简单。
安装:

dotnet tool install --global dotnet-dump

使用:

dotnet-dump collect --process-id 1902 # pid

但是它不能够自动dump(也可能是我不知道),所以本文主要讨论下面这个工具

ProcDump for linux

本工具是 ProcDump 的社区 linux 移植版,不过主要开发人员也是微软的员工。
它可以实现根据 CPU 占用 、内存占用、线程数等情况进行自动 dump,我们以此来应对程序出现异常时需要dump文件进行分析的场景。

安装
在 Dockerfile中添加以下命令:
注意我们要在运行时的镜像中添加,并且最好是自行构建一个基础镜像,而不是每次都进行安装。

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0# 安装所需依赖
RUN apt-get update \&& apt-get install -y --no-install-recommends \wget \gdb \lldb# 安装 procdump
RUN wget https://packages.microsoft.com/repos/microsoft-debian-buster-prod/pool/main/p/procdump/procdump_1.1.1-220_amd64.deb -O procdump.deb \&& dpkg -i procdump.deb \&& rm procdump.deb

本文基于 aspnet:5.0 镜像,即 debian 10,如果基于其他镜像,可去下面目录中寻找对应的包
https://packages.microsoft.com/repos/
也可参考作者提供的安装说明

运行
因为 docker 容器并不能很方便的在启动时同时执行多个进程,所以我们需要一个sh文件以便在启动时同时执行dotnet和procdump。
因为我个人不喜欢在 Dockerfile 之外还要依赖其他文件,所以我直接在 Dockerfile 里进行了sh文件的创建

RUN echo "#!/bin/bash \n\
procdump -M 200 -w dotnet & \n\
dotnet \$1 \n\
" > ./start.sh
RUN chmod +x ./start.sh
ENTRYPOINT ["./start.sh", "<YourApp>.dll"]

如果有需要的话,也可以自行创建一个start.sh,内容为

#!/bin/bash
procdump -M 200 -w dotnet &
dotnet $1

Dockerfile 改为

COPY start.sh ./start.sh
RUN chmod +x ./start.sh
ENTRYPOINT ["./start.sh", "<YourApp>.dll"]

这样就可以了,在docker run的时候会同时启动dotnet和procdump,并且当内存大于200M的时候会自动dump。
还有一点要注意,docker run的时候需要添加--privileged 以提高权限。例如docker run --privileged -it xx

其中 procdump 的各个参数为

Usage: procdump [OPTIONS...] TARGETOPTIONS-h          Prints this help screen-C          当CPU超过或等于指定值(0到100 * nCPU)时,触发核心转储生成。-c          当CPU小于指定值(0到100 * nCPU)时触发核心转储生成。-M          当内存提交超过或等于指定值(MB)时,触发核心转储生成-m          当内存提交小于指定值(MB)时,触发核心转储生成。-T          当线程数超过或等于指定值时触发。-F          当文件描述符计数超过或等于指定值时触发。-I          Polling frequency in milliseconds (default is 1000)-n          Number of core dumps to write before exiting (default is 1)-s          Consecutive seconds before dump is written (default is 10)-d          Writes diagnostic logs to syslogTARGET 以下二选一:-p          进程的 pid-w          进程的名字

举例来说,以下命令表示当 CPU 使用率为>= 65%或内存为>= 100 MB 时创建一个 dump 文件

procdump -C 65 -M 100 -p 1234

其他

dump 文件的持久化
大家都知道 docker 容器消失的话,那么其中的 dump 文件也会消失。
所以需要输出 dump 文件到一个指定的、进行过持久化挂载的卷中,不过可惜的是,当前procdump for linux还没有一个输出参数来控制输出目录,只会在应用程序的同级目录生成,所以现在需要手动移动一下。
我看已经有人提了 PR,未来会增加一个 -o 参数以控制输出。

参考

https://www.cnblogs.com/huangxincheng/p/14661031.html
https://docs.docker.com/config/containers/multi-service_container/
https://github.com/msbrz/procdump-docker

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机的科学原理是什么,人工智能的工作原理是什么?

原标题&#xff1a;人工智能的工作原理是什么&#xff1f;人工智能的工作原理是&#xff1a;计算机会通过传感器(或人工输入的方式)来收集关于某个情景的事实。计算机将此信息与已存储的信息进行比较&#xff0c;以确定它的含义。计算机会根据收集来的信息计算各种可能的动作&a…

jq校验输入框值变化时_谈谈自己对CRC校验的理解

1、CRC是用来干嘛的&#xff1f;检测数据传输过程中是否出现错误&#xff08;某些位&#xff0c;或某几位&#xff0c;或者某块区域位错误&#xff09;。2、CRC是否能校正数据传输中的错误&#xff1f;CRC只能检错&#xff0c;不能纠错。如果发现错误&#xff0c;可根据双方协议…

世界头号毒枭古斯曼被捕,全因被内部IT男出卖!

全世界只有3.14 % 的人关注了数据与算法之美近段时间&#xff0c;纽约布鲁克林联邦地区法院上上下下可说是忙得不可开交&#xff0c;因为他们从2018年11月开始到现在都没处理完这个“大单子”——审理世界头号毒枭古斯曼。2008年度《福布斯》“全球亿万富豪榜”第701位&#xf…

APP-V5.0的Sequencer过程

首先我准备好了一台纯净的Windows 7 x86系统&#xff08;不加域&#xff09;来作为我的捕获母机系统&#xff01;那么首先我们的这个Windows 7需要安装上.net4.0才行。接着是安装powershell3.0http://www.microsoft.com/en-us/download/details.aspx?id34595接着是安装KB25336…

WPF 分页控件添加路由事件

昨天的代码经过大佬的指点&#xff0c;又优化了一下&#xff0c;看看优化了哪些&#xff1a;在Pagination类中添加事件定义&#xff1a;public static readonly RoutedEvent IndexChangedEvent EventManager.RegisterRoutedEvent("IndexChanged", RoutingStrategy.B…

量子计算机设计理念和思路,课程的设计理念与思路

课程的设计理念与思路一、课程设计的理念学习是一个积极主动的建构过程&#xff0c;最好的学习是个性化学习&#xff0c;最好的教育是自我教育&#xff0c;学生不是被动地接受教师传授来的信息&#xff0c;而是在个人原有经验和知识的基础上通过师生、生生互动&#xff0c;主动…

项目管理六大制约因素_用PCTS理念做好项目管理规划(优秀项目管理者必知)...

谈到项目管理的理念&#xff0c;很多人所熟知的大概是项目管理的三重约束——质量、时间和成本。每一个管理者当然都希望自己的项目可以质量好&#xff0c;时间花费少以及成本低&#xff0c;然而事实往往不尽人意&#xff0c;你必须选择其中一个作为变量来保证其他两者的定量&a…

你的孩子缺什么?不再是知识!看完后明白了

▲卢sir特别推荐点击上图进入玩酷屋中国孩子缺什么&#xff1f;不再是知识是独立思考意识、逻辑思维能力基于科学的价值观中小学教师的课堂助手素质教育抓什么&#xff1f;不能是知识是人类文明史、基本科学态度初步的审美能力科技工作者的创新思想库科技创新靠什么&#xff1f…

OceanBase开源,11张图带你了解分布式数据库的核心知识

蚂蚁集团自研数据库OceanBase已经开源&#xff0c;这对国产分布式数据库来说&#xff0c;是一个重磅消息。一直以来OceanBase作为商业数据库&#xff0c;披露的技术细节并不多,以后又多了一个可以拿来研究的优秀分布式数据库。参考1[1]根据官网描述&#xff0c;在5月20日国际事…

[转]order by 多个排序条件

为什么80%的码农都做不了架构师&#xff1f;>>> http://apps.hi.baidu.com/share/detail/19346201 ORDER子句按一个或多个&#xff08;最多16个&#xff09;字段排序查询结果&#xff0c;可以是升序&#xff08;ASC&#xff09;也可以是降序&#xff08;DESC&#…

linux删除第二列为空_Linux之基本文本处理工具(二)

四、按列抽取与合并cutcut是一个选取命令&#xff0c;就是将一段数据经过分析&#xff0c;取出我们想要的。一般来说&#xff0c;选取信息通常是针对“行”来进行分析的&#xff0c;并不是整篇信息分析的。1、命令格式&#xff1a;cut [-bn] [file] 或 cut [-c] [file] 或 cut …

国家开放大学计算机基础实训项目一,国家开放大学电大专科《微机系统与维护》网络课实训11及实训12作业及答案...

国家开放大学电大专科《微机系统与维护》网络课实训11及实训12作业及答案 实训11 微机软件系统的维护实训报告 实训内容 操作系统维护工具的使用。注册表的维护。Windows优化大师软件的使用。实训要求 1&#xff0e;掌握系统维护工具的使用并对微机系统进行优化操作 2&#xff…

拼多多出现大Bug:100无门槛券随便领,一晚损失200亿

全世界只有3.14 % 的人关注了数据与算法之美据悉从20号凌晨开始&#xff0c;拼多多出现了一个超级大Bug&#xff0c;用户可以领取100元无门槛券&#xff0c;注意是领取&#xff0c;不是抢购。专职羊毛党发现了这个大Bug&#xff0c;半夜打电话喊人薅羊毛&#xff01;有的大牛已…

记一次 .NET 某三甲医院HIS系统 内存暴涨分析

一&#xff1a;背景 1. 讲故事前几天有位朋友加wx说他的程序遭遇了内存暴涨&#xff0c;求助如何分析&#xff1f;和这位朋友聊下来&#xff0c;这个dump也是取自一个HIS系统&#xff0c;如朋友所说我这真的是和医院杠上了????????????&#xff0c;这样也好&#x…

flex ColorPicker

flex ColorPicker <?xml version"1.0" encoding"utf-8"?> <s:Application xmlns:fx"http://ns.adobe.com/mxml/2009" xmlns:s"library://ns.adobe.com/flex/spark" xmlns:mx"libra…

怎么把计算机隐藏文件显示出来,怎么把隐藏的文件夹显示出来

电脑中病毒后&#xff0c;比例exe病毒&#xff0c;很多文件夹都会被隐藏起来。那么怎么显示出来呢?以下是小编整理的隐藏的文件夹显示出来的步骤&#xff0c;希望可以帮助大家!1.在要设置显示隐藏文件夹的目录下→鼠标右键空白处→在右键菜单栏中选择“新建”→“文本文档”&a…

数字转字符函数_Excel之文本函数CONCATENATE/TEXT/LEFT/MID/RIGHT/FIND/LEN

本部分主要包CONCATENATE函数、LEFT函数、RIGHT函数、MID函数、LEN函数、FIND函数、SEARCH函数、SUBSTITUTE函数、REPLACE函数、TRIM函数、CLEAN函数、LOWER函数、UPPER函数、PROPER函数、EXCACT函数、TEXT函数、DOLLAR函数、VALUE函数、CHAR函数、CODE函数、T函数、FIXED函数和…

ML.NET Cookbook:(11)如果我的训练数据不在文本文件中怎么办?

对于ML.NET&#xff0c;通常演示的用例是当训练数据驻留在磁盘的某个地方时&#xff0c;我们使用TextLoader来加载它。然而&#xff0c;在真实的训练场景中&#xff0c;训练数据可以在其他地方&#xff1a;在一堆SQL表中&#xff0c;从日志文件中提取&#xff0c;甚至动态生成。…

计算机表演赛新疆赛区,【图】第二十六届中国儿童青少年威盛中国芯HTC计算机表演赛“中国电信天翼杯”新疆赛区总决赛圆满结束_乌鲁木齐教育信息网...

新疆赛区自2006年首次参加中国儿童青少年计算机表演赛至今&#xff0c;已经连续成功举办了十一届赛事。第二十六届中国儿童青少年威盛中国芯HTC计算机表演赛“中国电信天翼杯”新疆赛区活动启动以来&#xff0c;新疆赛区组委会办公室积极组织专家通过网络直播形式对全疆各级信息…

VC中新建的类不见了的解决方法

方法工程(project&#xff0c;然后add to project 然后 files,把不见得类.cpp和.h文件包含进来或者1、关闭工程2、把.ncb和.clw文件删除3. 重新打开工程