我想在内存非常有限的设备上执行使用 Go 编写的“Hello world”程序。
在 Linux 上运行它时,当前的内存占用似乎非常高(64MB VM Size 和 40MB VM Data for hello world)。
如何配置 Go 运行时环境以使用更少的内存?
我想在内存非常有限的设备上执行使用 Go 编写的“Hello world”程序。
在 Linux 上运行它时,当前的内存占用似乎非常高(64MB VM Size 和 40MB VM Data for hello world)。
如何配置 Go 运行时环境以使用更少的内存?
请注意,名称中带有“虚拟”的内存使用指标无法分析,因为它们是虚拟的。
Go 的运行时(对于由gc
工具链构建的二进制文件,gccgo
可能使用它自己的分配方法——我不确定)在 Linux 上使用所谓的“竞技场分配器”,它在启动时告诉操作系统它想要“拥有”一个一个非常大的内存区域,操作系统承认这一点,但没有真正分配内存(即没有物理内存页面),真正的分配只有在进程真正请求内存时才会发生。
因此,要分析的唯一合理内存参数是RSS
“驻留集大小”,它是映射到进程地址空间的物理内存量——它物理分配和拥有的内存——而不是虚拟统计信息。请参阅this以获得很好的解释,并大致浏览一下。