• docker下netcore内存dump


    一般开发阶段可以通过visualstudio来检查程序的内存 、cup等的优化问题。vs下调试=》性能探查器,这里面大有千秋。

    但是好多内存问题是经过时间积累下来才暴露出来的,在生产环境中不做不了这些操作了。

    在linux裸机下面的内存泄漏排查微软官网是有详细说明的,按照操作来就可以了。教程如下:

    调试内存泄漏教程 | Microsoft Learn

     

    但是部署在docker下的程序怎么排查呢?

    这里有一个关键的地方就是转储文件,所有分析排查操作都是针对这个文件来操作的。

    linux裸机下面可以通过dotnet-dump collect命令来收集该文件,docker下面其实也有createdump命令来收集这个文件。但是前提是要给足docker权限,运行netcore服务的时候需要带上--privileged=true这个参数。

    下面通过一个小例子演示在docker下面抓取出转存文件,后面的操作跟微软官方文档一样,不过多赘述。

     

    首先进入mytest容器内部 

     docker exec -it 03e7 bash

     

    容器内部执行该命令可以看到createdump命令有没有,如果提示没有足够权限那就是运行docker服务没有给足权限,该带上--privileged=true 了。

     

     find / -name createdump 

    上面的find命令查询docker内部有没有createdump的工具,docker内部是自带了的,如果没有就升级一下docker版本。

    遇到这个Operation not permitted命令我要回头重启一下服务带上--privileged=true了,因为我中途干了别的。

    如果想查看一下内部的pid,可以通过top命令,下面是安装top的。。。

    可以看到我们的dotnet部署的pid是1,关键抓取转存文件的命令就是执行一下 createdump  pid

    /usr/share/dotnet/shared/Microsoft.NETCore.App/7.0.3/createdump 1

    下面就是推出docker,把文件拷贝到宿主机器上了,通过docker cp 待分析容器id:/tmp/coredump.1 coredump.1 拷贝文件到我们宿主机器,ls查询。

    docker cp a59ff3a2b39e:/tmp/coredump.1 coredump.1

     

    下面就是通过分析该文件了

    dotnet-dump analyze coredump.1

    后面操作按照文档一步一步的看来  调试内存泄漏教程 | Microsoft Learn

    到这里算是完成了docker内抓取转存文件和分析的操作,但是有更方便的命令,那就是dotnet-monitor

    官网的介绍和使用同样简单不容易看懂所以我找到了一遍手把手教学的博客,这个同样是对docker下面做了详细介绍。

    使用 dotnet-monitor 分析.NET 应用程序 - SpringLeee - 博客园 (cnblogs.com)

     

    总结,微软官方文档有好多使用的分析工具,但是不是文档很详细,docker下面的操作都是一笔带过,这里就靠各位大佬的总结,所以看着官方文档找到自己需要解决问题的工具,再去搜索对应的用法,还是能解决实际生产的问题。

  • 相关阅读:
    ggplot2绘制双坐标轴图
    实现物联网的技术要素
    leetcode刷题集:单调栈(python代码)
    基于工业网关的储罐在线监测系统解决方案
    基于云存储技术的仓储管理系统
    电阻理论基础
    《MATLAB 神经网络43个案例分析》:第30章 基于随机森林思想的组合分类器设计——乳腺癌诊断
    发布2年后涨价100美元,Meta Quest 2的逆生长
    Linux—进程间通信之System V共享内存
    在服务中无法正常启动Nacos
  • 原文地址:https://www.cnblogs.com/morec/p/17166092.html