Go 1.12中出现的top命令RES参数异常增高的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 1.12中出现的top命令RES参数异常增高的问题相关的知识,希望对你有一定的参考价值。

参考技术A

偶然在生产上部署了一个版本之后发现,机器不断重启报警,后经过查询linux日志发现,原来是因为服务占用内存过高被内核给kill掉了。接下来就是查问题,本来以为是内存泄漏,上了pprof工具之后发现,内存占用稳定在2.6g,而top命令则很快看到 RES 参数暴涨到12g+(机器内存16g)后被内核杀掉。百思不得其解。后来在翻阅Go1.12发布说明时看到一段话:

原文链接: https://golang.google.cn/doc/go1.12#runtime

这段话的关键在于,Go1.12中使用的新的 MADV_FREE 模式,这个模式会更有效的释放无用的内存,但可能会让 RSS 增高,RSS是什么呢?Resident Set Size 常驻内存集,而top中 RES 参数的含义是进程使用的、未被换出的物理内存大小,也即常驻内存集。看到这里,试着在程序运行时加上这个参数 GODEBUG=madvdontneed=1 ,果然,内存稳定在2.7g,问题就此解决。

golang 目录

go语言介绍

为什么要学习go语言

开发环境准备

从零开始搭建Go语言开发环境

VS Code配置Go语言开发环境(建议使用goland)

go语言基础

Go语言基础之变量和常量

Go语言基础之基本数据类型

Go语言基础之运算符

Go语言基础之流程控制

Go语言基础之数组

Go语言基础之切片

Go语言基础之map

Go语言基础之指针

Go语言基础之函数

Go语言基础之结构体

go语言基础之包

go语言基础之接口

Go语言基础之反射

Go语言基础之并发

Go语言基础之网络编程

Go语言基础之单元测试

Go语言基础之文件操作

Go语言常用标准库

go语言标准库之fmt

go语言标准库之time

go语言标准库之flag

go语言标准库之log

go语言标准库之strconv

go语言标准库之http/template

Go语言基础之net/http

Go标准库Context

数据库相关

Go语言操作MySQL

go操作redis

前端相关

前端之html

前端之CSS

前端之JavaScript

前端之jquery

其他

go mod

GO pprof性能调优

NSQ

protobuf

go操作kafka

go操作etcd

Elasticsearch

web开发

Gin框架介绍及使用

第三方日志库logrus使用

Cookie和Session

上述文章转自:https://www.liwenzhou.com/

以上是关于Go 1.12中出现的top命令RES参数异常增高的问题的主要内容,如果未能解决你的问题,请参考以下文章

Top命令中VIRT,RES,SHR的含义

Top命令中VIRT,RES,SHR的含义

Top命令中 VIRT,RES,SHR,DATA的含义

剖析top命令显示的VIRT RES SHR值

linux top命令VIRT,RES,SHR,DATA的含义

1.12 处理异常