1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-11-23 22:45:11 +02:00

сделал Start_PprofNats()

This commit is contained in:
Nikitin Aleksandr
2025-04-03 14:37:57 +03:00
parent 2bbaed760a
commit 8ee7b43338
108 changed files with 4093 additions and 3502 deletions

View File

@@ -2,16 +2,23 @@
package sync_exchange_connect
import (
"bytes"
"context"
"fmt"
"github.com/ManyakRus/starter/contextmain"
"github.com/ManyakRus/starter/log"
"github.com/ManyakRus/starter/nats_connect"
"github.com/ManyakRus/starter/stopapp"
"gitlab.aescorp.ru/dsp_dev/claim/common/sync_exchange"
"gitlab.aescorp.ru/dsp_dev/claim/common/sync_exchange/sync_types"
"runtime/pprof"
"sync"
"time"
)
// serviceName - имя сервиса который подключается
var serviceName string
// Connect - подключение к NATS SyncExchange
func Connect(ServiceName, ServiceVersion string) {
err := Connect_err(ServiceName, ServiceVersion)
@@ -125,3 +132,62 @@ func SendResponseError(sp *sync_types.SyncPackage, err error) {
}
}
// Start_PprofNats - профилирование памяти отправляет в NATS, бесконечно + WaitGroup
func Start_PprofNats() {
stopapp.GetWaitGroup_Main().Add(1)
go pprofNats_forever_go()
}
// pprofNats_forever_go - профилирование памяти отправляет в NATS, бесконечно + WaitGroup
func pprofNats_forever_go() {
defer stopapp.GetWaitGroup_Main().Done()
PprofNats_forever()
}
// PprofNats_forever - профилирование памяти отправляет в NATS, бесконечно
func PprofNats_forever() {
var err error
ticker := time.NewTicker(60 * time.Second)
defer ticker.Stop()
loop:
for {
select {
case <-contextmain.GetContext().Done():
log.Warn("Context app is canceled. postgres_pgx.ping")
break loop
case <-ticker.C:
err = PprofNats1()
if err != nil {
err = fmt.Errorf("PprofNats1(), error: %w", err)
log.Error(err)
time.Sleep(60 * time.Second)
}
}
}
}
// PprofNats1 - профилирование памяти отправляет в NATS 1 раз
func PprofNats1() error {
var err error
topicHeapProfile := serviceName + ".heap_profile"
var buf bytes.Buffer
err = pprof.WriteHeapProfile(&buf)
if err != nil {
err = fmt.Errorf("pprof.WriteHeapProfile(), topic: %v, error: %w", topicHeapProfile, err)
log.Error(err)
time.Sleep(10 * time.Second)
return err
}
err = sync_exchange.SendRawMessage(topicHeapProfile, buf.Bytes())
if err != nil {
err = fmt.Errorf("sync_exchange.SendRawMessage(), topic: %v, error: %w", topicHeapProfile, err)
log.Error(err)
time.Sleep(10 * time.Second)
return err
}
return err
}