登录
首页 >  Golang >  Go问答

go http 服务器和 fasthttp 中的内存泄漏

来源:stackoverflow

时间:2024-04-10 09:33:35 289浏览 收藏

今天golang学习网给大家带来了《go http 服务器和 fasthttp 中的内存泄漏》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我的代码是一个简单的 fasthttp 服务器,就像它的 github 示例一样 但这有一个未知的内存泄漏。 然后我试图找到它并清除我的代码,但它又出现了这个问题。

然后我只运行了官方示例,甚至存在内存泄漏(这意味着我观察 windows 进程管理器上的内存使用情况,其使用的内存在负载中增长,并且即使过了一段时间直到我的 windows 崩溃,go 也不会释放) .

然后我通过一个非常简单的 hello world 服务器使用了 std net/http,我又遇到了这个问题。我的内存使用量随着每个请求而增长,而 go 不会释放它。

我的版本是go 1.11.2 windows/amd64

这是我的代码,有这个问题:

package main

import (
    "net/http"
    "strings"
)

func sayHello(w http.ResponseWriter, r *http.Request) {
    message := r.URL.Path
    message = strings.TrimPrefix(message, "/")
    message = "Hello " + message
    w.Write([]byte(message))
    r.Body.Close()
}
func main() {
    http.HandleFunc("/", sayHello)
    if err := http.ListenAndServe(":8080", nil); err != nil {
        panic(err)
    }
}

解决方案


这不是库的原因,也不是错误。 这是 gc 行为的原因。这不是内存泄漏。 多研究一下go的gc是如何工作的就可以理解了,完全不用担心。

根据Go http.Request documentation

// The Server will close the request body. The ServeHTTP
// Handler does not need to.

因此您应该删除 r.body.close() 调用,因为不需要它。

好了,本文到此结束,带大家了解了《go http 服务器和 fasthttp 中的内存泄漏》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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