讓 Go 二進制文件實現一個 http 服務器:package mainimport ( "net/http")func main() { http.ListenAndServe(":8080", nil)}它將以大約 850 kb 的內存開始。通過您的網絡瀏覽器向它發送一些請求。觀察它迅速上升到 1 mb。如果你等待,你會看到它永遠不會下降?,F在用 Apache Bench(使用下面的腳本)敲打它,看看你的內存使用量不斷增加。一段時間后,它最終將穩定在 8.2 MB 左右。編輯:它似乎并沒有停在 8.2,而是顯著減慢。目前為 9.2 且仍在上升。簡而言之,為什么會發生這種情況?我使用了這個shell腳本:while [ true ]do ab -n 1000 -c 100 http://127.0.0.1:8080/ sleep 1end在試圖深入了解這一點的同時,我試圖調整設置。我試過關閉 usingr.Close = true以防止 Keep-Alive。似乎沒有任何效果。我最初是在嘗試確定我正在編寫的程序中是否存在內存泄漏時發現的。它有很多 http 處理程序和 I/O 調用。檢查完我已經關閉了所有數據庫連接后,我一直看到它的內存使用率上升。我的程序穩定在433 MB左右。這是 Goenv 的輸出:GOARCH="amd64"GOBIN=""GOCHAR="6"GOEXE=""GOHOSTARCH="amd64"GOHOSTOS="darwin"GOOS="darwin"GOPATH="/Users/mark/Documents/Programming/Go"GORACE=""GOROOT="/usr/local/go"GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"TERM="dumb"CC="clang"GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fno-common"CXX="clang++"CGO_ENABLED="1"
- 1 回答
- 0 關注
- 283 瀏覽
添加回答
舉報
0/150
提交
取消