运行时:系统监控

系统监控在Go运行时扮演重要角色,包括强制垃圾回收、释放物理内存、抢占调度、处理系统调用和I/O事件。当垃圾回收器无法自动触发时,系统监控会强制执行;对于长时间未使用的内存,系统监控会建议操作系统释放物理内存;为避免goroutine饿死,系统监控实现抢占调度,确保相对公平;此外,系统监控还负责处理耗时的系统调用和I/O事件的响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统监控本身是一种守护方式来确保有些事情必须要处理。

系统监控的用途

现在很多编程框架都是基于 epoll 来实现异步方式,但是我们有个程序对 epoll 做检查,这种检查要不自己执行,要么写个定时器定期的扫描,然后看看有哪些句柄是返回的。只不过这东西在 Go 的 runtime 是系统监控做这件事。

runtime 三大组件,内存分配器、垃圾回收器、goroutine 调度。实际上除此之外还有系统监控这样一个任务再后台一直在跑,它做些什么事呢?

强制垃圾回收

第一个作用确保垃圾回收肯定被执行,因为垃圾回收器可能会因为某种原因没办法触发,最简单的例子在高峰期的时候分配很多对象,这些对象都是活着,垃圾回收完了以后这些黑色对象是 1GB,按照 Go 语言理论,回收完了以后存活的对象是 1GB,下次回收这预值设置成 2GB,可是低峰期的时候存活的对象可能就是 100MB,很难达到 2GB,就一直触发不了垃圾回收,这就会造成有一大堆对象不被回收,导致内存开销一直居高不下,而垃圾回收器又触发不了。

系统监控程序会定期的检查上次垃圾回收器什么时候执行的,如果发现已经有很长时间没有执行垃圾回收操作了,它就强制执行一次回收。确保当这个预值触发不了的时候总有其他的机制来保障垃圾回收得以正常运行。这是一种保障,也称之为守护。

释放物理内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值