讓 Go 二進(jìn)制文件實現(xiàn)一個 http 服務(wù)器:package mainimport ( "net/http")func main() { http.ListenAndServe(":8080", nil)}它將以大約 850 kb 的內(nèi)存開始。通過您的網(wǎng)絡(luò)瀏覽器向它發(fā)送一些請求。觀察它迅速上升到 1 mb。如果你等待,你會看到它永遠(yuǎn)不會下降。現(xiàn)在用 Apache Bench(使用下面的腳本)敲打它,看看你的內(nèi)存使用量不斷增加。一段時間后,它最終將穩(wěn)定在 8.2 MB 左右。編輯:它似乎并沒有停在 8.2,而是顯著減慢。目前為 9.2 且仍在上升。簡而言之,為什么會發(fā)生這種情況?我使用了這個shell腳本:while [ true ]do ab -n 1000 -c 100 http://127.0.0.1:8080/ sleep 1end在試圖深入了解這一點的同時,我試圖調(diào)整設(shè)置。我試過關(guān)閉 usingr.Close = true以防止 Keep-Alive。似乎沒有任何效果。我最初是在嘗試確定我正在編寫的程序中是否存在內(nèi)存泄漏時發(fā)現(xiàn)的。它有很多 http 處理程序和 I/O 調(diào)用。檢查完我已經(jīng)關(guān)閉了所有數(shù)據(jù)庫連接后,我一直看到它的內(nèi)存使用率上升。我的程序穩(wěn)定在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 關(guān)注
- 282 瀏覽
添加回答
舉報
0/150
提交
取消