在.NET 6中使用DateOnly和TimeOnly
dotnet-dump是微软官方推出的一个.NET全局工具,安装和使用都非常简单。安装:dotnet tool install --global dotnet-dump使用:dotnet-dump collect --process-id 1902 # pid但是它不能够自动dump(也可能是我不知道),所以本文主要讨论下面这个工具ProcDump for linux本工具是 ProcDump 的
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", “.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", “.dll”]
这样就可以了,在docker run的时候会同时启动dotnet和procdump,并且当内存大于200M的时候会自动dump。
还有一点要注意,docker run的时候需要添加–privileged 以提高权限。例如docker run --privileged -it xx
其中 procdump 的各个参数为
Usage: procdump [OPTIONS…] TARGET
OPTIONS
-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 syslog
TARGET 以下二选一:
-p 进程的 pid
-w 进程的名字
举例来说,以下命令表示当 CPU 使用率为>= 65%或内存为>= 100 MB 时创建一个 dump 文件
USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亚马逊测评 www.yisuping.cn
深圳网站建设www.sz886.com
procdump -C 65 -M 100 -p 1234
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)