一般开发阶段可以通过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. org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint = character varying

    1.报错信息 org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: org.post ...

  2. 「Docker学习系列教程」9-Docker容器数据卷介绍

    通过前面8篇文章的学习,我们已经学会了docker的安装.docker常用的命令已经docker镜像修改后提交的远程镜像仓库及提交到公司的私服仓库中.接下来,我们再来学学Docker另外一个重要的东西 ...

  3. SQLMap入门——获取表中的字段名

    查询表名之后,查询表中的字段名 python sqlmap.py -u http://localhost/sqli-labs-master/Less-1/?id=1 -D xssplatform -T ...

  4. NSSCTF_HUBUCTF的web部分题解

    checkin 题目: 主要是php弱比较和序列化知识点考察 <?php $username = "this_is_secret"; $password = "th ...

  5. Spring Cloud Alibaba组件之Sentinel

    目录 一 引入Sentinel学习 二 Sentinel入门 三 搭建Sentinel Dashboard 四 Springboot项目接入Sentinel 五 接入限流埋点 六 限流配置 七 熔断降 ...

  6. python之路43 JavaScript语法BOM与DOM jQuery对比 标签绑定事件

    前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...

  7. djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令

    djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令 一.web框架前戏 web 框架可以理解为是基于会联网的web服务端>>>socket服务端 1.w ...

  8. 结构型模式 - 代理模式Proxy

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 代理模式的定义与特点         代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不 ...

  9. Unity_UIWidgets新手入门

    Unity_UIWidgets新手入门 Hello Everyone!好久没见了,有没有有些想念小黑呢?什么?这么想?哈哈哈哈哈哈,不过我也知道你是想了解新的知识了,才不是想我嘞. 好了,好歹也半年没 ...

  10. 一小时学会微信小程序

    一小时学会微信小程序 目录 一.小程序概要 1.1.发展历史 1.2.小程序的诞生 二.微信小程序介绍 三.开发微信小程序的软件下载与初步配置  3.1.获取微信小程序的AppID 3.2.下载安装微 ...