aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2018-12-09 00:15:23 -0800
committerChris Lu <chris.lu@gmail.com>2018-12-09 00:15:23 -0800
commitdf4b9df142e2de28747d035aa90e5d00d080141c (patch)
treeb688fe367b03ece0b66f14cff390d4925501fb99
parentec5a305624325b0417c261d7d0fbbd33b3701b7c (diff)
downloadseaweedfs-df4b9df142e2de28747d035aa90e5d00d080141c.tar.xz
seaweedfs-df4b9df142e2de28747d035aa90e5d00d080141c.zip
add memory usage report
-rw-r--r--weed/storage/needle/compact_map_perf_test.go78
1 files changed, 36 insertions, 42 deletions
diff --git a/weed/storage/needle/compact_map_perf_test.go b/weed/storage/needle/compact_map_perf_test.go
index 5c73e01a9..f0d0288bb 100644
--- a/weed/storage/needle/compact_map_perf_test.go
+++ b/weed/storage/needle/compact_map_perf_test.go
@@ -1,38 +1,50 @@
package needle
import (
+ "fmt"
+ "log"
+ "runtime"
"testing"
"os"
- "log"
- "github.com/chrislusf/seaweedfs/weed/util"
. "github.com/chrislusf/seaweedfs/weed/storage/types"
+ "github.com/chrislusf/seaweedfs/weed/util"
)
/*
To see the memory usage:
+go test -run TestMemoryUsage
+The TotalAlloc section shows the memory increase for each iteration.
+
go test -run TestMemoryUsage -memprofile=mem.out
-go tool pprof needle.test mem.out
+go tool pprof --alloc_space needle.test mem.out
+
*/
func TestMemoryUsage(t *testing.T) {
- indexFile, ie := os.OpenFile("../../../test/sample.idx", os.O_RDWR|os.O_RDONLY, 0644)
- if ie != nil {
- log.Fatalln(ie)
- }
- loadNewNeedleMap(indexFile)
+ var maps []*CompactMap
+
+ for i := 0; i < 10; i++ {
+ indexFile, ie := os.OpenFile("../../../test/sample.idx", os.O_RDWR|os.O_RDONLY, 0644)
+ if ie != nil {
+ log.Fatalln(ie)
+ }
+ maps = append(maps, loadNewNeedleMap(indexFile))
- indexFile.Close()
+ indexFile.Close()
+
+ PrintMemUsage()
+ }
}
-func loadNewNeedleMap(file *os.File) {
+func loadNewNeedleMap(file *os.File) *CompactMap {
m := NewCompactMap()
- bytes := make([]byte, NeedleEntrySize*1024)
+ bytes := make([]byte, NeedleEntrySize)
count, e := file.Read(bytes)
for count > 0 && e == nil {
for i := 0; i < count; i += NeedleEntrySize {
@@ -43,44 +55,26 @@ func loadNewNeedleMap(file *os.File) {
if offset > 0 {
m.Set(NeedleId(key), offset, size)
} else {
- //delete(m, key)
+ m.Delete(key)
}
}
count, e = file.Read(bytes)
}
- m.report()
+ return m
}
-// report memory usage
-func (cm *CompactMap) report() {
- overFlowCount := 0;
- overwrittenByOverflow := 0;
- entryCount := 0
- compactSectionCount := 0
- compactSectionEntryCount := 0
- for _, cs := range cm.list {
- compactSectionCount++
- cs.RLock()
- for range cs.overflow {
- overFlowCount++
- entryCount++
- }
- for _, v := range cs.values {
- compactSectionEntryCount++
- if _, found := cs.overflow[v.Key]; !found {
- entryCount++
- } else {
- overwrittenByOverflow++
- }
- }
- cs.RUnlock()
- }
- println("overFlowCount", overFlowCount)
- println("overwrittenByOverflow", overwrittenByOverflow)
- println("entryCount", entryCount)
- println("compactSectionCount", compactSectionCount)
- println("compactSectionEntryCount", compactSectionEntryCount)
+func PrintMemUsage() {
+ var m runtime.MemStats
+ runtime.ReadMemStats(&m)
+ // For info on each, see: https://golang.org/pkg/runtime/#MemStats
+ fmt.Printf("Alloc = %v MiB", bToMb(m.Alloc))
+ fmt.Printf("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc))
+ fmt.Printf("\tSys = %v MiB", bToMb(m.Sys))
+ fmt.Printf("\tNumGC = %v\n", m.NumGC)
+}
+func bToMb(b uint64) uint64 {
+ return b / 1024 / 1024
}