gcAvgS = time.Since(t.StartT).Seconds() / float64(memStats.NumGC)
}
+ reqState := t.ReqPool.PoolState()
+
ResStruct{0, "ok", map[string]any{
"startTime": t.StartT.Format(time.DateTime),
"currentTime": time.Now().Format(time.DateTime),
"state": map[string]any{
"base": map[string]any{
- "reqPoolState": fmt.Sprintf("pooled(%d), nopooled(%d), inuse(%d), nouse(%d), sum(%d)", t.ReqPool.PoolState()...),
+ "reqPoolState": map[string]any{
+ "pooled": reqState[0],
+ "nopooled": reqState[1],
+ "inuse": reqState[2],
+ "nouse": reqState[3],
+ "sum": reqState[4],
+ "qts": reqState[5],
+ },
"numGoroutine": runtime.NumGoroutine(),
"goVersion": runtime.Version(),
},
package genCpuPprof
import (
+ "bytes"
"context"
"runtime/pprof"
+ "sync"
+ "time"
comp "github.com/qydysky/part/component"
pctx "github.com/qydysky/part/ctx"
pfile "github.com/qydysky/part/file"
+ pio "github.com/qydysky/part/io"
)
var Start = comp.NewComp(start)
+var (
+ timer = time.NewTicker(time.Minute)
+ once sync.Once
+)
+
func start(ctx context.Context, file string) error {
if file == "" {
return nil
}
- pgo := pfile.New(file, 0, false)
- if pgo.IsExist() {
- _ = pgo.Delete()
- }
- pgo.Create()
- if err := pprof.StartCPUProfile(pgo.File()); err != nil {
- return err
- }
- go func() {
- ctx1, done1 := pctx.WaitCtx(ctx)
- defer done1()
- <-ctx1.Done()
- pprof.StopCPUProfile()
- pgo.Close()
- }()
+ go once.Do(
+ func() {
+ ctx1, done1 := pctx.WaitCtx(ctx)
+ defer done1()
+
+ var buf bytes.Buffer
+ var bufB = pio.RWC{
+ R: buf.Read,
+ W: buf.Write,
+ C: func() error {
+ buf.Reset()
+ return nil
+ },
+ }
+
+ for {
+ _ = bufB.C()
+
+ if err := pprof.StartCPUProfile(bufB); err != nil {
+ return
+ }
+ select {
+ case <-timer.C:
+ pprof.StopCPUProfile()
+ case <-ctx1.Done():
+ pprof.StopCPUProfile()
+ return
+ }
+ pgo := pfile.New(file, 0, false)
+ if pgo.IsExist() {
+ _ = pgo.Delete()
+ }
+ pgo.Create()
+
+ _ = pgo.CopyFromIoReader(bufB, pio.CopyConfig{})
+
+ pgo.Close()
+ }
+ })
return nil
}
return
case <-ticker.C:
}
- t.log.L(`T: `, fmt.Sprintf("m4sPoolState pooled(%d), nopooled(%d), inuse(%d), nouse(%d), sum(%d)", t.m4s_pool.PoolState()...))
+ t.log.L(`T: `, fmt.Sprintf("m4sPoolState pooled/no(%d/%d), inuse/no(%d/%d), sum(%d), qts(%.2f)", t.m4s_pool.PoolState()...))
}
}()
}
version https://git-lfs.github.com/spec/v1
-oid sha256:c9940341b8d862e7b7b9252d0a40b3f6cb617ccd8b02c718f09aa9960f647478
-size 3419671
+oid sha256:f32a91d369a03a7ddd97bb27d419f98388aab52853bdf5ce927d4be010297aa6
+size 22160
require (
github.com/gotk3/gotk3 v0.6.2
github.com/mdp/qrterminal/v3 v3.2.0
- github.com/qydysky/part v0.28.1-0.20231118053847-e87434eaf9c6
+ github.com/qydysky/part v0.28.1-0.20231125095036-ec6693063745
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
golang.org/x/text v0.14.0
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/qydysky/part v0.28.1-0.20231118053847-e87434eaf9c6 h1:MXi27E51HqeB4SR0WJ2n6/uFSQjS/pWqKNmKIWeGM4I=
-github.com/qydysky/part v0.28.1-0.20231118053847-e87434eaf9c6/go.mod h1:NyKyjpBCSjcHtKlC+fL5lCidm57UCnwEgufiBDs5yxA=
+github.com/qydysky/part v0.28.1-0.20231125095036-ec6693063745 h1:rEURkcADxEtdaOwuENPTnJKz0EfpVjHwFkegjMFWzOM=
+github.com/qydysky/part v0.28.1-0.20231125095036-ec6693063745/go.mod h1:NyKyjpBCSjcHtKlC+fL5lCidm57UCnwEgufiBDs5yxA=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=