我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Golang Linux显示的字节数超过pprof运行时的MemStats字节数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Golang Linux显示的字节数超过pprof运行时的MemStats字节数

来到编程网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Golang Linux显示的字节数超过pprof运行时的MemStats字节数》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我有一个套接字客户端golang程序。刚启动时,linux /proc/pid/status 显示进程 rss 为 15204 kb,但 pprof 报告显示 heapalloc 约为 1408 kb,存在约 14000kb 的差距。 我的问题:

1、为什么差别这么大?

2、go应用内存是如何分配的?除了堆和栈之外,还有其他内存区域吗?我怎样才能找到这些区域?

3、更重要的是,如何降低它的rss?

cat /proc/pid/status:

umask:  0000
state:  s (sleeping)
tgid:   3393
ngid:   0
pid:    3393
ppid:   2882
tracerpid:      0
uid:    500     500     500     500
gid:    500     500     500     500
fdsize: 32
groups: 500 
nstgid: 3393
nspid:  3393
nspgid: 2881
nssid:  2881
vmpeak:   806492 kb
vmsize:   806492 kb
vmlck:         0 kb
vmpin:         0 kb
vmhwm:     15204 kb
vmrss:     15204 kb
rssanon:            5024 kb
rssfile:           10180 kb
rssshmem:              0 kb
vmdata:    10988 kb
vmstk:       132 kb
vmexe:      5164 kb
vmlib:         8 kb
vmpte:        28 kb
vmpmd:         0 kb
vmswap:        0 kb
threads:        6
sigq:   0/937
sigpnd: 0000000000000000
shdpnd: 0000000000000000
sigblk: 0000000000000000
sigign: 0000000000000001
sigcgt: fffffffe7fc1fefe
capinh: 0000000000000000
capprm: 0000000000000000
capeff: 0000000000000000
capbnd: 0000003fffffffff
capamb: 0000000000000000
cpus_allowed:   3
cpus_allowed_list:      0-1
voluntary_ctxt_switches:        261951
nonvoluntary_ctxt_switches:     21327

go 工具 pprof 堆:

# runtime.MemStats
# Alloc = 1408048
# TotalAlloc = 45071968
# Sys = 10828924
# Lookups = 0
# Mallocs = 889174
# Frees = 885421
# HeapAlloc = 1408048
# HeapSys = 7929856
# HeapIdle = 5677056
# HeapInuse = 2252800
# HeapReleased = 5480448
# HeapObjects = 3753
# Stack = 458752 / 458752
# MSpan = 25120 / 32768
# MCache = 1736 / 16384
# BuckHashSys = 725549
# GCSys = 886912
# OtherSys = 778703
# NextGC = 4194304
# LastGC = 1645757614280889245


正确答案


  1. “为什么差别这么大?”

这是两个不同的指标。人们所说的“内存消耗”是 在现代机器上定义都非常困难。

  • “Go应用内存是如何分配的?”
  • 这是一个实现细节,可能会有所不同。这里没有任何可操作的信息。

    “除了堆和栈之外,还有其他内存区域吗?”

    不,但请注意,堆/堆栈二分法是特定(尽管常见)编译器/编译器版本/系统组合的实现细节。

    “我怎样才能找到这些区域?”你不能。

  • “更重要的是,我怎样才能降低它的 rss?”
  • 通过减少分配的内存量。但请注意,降低 RSS 很可能根本不需要。您可能高估了“大”RSS 的“问题”程度。

    今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Golang Linux显示的字节数超过pprof运行时的MemStats字节数

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Golang Linux显示的字节数超过pprof运行时的MemStats字节数

    来到编程网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Golang Linux显示的字节数超过pprof运行时的MemStats字节数》,介绍一下,希望对大家的知识积累有所帮助,助力实
    Golang Linux显示的字节数超过pprof运行时的MemStats字节数
    2024-04-04

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录