這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
參照的是https://github.com/caibirdme/hand-to-hand-optimize-go 這個文章
寫一段代碼測試
首先自己寫一段demo
裡面負責2件事
doSomeThingOne
genSomeBytes
運行這個程式go run main.go
安裝wrk
To install thewrk,you need only:
git clonehttps://github.com/wg/wrk.git
cd wrk
make
wrk relies on the openssl and luajit, learn more from its github page
Generating requests
Our demo is listening on the port9876,so let's generate some requests for that.
./wrk -c400 -t8 -d5m http://localhost:9876/test
-c400means we have 400 connections to keep open
-t8means we use 8 threads to build requests
-d5mmeans the duration of the test will last for 5 minutes
用這段命令來壓伺服器
觀看結果
Our server is very busy now and we can see some information via browser. Inputlocalhost:9876/debug/pprofyou will see:
然後用命令進入
在這裡能看見各種方法的已耗用時間
但是很不直觀對不對
所以我們安裝Graphviz 在mac下
brew install graphviz
之後再這個(pprof)裡面輸入web
會生產一個svg檔案
用瀏覽器開啟我們就會看到
很顯然gensomebytes裡面的math方法最消耗時間。這個就是我們最佳化的對象
記憶體怎麼看呢?
其實也很方便在
localhost:9876/debug/pprof/profile改成
localhost:9876/debug/pprof/heap
後面的結果一樣。。和cpu一樣可以看到那個heap佔用了大量的記憶體到時候最佳化吧
https://studygolang.com/articles/1720 這個文章裡面的第一個方法就可以做測試記憶體佔用的.
有空試試把