From 7c2cc61b627a47ca003880f298147e28ddc7935b Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Wed, 20 Apr 2022 17:18:45 -0700 Subject: [PATCH 1/3] Upgrade Dependencies, include Memory Profile in debug info --- go.mod | 4 ++-- go.sum | 12 +++++++++--- lib.go | 6 ++++++ utils/eventHandler.go | 5 ++++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index f1e2f53..3b96a96 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module git.openprivacy.ca/cwtch.im/libcwtch-go go 1.15 require ( - cwtch.im/cwtch v0.16.6 + cwtch.im/cwtch v0.16.7 git.openprivacy.ca/cwtch.im/server v1.4.2 - git.openprivacy.ca/openprivacy/connectivity v1.8.1 + git.openprivacy.ca/openprivacy/connectivity v1.8.3 git.openprivacy.ca/openprivacy/log v1.0.3 github.com/mutecomm/go-sqlcipher/v4 v4.4.2 golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect diff --git a/go.sum b/go.sum index f2d1559..3f75fb4 100644 --- a/go.sum +++ b/go.sum @@ -17,10 +17,10 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cwtch.im/cwtch v0.14.9/go.mod h1:/fLuoYLY/7JHw6RojFojpd245CiOcU24QpWqzh9FRDI= -cwtch.im/cwtch v0.16.4 h1:ytzmQXPdllQdMf9qX5fEq38+eAL4MzsUTcmu6tPZt7c= -cwtch.im/cwtch v0.16.4/go.mod h1:lG9e5RUib+SbX2XsjWtHKJWz9geoIglSAq55LrCm8Io= cwtch.im/cwtch v0.16.6 h1:g/lfs7gIqXHyS+guw2/WYWBQ4RWDBsG8xnJuQjjnVaQ= cwtch.im/cwtch v0.16.6/go.mod h1:lG9e5RUib+SbX2XsjWtHKJWz9geoIglSAq55LrCm8Io= +cwtch.im/cwtch v0.16.7 h1:pTpBgiAudAM3e7wO7LlI2CRonqjjfPYt84mzBdaCZfM= +cwtch.im/cwtch v0.16.7/go.mod h1:Pr/WwQT0hhGqW7ni3uqo2kodLGkIVkh3B7HWKcBkFKk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= @@ -30,11 +30,16 @@ git.openprivacy.ca/cwtch.im/server v1.4.2/go.mod h1:CeE/bThy2UVQ+gx+3ctNt65H9xvE git.openprivacy.ca/cwtch.im/tapir v0.4.9/go.mod h1:p4bHo3DAO8wwimU6JAeZXbfPQ4jnoA2bV+4YvknWTNQ= git.openprivacy.ca/cwtch.im/tapir v0.5.0 h1:bHVZ0GtMe3nkNVY7PoKOyp6f8HHmksdEvhHgfppV/C8= git.openprivacy.ca/cwtch.im/tapir v0.5.0/go.mod h1:dvcAGBGbgKLDIOu6uyBryR6Fpq6v7QUDLev+w7xOh/Y= +git.openprivacy.ca/cwtch.im/tapir v0.5.2 h1:7qJlUGY8RZbI7905BzVEEVB0hxP2GzI3lGiPMaFeRBg= +git.openprivacy.ca/cwtch.im/tapir v0.5.2/go.mod h1:vVEu3CbXdyeMI5s1RkbROe1TBboNroGyJfODw8Ujlo8= +git.openprivacy.ca/cwtch.im/tapir v0.5.3 h1:ei01JCQTXV15IOP00o5hygQCKb3+yCibWGih7yQ5t94= +git.openprivacy.ca/cwtch.im/tapir v0.5.3/go.mod h1:VJitTBzerc+WO53c5XY30P2JD2Nx9mgxuII1FBVwW8E= git.openprivacy.ca/openprivacy/bine v0.0.4 h1:CO7EkGyz+jegZ4ap8g5NWRuDHA/56KKvGySR6OBPW+c= git.openprivacy.ca/openprivacy/bine v0.0.4/go.mod h1:13ZqhKyqakDsN/ZkQkIGNULsmLyqtXc46XBcnuXm/mU= git.openprivacy.ca/openprivacy/connectivity v1.5.0/go.mod h1:UjQiGBnWbotmBzIw59B8H6efwDadjkKzm3RPT1UaIRw= -git.openprivacy.ca/openprivacy/connectivity v1.8.1 h1:OjWy+JTAvlrstY8PnGPBp7Ho04JaKHaQ+YdoLwSdaCo= git.openprivacy.ca/openprivacy/connectivity v1.8.1/go.mod h1:UjQiGBnWbotmBzIw59B8H6efwDadjkKzm3RPT1UaIRw= +git.openprivacy.ca/openprivacy/connectivity v1.8.3 h1:bWM8aQHqHIpobYQcLQ9OsNPoIl+H+4JFWbYGdG0nHlg= +git.openprivacy.ca/openprivacy/connectivity v1.8.3/go.mod h1:UjQiGBnWbotmBzIw59B8H6efwDadjkKzm3RPT1UaIRw= git.openprivacy.ca/openprivacy/log v1.0.2/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw= git.openprivacy.ca/openprivacy/log v1.0.3 h1:E/PMm4LY+Q9s3aDpfySfEDq/vYQontlvNj/scrPaga0= git.openprivacy.ca/openprivacy/log v1.0.3/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw= @@ -361,6 +366,7 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/lib.go b/lib.go index 8eab7ce..e4718eb 100644 --- a/lib.go +++ b/lib.go @@ -14,6 +14,7 @@ import ( "fmt" "io/ioutil" path "path/filepath" + "runtime/pprof" "git.openprivacy.ca/cwtch.im/libcwtch-go/features" @@ -1408,6 +1409,11 @@ func GetDebugInfo() string { debugInfo.HeapInUse = float64(memstats.HeapInuse) / MegaByte debugInfo.SystemMemory = float64(memstats.Sys) / MegaByte + pprof.Lookup("goroutine").WriteTo(os.Stdout, 1) + + f,_ := os.Create("mem.prof") + pprof.WriteHeapProfile(f) + data, _ := json.Marshal(debugInfo) return string(data) } diff --git a/utils/eventHandler.go b/utils/eventHandler.go index fb206b3..4dea732 100644 --- a/utils/eventHandler.go +++ b/utils/eventHandler.go @@ -35,8 +35,11 @@ type EventHandler struct { profileEvents chan EventProfileEnvelope } +// We should be reading from profile events pretty quickly, but we make this buffer fairly large... +const profileEventsBufferSize = 512 + func NewEventHandler() *EventHandler { - eh := &EventHandler{app: nil, appBusQueue: event.NewQueue(), profileEvents: make(chan EventProfileEnvelope)} + eh := &EventHandler{app: nil, appBusQueue: event.NewQueue(), profileEvents: make(chan EventProfileEnvelope, profileEventsBufferSize)} return eh } From e029076b20a64749a017857c1f1723b29599f761 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Thu, 21 Apr 2022 16:04:41 -0700 Subject: [PATCH 2/3] Upgrad Cwtch - Wrap Profiling --- go.mod | 4 ++-- go.sum | 13 ++++--------- lib.go | 10 ++++++---- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 3b96a96..da993e8 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module git.openprivacy.ca/cwtch.im/libcwtch-go go 1.15 require ( - cwtch.im/cwtch v0.16.7 + cwtch.im/cwtch v0.16.8 git.openprivacy.ca/cwtch.im/server v1.4.2 git.openprivacy.ca/openprivacy/connectivity v1.8.3 git.openprivacy.ca/openprivacy/log v1.0.3 @@ -11,4 +11,4 @@ require ( golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a // indirect golang.org/x/text v0.3.7 // indirect -) \ No newline at end of file +) diff --git a/go.sum b/go.sum index 3f75fb4..d0b10ce 100644 --- a/go.sum +++ b/go.sum @@ -17,10 +17,8 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cwtch.im/cwtch v0.14.9/go.mod h1:/fLuoYLY/7JHw6RojFojpd245CiOcU24QpWqzh9FRDI= -cwtch.im/cwtch v0.16.6 h1:g/lfs7gIqXHyS+guw2/WYWBQ4RWDBsG8xnJuQjjnVaQ= -cwtch.im/cwtch v0.16.6/go.mod h1:lG9e5RUib+SbX2XsjWtHKJWz9geoIglSAq55LrCm8Io= -cwtch.im/cwtch v0.16.7 h1:pTpBgiAudAM3e7wO7LlI2CRonqjjfPYt84mzBdaCZfM= -cwtch.im/cwtch v0.16.7/go.mod h1:Pr/WwQT0hhGqW7ni3uqo2kodLGkIVkh3B7HWKcBkFKk= +cwtch.im/cwtch v0.16.8 h1:/RNFVM9DnLtJ1nexvc136X65mabESJd1JVmh0cklP/k= +cwtch.im/cwtch v0.16.8/go.mod h1:Lxn88WAdGJotH3VECLL/uHIFnvf9RfX11YEeoZqmjcw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= @@ -28,16 +26,13 @@ filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7 git.openprivacy.ca/cwtch.im/server v1.4.2 h1:ZcRK1XuWvJzNjYdAvAISD8HcEITPwWbvRiIZGkMKu1k= git.openprivacy.ca/cwtch.im/server v1.4.2/go.mod h1:CeE/bThy2UVQ+gx+3ctNt65H9xvELDfcwBS9qJwOsOg= git.openprivacy.ca/cwtch.im/tapir v0.4.9/go.mod h1:p4bHo3DAO8wwimU6JAeZXbfPQ4jnoA2bV+4YvknWTNQ= -git.openprivacy.ca/cwtch.im/tapir v0.5.0 h1:bHVZ0GtMe3nkNVY7PoKOyp6f8HHmksdEvhHgfppV/C8= -git.openprivacy.ca/cwtch.im/tapir v0.5.0/go.mod h1:dvcAGBGbgKLDIOu6uyBryR6Fpq6v7QUDLev+w7xOh/Y= -git.openprivacy.ca/cwtch.im/tapir v0.5.2 h1:7qJlUGY8RZbI7905BzVEEVB0hxP2GzI3lGiPMaFeRBg= -git.openprivacy.ca/cwtch.im/tapir v0.5.2/go.mod h1:vVEu3CbXdyeMI5s1RkbROe1TBboNroGyJfODw8Ujlo8= git.openprivacy.ca/cwtch.im/tapir v0.5.3 h1:ei01JCQTXV15IOP00o5hygQCKb3+yCibWGih7yQ5t94= git.openprivacy.ca/cwtch.im/tapir v0.5.3/go.mod h1:VJitTBzerc+WO53c5XY30P2JD2Nx9mgxuII1FBVwW8E= +git.openprivacy.ca/cwtch.im/tapir v0.5.4 h1:CUcRVsM82Zx/pfcGqIviycavZcC50wXm67TiQ3mx6WY= +git.openprivacy.ca/cwtch.im/tapir v0.5.4/go.mod h1:VJitTBzerc+WO53c5XY30P2JD2Nx9mgxuII1FBVwW8E= git.openprivacy.ca/openprivacy/bine v0.0.4 h1:CO7EkGyz+jegZ4ap8g5NWRuDHA/56KKvGySR6OBPW+c= git.openprivacy.ca/openprivacy/bine v0.0.4/go.mod h1:13ZqhKyqakDsN/ZkQkIGNULsmLyqtXc46XBcnuXm/mU= git.openprivacy.ca/openprivacy/connectivity v1.5.0/go.mod h1:UjQiGBnWbotmBzIw59B8H6efwDadjkKzm3RPT1UaIRw= -git.openprivacy.ca/openprivacy/connectivity v1.8.1/go.mod h1:UjQiGBnWbotmBzIw59B8H6efwDadjkKzm3RPT1UaIRw= git.openprivacy.ca/openprivacy/connectivity v1.8.3 h1:bWM8aQHqHIpobYQcLQ9OsNPoIl+H+4JFWbYGdG0nHlg= git.openprivacy.ca/openprivacy/connectivity v1.8.3/go.mod h1:UjQiGBnWbotmBzIw59B8H6efwDadjkKzm3RPT1UaIRw= git.openprivacy.ca/openprivacy/log v1.0.2/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw= diff --git a/lib.go b/lib.go index e4718eb..a228383 100644 --- a/lib.go +++ b/lib.go @@ -1396,6 +1396,7 @@ type DebugInfo struct { } func GetDebugInfo() string { + var memstats runtime.MemStats runtime.ReadMemStats(&memstats) @@ -1409,10 +1410,11 @@ func GetDebugInfo() string { debugInfo.HeapInUse = float64(memstats.HeapInuse) / MegaByte debugInfo.SystemMemory = float64(memstats.Sys) / MegaByte - pprof.Lookup("goroutine").WriteTo(os.Stdout, 1) - - f,_ := os.Create("mem.prof") - pprof.WriteHeapProfile(f) + if os.Getenv("CWTCH_PROFILE") == "1" { + pprof.Lookup("goroutine").WriteTo(os.Stdout, 1) + f, _ := os.Create("mem.prof") + pprof.WriteHeapProfile(f) + } data, _ := json.Marshal(debugInfo) return string(data) From 0474d5f327dbfba93bd58dd9c90a066c3d94cefd Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Thu, 21 Apr 2022 16:10:27 -0700 Subject: [PATCH 3/3] Update Readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 42a6968..21e7ae3 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,8 @@ Other version combinations untested and some definitely do not work. - `LOG_FILE` if defined will mean all go logging will go to a file instead of stdout - `LOG_LEVEL` if set to `debug` will cause debug logging to be included in log output +- `CWTCH_PROFILE` if set to `1` will cause a memory profile to be written to `mem.prof` and all active goroutines +written to `stdout` when `DebugInfo()` is called. ## Linux Desktop: