Go语言限制内存分配?
我正在寻找一种限制 Go 语言内存使用的方法。我用Go语言实现的应用程序有大量数据必须加载到主内存中,因此我想将进程的最大内存大小限制为用户指定的大小。
实际上,在 C 语言中,我积累了 malloc 内存的大小来做到这一点,但我不知道如何在 Go 语言中做同样的事情。
请告诉我是否有办法做到这一点。
谢谢。
I'm finding a way to limit the memory usage in Go language. My application implementing with Go language has a big data that must be loaded in main memory, so I want to limit the maximum memory size of the process to the size specified by the user.
In C language, actually, I accumulate the sizes of malloc'ed memory to do that, but I don't know how to do same thing in Go language.
Please let me know if there is a way to do it.
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Go 垃圾收集器不是确定性的,而且是保守的。因此,使用 runtime.MemStats 变量对于您的目的来说并不准确。
通过使用用户输入设置允许一次加载到进程中的最大数据大小来修复您的大致内存使用量。
The Go garbage collector is not deterministic and it is conservative. Therefore, using the runtime.MemStats variable is not going to be accurate for your purpose.
Fix your approximate memory usage by setting the maximum size of data that you are going to allow to be loaded at one time into a process using the input from the user.
也许您想将 ulimit 与您的 go 代码结合使用?
Perhaps you want to use ulimit in conjunction with your go code?
您可以通过 runtime/debug.SetMemoryLimit 执行此操作
You can do this via runtime/debug.SetMemoryLimit
除了 runtime.MemStats 你还可以使用 gosigar 来监控系统内存。
Besides runtime.MemStats you could use gosigar to monitor system memory.