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

Debugging go http服务器和fasthttp中的内存泄漏,debugging,go,memory-leaks,server,fasthttp,Debugging,Go,Memory Leaks,Server,Fasthttp,我的代码是一个简单的fasthttp服务器,就像它的github示例一样 但它有一个未知的内存泄漏。 然后我试图找到它,并清除了我的代码,它再次出现了问题 然后,我只运行了官方示例,甚至还有内存泄漏(这意味着我观察了windows process manager上的内存使用情况,它使用的内存在负载中增长,并且在windows崩溃之前,go不会释放) 然后我通过一个非常简单的hello world服务器使用std net/http,我又遇到了这个问题。我的内存使用随着每个请求而增长,Go不会释放它

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

然后,我只运行了官方示例,甚至还有内存泄漏(这意味着我观察了windows process manager上的内存使用情况,它使用的内存在负载中增长,并且在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)
    }
}


因此,您应该删除
r.Body.Close()
调用,因为它不是必需的。

这不是库的原因,也不是bug。 这是GC行为的原因。这不是内存泄漏。
学习更多关于Go的GC如何工作的知识,以理解并完全不用担心。

描述工作负载。您是否在使用测试工具,从web浏览器或其他方式进行测试?说得清楚一点,你是说运行这个程序会使Windows崩溃吗?不,我只是使用失眠测试和opera浏览器,但我请求了好几次。是的,当我试图提供一个大文件来下载我的windows时,由于内存不足而挂起问题中的代码不提供大文件。请发布您的实际代码。我无法放置我的代码,但此代码的泄漏原因是我的代码为什么也泄漏的答案,因此我的代码类似于http ServeContent问题中的代码不会泄漏。请用更新问题。那么为什么它的记忆在增长呢?这可能是Go 1.11中的一个bug吗?
// The Server will close the request body. The ServeHTTP
// Handler does not need to.