英文:
How to set memory limit while running golang application in local system
问题
我想在我的Windows机器上为Go应用程序设置堆大小。
在Java中,我们通常在IntelliJ中提供-Xms设置作为虚拟机参数,但是如何在Go语言中提供类似的设置并为Go应用程序设置内存限制呢?
我尝试了以下方法:
<env name="GOMEMLIMIT" value="2750MiB" />
但是没有起作用。
我们正在使用Go 1.6.2版本。
英文:
i want set heap size for go application in my windows machine
In java we used to provide -Xms settings as vm arguments in intellij but how to provide similar setting in golang and set memory limit for the go application.
Tried with
<env name="GOMEMLIMIT" value="2750MiB" />
but not working
we are using go 1.6.2 version.
答案1
得分: 2
Go 1.19增加了对软内存限制的支持:
运行时现在包括对软内存限制的支持。这个内存限制包括Go堆和运行时管理的所有其他内存,但不包括二进制文件本身的映射、其他语言管理的内存以及操作系统代表Go程序持有的内存等外部内存来源。可以通过runtime/debug.SetMemoryLimit
或等效的GOMEMLIMIT
环境变量来管理此限制。
你不能设置一个硬限制,因为这会导致你的应用程序在需要更多内存时发生故障。
要从应用程序中设置软限制,只需使用以下代码:
debug.SetMemoryLimit(2750 * 1 << 20) // 2750 MB
要在应用程序外部设置软限制,使用GOMEMLIMIT
环境变量,例如:
GOMEMLIMIT=2750MiB
但请注意,这样做可能会降低应用程序的性能,因为它可能会更频繁地进行垃圾回收,并更积极地将内存返回给操作系统,即使应用程序将再次需要它。
英文:
Go 1.19 adds support for a soft memory limit:
> The runtime now includes support for a soft memory limit. This memory limit includes the Go heap and all other memory managed by the runtime, and excludes external memory sources such as mappings of the binary itself, memory managed in other languages, and memory held by the operating system on behalf of the Go program. This limit may be managed via runtime/debug.SetMemoryLimit
or the equivalent GOMEMLIMIT
environment variable.
You can't set a hard limit as that would make your app malfunction if it would need more memory.
To set a soft limit from your app, simply use:
debug.SetMemoryLimit(2750 * 1 << 20) // 2750 MB
To set a soft limit outside of your app, use the GOMEMLIMIT
env var, e.g.:
GOMEMLIMIT=2750MiB
But please note that doing so may make your app's performance worse as it may enforce more frequent garbage collection and return memory to OS more aggressively even if your app will need it again.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论