当前位置: 首页 > news >正文

flash做网站西安比较好的网络公司

flash做网站,西安比较好的网络公司,用什么技术来做网站,网站建设 司法公开的需要.NET 容器环境下创建应用 dump 文件Intro有时候我们的应用会出现一些异常的情况#xff0c;比如内存飙升#xff0c;线程死锁等等#xff0c;通过一些 metrics 我们可能大概的了解内存是增长了#xff0c;但是具体是哪里增长了#xff0c;单单看内存的变化很难看出来哪里导… .NET 容器环境下创建应用 dump 文件Intro有时候我们的应用会出现一些异常的情况比如内存飙升线程死锁等等通过一些 metrics 我们可能大概的了解内存是增长了但是具体是哪里增长了单单看内存的变化很难看出来哪里导致的内存变化所以很多时候我们还是需要对应用进行 dump通过分析应用 dump 文件来进一步分析是哪里出现的问题。Prepare在容器中进行 dump 的时候我们需要 Linux 中的 SYS_PTRACE 权限所以需要在部署或运行容器的时候指定一下默认是没有的如果你是直接用 docker run 执行的话可以在执行 docker run  的时候指定 docker run --cap-addSYS_PTRACE如果你使用 docker compose 来运行可以在 docker-compose.yml 配置文件中配置 cap_add下面是一个示例version: 2.1 services:reservation:build:context: .dockerfile: Dockerfilecontainer_name: reservationcap_add:- SYS_PTRACE 如果你在 k8s 中使用需要在 k8s 的 yaml 文件中配置示例如下apiVersion: apps/v1 kind: Deployment metadata:name: sparktodo-apilabels:app: sparktodo-api spec:replicas: 1revisionHistoryLimit: 0template:    spec:containers:- name: sparktodo-apiimage: weihanli/sparktodo-api:latestimagePullPolicy: IfNotPresentresources:requests:memory: 64Micpu: 20mlimits:memory: 128Micpu: 50mports:- containerPort: 80securityContext:capabilities:add: [SYS_PTRACE] 我们也可以在容器中检测是否已经开启了 SYS_PTRACE 权限可以通过命令 capsh --print 来查看已经配置的权限如果提示命令不存在则需要安装一个 packagealpine 安装 libcapUbuntu 安装 libcap2-bin# alpine apk add libcap# ubuntu apt-get install libcap2-bin createdumpcreatedump 是随着 .NET Core runtime 一起发布的一个创建 dump 的一个工具createdump 可以收集托管信息和 Native 信息默认 createdump 会创建一个 mini dump会创建一个比较小的一个 dump仅包含一些必要的托管信息和堆栈信息我们也可以通过参数来控制生成全量的 dump(full dump)全量 dump 生成的 dump 文件会比较大但是包含的信息会比较多内存中所有的信息都会包含在内。mini dump 没有 full dump 包含那么多有用的信息所以大小会比较小通常你请别人帮忙分析 dump 的时候都是选择 full dump。createdump 一般位于 /usr/share/dotnet/shared/Microsoft.NETCore.App/version/createdump使用起来直接用 createdump pid 就可以了默认会创建一个 minidump如果要创建一个 full dump需要指定参数createdump pid -u 或者 createdump pid --full-f, --name - dump path and file name. The %p, %e, %h %t format characters are supported. The default is /tmp/coredump.%p -n, --normal - create minidump. -h, --withheap - create minidump with heap (default). -t, --triage - create triage minidump. -u, --full - create full core dump. -d, --diag - enable diagnostic messages. 我们可以使用下面的格式来作为 dump 文件中的占位符%%  A single % character. %d  PID of dumped process (for backwards createdump compatibility). %p  PID of dumped process. %e  The process executable filename. %h  Hostname return by gethostname(). %t  Time of dump, expressed as seconds since the Epoch, 1970-01-01 00:00:00 0000 (UTC). dotnet diagnostics tool微软提供了一系列的 dotnet 诊断工具可以帮助我们诊断应用程序中的问题dotnet-counters:  一个性能监视工具用于初级运行状况监视和性能调查dotnet-dump: 可在不使用本机调试器的情况下收集和分析 Windows 和 Linux  的 Core Dumpdotnet-gcdump: 可用于为活动 .NET 进程收集 GC dumpdotnet-trace: 可以使用来自应用的有意思的分析数据分析数据通过 .NET Core 中的 EventPipe 公开这些数据可帮助你分析应用运行缓慢的根本原因。dotnet-stack: 可以快速打印正在运行的 .net 进程中的所有线程的托管堆栈可以使用安装 global tool 的方式安装在运行时容器中安装 dotnet tool 可以参考之前一篇文章介绍借助多阶段构建来方便的安装 dotnet tool示例 dockerfile 如下FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS base # https://www.abhith.net/blog/docker-sql-error-on-aspnet-core-alpine/ RUN apk add icu-libs ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT false # use forward headers ENV ASPNETCORE_FORWARDEDHEADERS_ENABLEDtrue LABEL MaintainerWeihanLi EXPOSE 80FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build-env WORKDIR /app# 安装 dotnet tool RUN dotnet tool install --global dotnet-dump RUN dotnet tool install --global dotnet-gcdump RUN dotnet tool install --global dotnet-countersCOPY SparkTodo.Shared/SparkTodo.Shared.csproj SparkTodo.Shared/ COPY SparkTodo.API/SparkTodo.API.csproj SparkTodo.API/ RUN dotnet restore SparkTodo.API/SparkTodo.API.csproj# copy everything and build COPY . .WORKDIR /app/SparkTodo.API RUN dotnet publish -c Release -o out# build runtime image FROM base AS final# 从前面的 SDK 镜像中拷贝 dotnet tools 到 runtime 镜像中 COPY --frombuild-env /root/.dotnet/tools /root/.dotnet/tools # 设置 PATH 以方便使用 ENV PATH/root/.dotnet/tools:${PATH}WORKDIR /app COPY --frombuild-env /app/SparkTodo.API/out . ENTRYPOINT [dotnet, SparkTodo.API.dll] 你也可以按照上面的方式安装自己想要安装的 dotnet tool按上面安装之后我们就可以直接使用 dotnet-dump/dotnet-gcdump/dotnet-counters 命令了dump 之旅container for test了解一些基础知识之后我们就来开始创建 dump 吧示例应用在 Github 上 https://github.com/WeihanLi/SparkTodo你可以下载这个应用来做尝试或者在自己的应用上来试验首先我们 build 一个 docker 镜像在项目根目录执行 docker build -t sparktodo-api . 来构建镜像镜像构建好之后运行一个容器来进行测试docker run -d --name sparktodo-api --cap-addSYS_PTRACE sparktodo-api 容器运行成功之后可以使用下面的命令进入到容器中出现下图提示则成功的进入容器中了docker exec -it sparktodo-api sh Createdump首先我们来使用自带的 createdump 来创建一个应用的 dump有两种方式找到我们的 createdump我们可以先切换目录到 /usr/share/dotnet/shared/Microsoft.NETCore.App然后 ls 查看当前的 runtime 版本切换到版本目录下即可找到 createdump另外一种方式我们可以通过 dotnet --info 来查看当前 runtime 版本然后直接切换到对应的 /usr/share/dotnet/shared/Microsoft.NETCore.App/dotnet-version 目录下即可通常情况下我们的容器中只有一个进程进程 Id 为 1的进程通常就是我们的应用进程如果不确定的话也可以使用 ps -ef 命令来查看当前的进程信息可以看到PID 为 1 的进程就是我们的应用所在的进程然后就可以通过下面的命令来创建 dump 了./createdump 1 -u 看到这样的提示我们的 dump 就创建成功了这样我们可以使用 LLDB 或者 dotnet-dump 进行 dump 分析了dotnet-dumpdotnet-dump 是微软提供的一个很方便的 dump 分析和收集工具dotnet-dump 只能分析托管代码但是绝大部分场景下对我们来说已经足够了而且 dotnet-dump 是一个 dotnet tool可以在各个平台下提供完全一致的体验不像 LLDB 每个系统的安装方式可能都不一样安装的版本也可能不同不如 dotnet-dump 体验良好首先我们可以使用 dotnet-dump ps 来查看可以进行 dump 的 dotnet 进程然后使用 dotnet-dump collect -p pid 来创建 dump 文件dotnet-gcdumpdotnet-gcdump 也是微软提供的一个用来分析应用程序问题的 dotnet tooldotnet-dump 创建的 dump 会比较大包含除了 gc 之外的其他信息比如 lock 情况线程堆栈信息等使用 dotnet-gcdump 创建的 dump 仅包含 gc 堆的信息dump 文件会小很多并且 gcdump 文件可以直接用 VS 打开可以比较方便的查看 GC 内存占用信息dotnet-gcdump 的使用和 dotnet-dump 类似并且新版本(.NET 5.0)的 dotnet-gcdump 可以通过 dotnet-gcdump report -p pid 直接从某一个进程导出 GC 内存使用信息通过 dotnet-gcdump collect -p pid 来创建 GC dump 文件More容器中的 dump 生成之后可以通过 docker cpk8s 中可以用 kubectl cp将 dump 文件拷贝到本地来进行分析新版本的 dump 文件可以直接使用 VS 打开微软的官方文档真的是一个宝库有很多很不错的文档关于 dotnet 诊断工具也有几篇很有用的介绍没事的时候看看文档说不定就能发现宝藏~~Referenceshttps://docs.microsoft.com/en-us/dotnet/core/diagnostics/debug-linux-dumpshttps://www.programmersought.com/article/81354675797/#dotnetdotnetdump_45https://man7.org/linux/man-pages/man7/capabilities.7.htmlhttps://stackoverflow.com/questions/43621959/how-can-i-find-out-which-capabilities-a-container-has-been-givenhttps://stackoverflow.com/questions/38758627/how-can-we-add-capabilities-to-a-running-docker-containerhttps://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilitieshttps://stackoverflow.com/questions/6903329/minidump-vs-fulldumphttps://github.com/dotnet/diagnostics/blob/main/documentation/design-docs/dotnet-tools.mdhttps://github.com/WeihanLi/SparkTodo
http://wiki.neutronadmin.com/news/135996/

相关文章:

  • 花都区手机版网站建设wordpress支持的语言
  • 做音乐网站要注意什么网站建设的费用入账
  • 新东家网站建设织梦怎么制作网站
  • 用哪个网站做首页好南宁网站优化
  • 企业网站开发费用如何在百度上建立网站
  • 网站建设分几类搜网站网
  • 深圳 网站设计公司商标在线设计
  • 网站专题特点临潼区建设局网站
  • 兵团住房和城乡建设局网站wordpress 爬虫插件
  • 关于集团网站建设申请沈阳恢复营业通知
  • 网站建设国内现状施工企业安全生产评价标准
  • 做网站没流量丈哥seo博客工具
  • 怎么删除织梦做的网站搜索引擎优化基本
  • 网站开发信息淄博网站制作高端
  • 扬州网站建设文章网站推广是干嘛的
  • 临海最火自适应网站建设重庆有名的网站建设
  • 做网站cnfg影视网站怎么做内链
  • 企业形象通用网站专业网站建站公司
  • 推荐个在广州做网站的全媒体广告加盟
  • 常熟网站公司网站打开显示建设中
  • 柯林建站程序江西网站开发哪家好
  • 旅游做的视频网站杭州专业做网站的
  • wordpress 音乐站天健emp软件开发平台
  • 网站发布方式有哪些国内旅行做行程网站
  • 域名备案和网站备案是一回事吗找做仿网站
  • 建设公司网站新闻宣传管理制度郑州遗像制作
  • 怎么制作自己的小网站天津红桥网站建设
  • 网站加载很慢企业网站的功能有哪些
  • 网站站长指南爱站工具包手机版
  • 网站建设 推广找山东博达海棠网站注册