为什么 golang 堆配置文件中的“Total MB”小于顶部的“RES”?

2024-05-01

我有一个用 go 编写的服务,在运行时需要 6-7G 内存(RES 在顶部)。所以我使用 pprof 工具试图找出问题所在。

go tool pprof --pdf http://<service>/debug/pprof/heap > heap_prof.pdf

但结果只有大约 1-2G 内存(pdf 中的“Total MB”)。剩下的在哪里?

我尝试使用 GOGC=off 来分析我的服务,结果“Total MB”与顶部的“RES”完全相同。看来内存已被GC但尚未返回内核将不会被分析。

任何想法?

P.S,我已经在 1.0.3 和 1.1rc3 中进行了测试。


这是因为 Go 目前不会将 GC 对象的内存返还给操作系统,准确地说,仅适用于小于预定义限制(32KB)的对象。相反,内存被缓存以加速未来的分配。另外,看来这个问题将来会得到解决TODO https://groups.google.com/d/msg/golang-nuts/WBlJjT-zu7E/hJJRSBGfKsIJ.

编辑: 新的 GC 行为:如果内存一段时间(大约 5 分钟)没有使用,运行时将建议内核从未使用的虚拟范围中删除物理映射。可以通过调用强制执行此过程runtime.FreeOSMemory()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 golang 堆配置文件中的“Total MB”小于顶部的“RES”? 的相关文章

  • 如何从 golang fyne 容器中删除对象

    我正在开发 GUI 应用程序 需要动态添加和删除 gui 元素 我想知道是否有办法从 golang fyne 容器中删除元素 在下面的示例代码中 我创建了容器并动态添加元素 现在我希望能够删除这些元素而不是隐藏它们 我尝试的一个 解决方案
  • 记录 http.ResponseWriter 内容

    Premise 我发现了类似的问题 但不适用于我的情况 因此请不要将其标记为重复 我在 Go 中有一个 HTTP 服务器 并且创建了一个中间件记录请求 响应时间 我也想记录响应 我用过httputil DumpRequest在一个名为的函数
  • 带有导出字段的私有类型

    在 Go 教程的第二天有这样的练习 为什么拥有带有导出字段的私有类型会很有用 例如 package geometry type point struct X Y int name string 请注意point是小写的 因此不会导出 而字段
  • Goroutine 是如何工作的? (或者:goroutines 和操作系统线程的关系)

    其他 goroutine 如何在调用系统调用时继续执行 当使用 GOMAXPROCS 1 时 据我所知 当调用系统调用时 线程会放弃控制权 直到系统调用返回 Go 如何在不为每个阻塞系统调用 goroutine 创建系统线程的情况下实现这种
  • 将 Websocket 消息发送到 Go 中的特定通道(使用 Gorilla)

    我对 Go 很陌生 并且发现自己使用套接字作为我的第一个项目 这是一个多余的问题 但我无法理解如何将 websocket 更新发送到 Go 中的特定通道 使用 Gorilla 我在用此链接中的代码示例 https github com go
  • 限制 FormFile 中的文件大小

    我让用户使用 FormFile 上传文件 我应该在什么时候检查文件大小是否太大 当我做 file header fileErr r FormFile file 文件对象已经创建 那么我是否已经产生了读取整个文件的成本 https golan
  • 正则表达式不匹配

    我正在尝试以下代码 d byte x01 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x80J x13 x80SQ x80L xe0 x80 x92 x80L x80H xe0 r regexp Must
  • 无法将字符串解组为 int64 类型的 Go 值

    我有结构 type tySurvey struct Id int64 json id omitempty Name string json name omitempty I do json Marshal在 HTML 页面中写入 JSON
  • K8s更改配置映射并更新应用程序日志级别

    我想更改在 K8S 上运行的 Golang 应用程序的登录配置 我在本地尝试了以下代码 它按预期工作 我正在使用 viper 来监视配置文件更改 这是带有日志配置的配置图 apiVersion v1 kind ConfigMap data
  • Go 编程 - 使用指针绕过访问权限

    假设我的项目有以下层次结构 fragment fragment go main go 并且在fragment go我有以下代码 只有一个 getter 没有 setter package fragment type Fragment str
  • 将 []string 传递给需要可变参数的函数

    为了不一遍又一遍地重复我的自我 我想创建一个处理运行一些命令的函数 func runCommand name string arg string error cmd exec Command name arg if err cmd Run
  • Google App Engine Golang 没有这样的文件或目录

    我正在用 Go 开发一个 Google App Engine 项目 并陷入了读取文件的困境 事实上 应用程序在本地运行得很好 然而 部署时 它会恐慌告诉我没有这样的文件或目录 这是我的 fileValue 方法 func fileValue
  • 数据库连接最佳实践

    我有一个使用 net http 的应用程序 我使用 http 注册了一些处理程序 这些处理程序需要从数据库中获取一些内容 然后才能继续编写响应并完成请求 我的问题是连接到该数据库的最佳实践是什么 我希望它能够以每分钟 1 个请求或每秒 10
  • Go SQL查询不一致

    我在执行查询时遇到一些非常奇怪的不一致 并且想知道是否有人知道原因 想象一下我有一个定义如下的结构 type Result struct Afield string db A Bfield interface db B Cfield str
  • Golang 按位运算以及一般字节操作

    我有一些 C 代码 可以对字节执行一些按位运算 我正在尝试在 golang 中做同样的事情 但遇到了困难 C 中的示例 byte a c byte data int j c data j c byte c j c a c 0xFF c 0x
  • 为什么我的 SQL 占位符没有被替换(使用 Go pq)?

    根据文档 我正在这样做 var thingname string asdf var id int err database QueryRow SELECT id from things where thing thingname Scan
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • 在 Go 中使用电子邮件地址创建证书签名请求 (CSR)

    我尝试使用 crypto x509 包生成 CSR 但没有找到将 emailAddress 字段添加到其主题中的方法 根据文档证书申请 http golang org pkg crypto x509 CertificateRequest结构
  • Go 无法推断赋值中的类型:“non-name on left side of :=”

    该片段按预期工作play golang org p VuCl OKMav http play golang org p VuCl OKMav i 10 next 11 prev i i next 然而这个几乎相同的片段给出了non name
  • 错误“binary.Write:无效类型”是什么意思?

    下面显示的代码 我创建了一个结构类型并希望将其编码为二进制 但它显示binary Write invalid type main Stu错误 我读过一些类似的代码 但我找不到为什么我的代码不起作用 type Stu struct Name

随机推荐

  • 如何通过按删除按钮从 ListView 中删除选定的项目?

    我想从 ListView 中删除一个或多个选定的项目 最好的方法是什么 我正在使用 C 和 dotnet Framework 4 您可以通过迭代来删除所有选定的项目ListView SelectedItems http msdn micro
  • Python 3.1:C3 方法解析顺序

    钻石型继承的一个非常简单的例子 class Root def f self print Root class A Root pass class B Root def f self print B class AB A B pass AB
  • 当使用 async_write_some 和 async_write 时

    我正在阅读 Boost Asio 的文档 它说 boost asio async write some可能不会将所有数据传输到对等方 考虑使用async write如果您需要确保在异步操作完成之前写入所有数据 请使用该函数 所以这是我的问题
  • VS安装时找不到符合以下参数的产品

    我已经尝试了 StackOverflow 和 VS 开发人员社区中提供的所有解决方案 但无法解决该错误 A product matching the following parameters cannot be found channelI
  • 我在 iText 中的希伯来语文本是左对齐的

    我使用以下代码在 iText 中生成希伯来语文本 它工作得很好 创建希伯来字体 并使文本从右到左流动 但文本是左对齐而不是右对齐 谁能帮我让它右对齐吗 请注意 我尝试使多列文本右对齐 并使段落右对齐 但无济于事 Thanks static
  • 设置 setAttribute() 进行行格式、line_spacing、SPACING_AFTER、SPACING_BEFORE

    我正在尝试从模板文件在 Google 文档中生成报告 当它复制文档时 它会将所有格式重置为用户的默认格式 而不是原始文档中的格式 我尝试了以下方法来尝试在文档 tableRow 和 tableCell 级别上设置格式 但创建报告时行距为 1
  • 了解 AVCaptureSession 会话预设的分辨率

    我正在 iOS 中访问相机并使用会话预设 如下所示 captureSession sessionPreset AVCaptureSessionPresetMedium 相当标准的东西 但是 我想提前知道由于此预设而获得的视频的分辨率 特别是
  • 有没有办法用 Vim 自动重新格式化大括号?

    我想重新格式化一些代码 如下所示 if cond foo to if cond foo 由于这是C代码 所以我一直在看cindent cinoptions与使用 但它似乎不处理多行规则 我一直在看formatoptions与使用gq 而且似
  • 如何在我的网站中创建全局搜索[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在我的网站中创建全局搜索 该网站是内部网站 无法在网上使用 我无法使用 Google 搜索来实现此目的 我的信息全部存储在不同的
  • 增加 Instagram API 350 个请求限制

    根据开发人员文档 客户端每小时可以发出 5000 个请求 但目前我的应用程序被限制为每小时 350 个请求 我收到的错误代码是 400 消息是 已超出每小时最大请求数 您在过去一小时内发出了 XXX 个请求 超过了允许的 350 个请求 您
  • 静态资源的 URI 中的上下文路径,我真的需要指定它吗?

    我有一个简单的网络应用程序 webapp static images a gif pages test html WEB INF pages test jsp 在test html中 有 img src static images a gi
  • 背景重复 x/y 在 Firefox/Safari 中不起作用

    我有下面的代码表明background repeat x y由于某些原因 它在 FireFox 上不起作用 它只是删除了这些样式 但并不是说它们是不正确的 它们没有在某处被覆盖 当我尝试将这些风格结合在一起时 background 它也将其
  • FORTRAN 写()

    在开始之前 我必须先声明一下 我是 FORTRAN 的新手 我正在维护 1978 年的一段遗留代码 它的目的是从文件中读取一些数据值 处理这些值 然后将处理后的值输出到另一个文本文件 给出以下 FORTRAN 代码 INTEGER NM S
  • 使用 FocusScope.of(context).unfocus() 重建小部件树

    我有这个例子 override Widget build BuildContext context return Scaffold body SafeArea child Padding padding const EdgeInsets a
  • 未找到列:1054 未知列 laravel

    所以我尝试用 laravel 制作一个表单 但除了新版本之外 他们删除了表单 但我可以让它运行 所以这里是 Route post register function user new User user gt u n Input get u
  • URL中的gs_upl是什么意思?

    在任何谷歌搜索 URL 中 gs upl 是什么意思 例如 那么 gs upl 1045l1663l0l3648l4l4l0l0l0l0l258l682l0 3 1l4l0 在这里意味着什么 从构建的脚本gs upl j 我找到 funct
  • jquery脉动文本

    我正在使用 jquery 来使文本脉动 一切都很好 但我无法理解某些事情 我只想脉动 x 次 然后停止 我正在使用以下代码来使类产生脉动 document ready function function pulsate pulsate an
  • 何时使用Statement而不是PreparedStatement?

    何时使用语句而不是准备好的语句 我想在没有参数的查询中使用语句 但为什么不使用准备好的语句 对于没有参数的查询 哪一个更快 我想在没有参数的查询中使用语句 但为什么不使用准备好的语句 那还差得远 PreparedStatements 用于返
  • aria2c - 有什么办法只保留失败下载的列表吗?

    我在用aria2c下载以文本文件形式组织的相当大的 url 列表 6000 基于此gist https gist github com jonbakerfish 0f7877c050b648169e0958ea2e2c6aca 我使用以下脚
  • 为什么 golang 堆配置文件中的“Total MB”小于顶部的“RES”?

    我有一个用 go 编写的服务 在运行时需要 6 7G 内存 RES 在顶部 所以我使用 pprof 工具试图找出问题所在 go tool pprof pdf http