diff --git a/Makefile b/Makefile index 614ff1e..cd1c5e5 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ SOURCE = emitter.go gor.go gor_stat.go input_dummy.go input_file.go input_raw.go SOURCE_PATH = /go/src/github.com/buger/gor/ PORT = 8000 FADDR = :8000 -RUN = docker run -v `pwd`:$(SOURCE_PATH) -p 0.0.0.0:$(PORT):$(PORT) -t -i gor:go +RUN = docker run -v `pwd`:$(SOURCE_PATH) -p 0.0.0.0:$(PORT):$(PORT) -i -t gor BENCHMARK = BenchmarkRAWInput TEST = TestRawListenerBench VERSION = DEV-$(shell date +%s) @@ -12,6 +12,9 @@ FADDR = ":8000" release: release-x64 release-mac +release-bin: + docker run -v `pwd`:$(SOURCE_PATH) -t --env GOOS=linux --env GOARCH=amd64 -i gor go build -tags netgo $(LDFLAGS) + release-x64: docker run -v `pwd`:$(SOURCE_PATH) -t --env GOOS=linux --env GOARCH=amd64 -i gor go build -tags netgo $(LDFLAGS) && tar -czf gor_$(VERSION)_x64.tar.gz gor && rm gor diff --git a/emitter.go b/emitter.go index e22595a..5741345 100644 --- a/emitter.go +++ b/emitter.go @@ -47,6 +47,8 @@ func CopyMulty(src io.Reader, writers ...io.Writer) (err error) { filteredRequests := make(map[string]time.Time) filteredRequestsLastCleanTime := time.Now() + i := 0 + for { nr, er := src.Read(buf) @@ -115,17 +117,22 @@ func CopyMulty(src io.Reader, writers ...io.Writer) (err error) { err = er break } - } - // Clean up filtered requests for which we didn't get a response to filter - now := time.Now() - if now.Sub(filteredRequestsLastCleanTime) > 60 * time.Second { - for k, v := range filteredRequests { - if now.Sub(v) > 60 * time.Second { - delete(filteredRequests, k) + // Run GC on each 1000 request + if i % 1000 == 0 { + // Clean up filtered requests for which we didn't get a response to filter + now := time.Now() + if now.Sub(filteredRequestsLastCleanTime) > 60 * time.Second { + for k, v := range filteredRequests { + if now.Sub(v) > 60 * time.Second { + delete(filteredRequests, k) + } + } + filteredRequestsLastCleanTime = time.Now() } } - filteredRequestsLastCleanTime = time.Now() + + i++ } return err