我正在寻找与Java中的[DataContract]
public class Response
{
[DataMember(Name = "AX")]
public AX Ax { get; set; }
}
[DataContract]
public class AX
{
[DataMember(Name = "BX")]
public long Bx { get; set; }
}
类似的选项,即分配Go应用程序可以利用的最大运行时内存。正在检查runtime,但不是全部检查方法。
我尝试用func SetMaxStack()设置类似的东西,(可能非常愚蠢)
-Xmx
之所以要这样做,是因为当前有足够的RAM可用,但是应用程序消耗的内存不会超过4-6%,我在这里可能是错的,但是它可能迫使GC发生了很多事情比所需的速度更快,导致性能问题。
我在做什么
从RDBMS系统获取大型数据集,对其进行处理以在excel中写出。
我正在寻找这样一个选项的另一个原因是限制将最终部署RAM的服务器上的RAM的最大使用量。
对此有任何提示将不胜感激。
答案 0 :(得分:3)
当前稳定的Go(1.10)只有一个旋钮,可用于通过Go运行时执行的垃圾回收来交换内存以降低CPU使用率。
此旋钮称为GOGC
,其描述为
GOGC
变量设置初始垃圾回收目标百分比。当新分配的数据与上一个收集之后剩余的实时数据之比达到此百分比时,将触发收集。默认值为GOGC=100
。设置GOGC=off
将完全禁用垃圾收集器。runtime/debug
程序包的SetGCPercent
函数允许在运行时更改此百分比。参见https://golang.org/pkg/runtime/debug/#SetGCPercent。
因此,基本上将其设置为200
可能会使正在运行的进程的Go运行时可能使用的内存量增加一倍。
已经说过,我会注意到Go运行时实际上试图根据您正在运行的程序的工作量和手头的CPU处理能力来调整其垃圾收集器的行为。 我的意思是,通常情况下,程序不消耗大量RAM并没有什么问题-如果收集器恰好足够快地清除了垃圾而又没有显着地影响性能,那么我没有理由担心:Go的GC是 运行时最激烈的微调之一, 而且实际上效果很好。
因此,您可以尝试采用其他路线: