Golang什么时候会触发GC
1、其实在Golang 内部所有的GC都是通过 gcStart() 函数,然后指定一个 gcTrigger 的参数来开始的,而手动触发指定的条件值为 gcTriggerCycle 。 gcStart 是一个很复杂的函数,有兴趣的可以看一下源码实现。
2、Minor GC触发条件:当Eden区满时,触发Minor GC。
3、当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。
4、最简单的分代式GC策略,按HotSpot VM的serial GC的实现来看,触发条件是:young GC:当young gen中的eden区分配满的时候触发。
5、也就是说 频繁的GC会增加应用的卡顿。 如果内存在某以阶段的峰值达到了内存空间的阈值,或者频繁地发生内存峰值(毛刺现象),刚好在这个峰值时,需要申请一块较大的内存,就会由于对 内存空间不足而导致OOM异常。
6、简单说,触发条件就是某GC算法对应区域满了,或是预测快满了。比如,各种Young GC的触发原因都是eden区满了.条件,Minor GC 执行时暂停的时间将会长很多。
prometheus中自带的查询指标定义解析
Gauge 类型代表一个可以任意变化的指标数据,其可增可减。
Prometheus有4大指标类型(Metrics Type),分别是Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)和Summary(摘要)。
在Prometheus的配置文件中,配置了相关的Target之后,这些指标就可以从Prometheus中查询到。
通过指定kubernetes_sd_config的模式为endpoints,Prometheus会自动从Kubernetes中发现到所有的endpoints节点并作为当前Job监控的Target实例。
指标drop keep的方式是丢弃正则匹配的metric,保留其余指标,这种方式适合确定要优化的指标,仅优化部分指标。