登录
首页 >  Golang >  Go问答

如何在 Go 游戏中正确寻找内存泄漏

来源:stackoverflow

时间:2024-02-29 10:12:25 453浏览 收藏

本篇文章向大家介绍《如何在 Go 游戏中正确寻找内存泄漏》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我正在用 Go 编写一个游戏。我被告知我的代码正在泄漏内存。查明泄漏原因的正确方法是什么?

我知道 pprof 存在,但据我所知,当您的应用程序使用 http 包时可以使用它,并且我的应用程序是一个简单的游戏,它不使用任何网络连接。


解决方案


您当然可以使用 runtime/pprof package 在没有 http 服务器的情况下创建配置文件。还有 dave cheney 的 github.com/pkg/profile,它是带有更简单 api 的 runtime/pprof 的包装器。例如,您可以使用信号处理程序来启用和禁用分析。

话虽这么说,没有什么可以阻止您启动 http 服务器,只是为了 pprof。我发现这更方便,因为这样您就可以轻松地根据需要创建任何配置文件。

// +build debug

package main

import (
    "log"
    "net/http"
    _ "net/http/pprof/"
)

func init() {
    log.Println("Launching pprof server")
    go func() { log.Fatal(http.ListenAndServe("localhost:3030", nil)) }()
}

这使用了构建标签,因此您可以在开发中启用服务器,但将其从生产构建中排除。使用 -tags debug 进行编译以启用服务器。有关详细信息,请参阅 Build Constraints

您可以使用 https://golang.org/pkg/runtime/pprof/ 包在磁盘上写入内存配置文件(假设您可以每分钟执行一次)。之后,只需在其中一些上运行 go 工具 pprof (inuse_space 模式),看看是否有一些部分 inuse_space 正在增长

到这里,我们也就讲完了《如何在 Go 游戏中正确寻找内存泄漏》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>