mirror of
https://github.com/ManyakRus/starter.git
synced 2025-11-23 22:45:11 +02:00
сделал Start_PprofNats()
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user