一般开发阶段可以通过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下面的操作都是一笔带过,这里就靠各位大佬的总结,所以看着官方文档找到自己需要解决问题的工具,再去搜索对应的用法,还是能解决实际生产的问题。

docker下netcore内存dump的更多相关文章

  1. dotnet core调试docker下生成的dump文件

    最近公司预生产环境.net core应用的docker容器经常出现内存暴涨现象,有时会突然吃掉几个G,触发监控预警,造成容器重启. 分析了各种可能原因,修复了可能发生的内存泄露,经测试本地正常,但是发 ...

  2. Android安全讲座第九层(二) 内存dump

    近来android上越来越多的应用对自身的保护机制加强了重视,主要表现在几个方面. 1 dex加壳 2 so加壳 3 dex藏在so中,在适当的时候释放. 这是技术上一个进步,并且还有一些专业的公司提 ...

  3. [zhuan]Android安全讲座第九层(二) 内存dump

    http://sunzeduo.blog.51cto.com/2758509/1409450 近来android上越来越多的应用对自身的保护机制加强了重视,主要表现在几个方面. 1 dex加壳 2 s ...

  4. CentOS下Docker与.netcore(五)之 三剑客之一Docker-swarm集群

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  5. CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  6. CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  7. CentOS下Docker与.netcore(二) 之 Dockerfile

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  8. CentOS下Docker与.netcore(一) 之 安装

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  9. docker容器内存占用 之 系统cache,docker下java的内存该如何配置

    缘起: 监控(docker stats)显示容器内存被用完了,进入容器瞅了瞅,没有发现使用内存多的进程,使用awk等工具把容器所有进程使用的内存加起来看看,距离用完还远了去了,何故? 分析: 该不会d ...

  10. 在Linux(Centos7)上使用Docker运行.NetCore

    在上一篇中我们写了如何在windows中使用docker运行.netcore,既然我们了解了windows下的运行发布,我们也可以试试linux下使用docker运行.netcore项目,那么今天我们 ...

随机推荐

  1. python注释、变量、数据类型详细

    目录 1.python注释 2.PEP8规范 3.变量与常量 1.python中的变量 2.变量名的命名规范 3.常量的基本使用 1.python注释 什么是注释? 注释是对代码的解释说明,写注释是为 ...

  2. vue项目封装 axios 和 api

    一,utils文件夹下新建一个request.js文件 import axios from 'axios'; import QS from 'qs'; import { Toast } from 'v ...

  3. gin模板语法

    输出数据: 语句:{{.}} 用法: 在html文件中调用 输出里面的结果 多个目录下定义模板: 语句:{{ define "xxx目录/xxx文件.html"}}        ...

  4. java初级开发面试题

    目录 1.java基础知识 Q1.equals和==的区别 Q2:集合的父类是什么 Q3:List.Hashmap.Set区别 Q4.java数据类型 Q5.javaIO流 Q6.jdk1.8新特性 ...

  5. Apache HttpClient 5 笔记: SSL, Proxy 和 Multipart Upload

    Apache HttpClient 5 最近要在非SpringBoot环境调用OpenFeign接口, 需要用到httpclient, 注意到现在 HttpClient 版本已经到 5.2.1 了. ...

  6. 《STL源码剖析》STL迭代器分类

    input迭代器:只能向前移动,一次一步,用户只能读取,不能修改它们所指向的东西,而且只能读取一次. output迭代器情况类似,但一切只为输出:它们只能向前移动,一次一步,用户只可以修改它们所指向的 ...

  7. Maven项目中导入坐标依赖时报(Failure to transfer....)的错的问题

    Maven项目中导入坐标依赖时报(Failure to transfer....)的错的问题   今天在做Spring MVC的一个项目时导入坐标依赖的时候突然网断了一下(村里网络日常不稳定),然后就 ...

  8. hashlib 模块 subprocess 模块 logging日志模块

    今日内容 hashlib加密模块 1.何为加密 将明文数据处理成密文数据 让人看不懂 2.为什么加密 保证数据的安全 3.如何判断数据是否加密的 一串没有规律的字符串(数字.字母.符号) 4.密文的长 ...

  9. continue跳過循環(skippaart程序),接受設定的合法分數來進行平均分求值,并展現最高分,最低分

    1 #include<stdio.h> 2 int main() 3 { 4 const float MIN = 0.0f; //分數下限是0分 5 const float MAX = 1 ...

  10. 今天学到的新知识--自己的电脑可以像Github Pages、码云 Pages一样发布静态资源

    大佬教我的,感觉这个很神奇哦 假设下面这个路径是我的本地电脑静态资源路径 打开powershell窗口 然后按照下图的样子执行命令 复制网址就可以访问啦 然后可以通过 https://iplocati ...