Skip to content

Commit

Permalink
added code to test profiling
Browse files Browse the repository at this point in the history
  • Loading branch information
prosenjitjoy committed Dec 10, 2023
1 parent 4a5e509 commit 3452d6e
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 10 deletions.
29 changes: 21 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ delete-postgres:
podman rm -f postgres
podman volume prune

create-migration:
migrate create -ext sql -dir database/migration -seq $(name)

migrate-up:
migrate -database ${DATABASE_URL} -path database/migration -verbose up

migrate-down:
migrate -database ${DATABASE_URL} -path database/migration -verbose down

create-jaeger:
podman run --name jaeger --hostname jaeger -e COLLECTOR_OTLP_ENABLED=true -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 -p 4317:4317 -p 4318:4318 -p 14250:14250 -p 14268:14268 -p 14269:14269 -p 9411:9411 -d jaegertracing/all-in-one:1.52

Expand All @@ -46,14 +55,12 @@ delete-alertmanager:
podman rm -f alertmanager
podman volume prune

create-migration:
migrate create -ext sql -dir database/migration -seq $(name)
create-grafana:
podman run --name grafana --hostname grafana -p 3000:3000 -d grafana/grafana-oss:latest

migrate-up:
migrate -database ${DATABASE_URL} -path database/migration -verbose up

migrate-down:
migrate -database ${DATABASE_URL} -path database/migration -verbose down
delete-grafana:
podman rm -f grafana
podman volume prune

generate-dbdocs:
dbdocs build database/doc/db.dbml
Expand All @@ -75,4 +82,10 @@ generate-mock:
run-test:
go test ./...

.PHONY: create-consul delete-consul proto-generate create-pulsar delete-pulsar create-postgres delete-postgres create-migration migrate-up migrate-down create-jaeger delete-jaeger create-prometheus delete-prometheus create-alertmanager delete-alertmanager generate-dbdocs generate-schema generate-sqlc generate-image generate-mock run-test
cpu-profiling:
go tool pprof cpu.pprof

mem-profiling:
go tool pprof mem.pprof

.PHONY: create-consul delete-consul proto-generate create-pulsar delete-pulsar create-postgres delete-postgres create-migration migrate-up migrate-down create-jaeger delete-jaeger create-prometheus delete-prometheus create-alertmanager delete-alertmanager create-grafana delete-grafana generate-dbdocs generate-schema generate-sqlc generate-image generate-mock run-test cpu-profiling mem-profiling
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Go-with-Microservices

Microservice project build using Hashicorp Consul, gRPC, apache Pulsar and PostgreSQL.
Complete microservice project build using Consul, gRPC, Pulsar, Jaeger, Prometheus and PostgreSQL.
Binary file added cpu.pprof
Binary file not shown.
Binary file added mem.pprof
Binary file not shown.
29 changes: 28 additions & 1 deletion metadata/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"net/http"
"os"
"os/signal"
"runtime/pprof"
"sync"
"syscall"
"time"
Expand All @@ -36,11 +37,15 @@ import (
const serviceName = "metadata"

func main() {
// configurations
var config string
var simulateCPUload bool
flag.StringVar(&config, "config", ".env", "Configuration path")
flag.BoolVar(&simulateCPUload, "simulatecpuload", false, "Simulate CPU load for profiling")
flag.Parse()
cfg := util.LoadConfig(config)

// environments
if cfg.Environment == "dev" {
var logger = slog.New(slog.NewTextHandler(os.Stdout, nil)).With("service_name", serviceName)
slog.SetDefault(logger)
Expand All @@ -49,7 +54,26 @@ func main() {
slog.SetDefault(logger)
}

// prometheus
// profiling
cpuFile, err := os.Create("cpu.pprof")
if err != nil {
panic(err)
}
memFile, err := os.Create("mem.pprof")
if err != nil {
panic(err)
}

pprof.StartCPUProfile(cpuFile)
pprof.WriteHeapProfile(memFile)
defer pprof.StopCPUProfile()
defer memFile.Close()

if simulateCPUload {
go util.HeavyOperation()
}

// prometheus metrics
reg := prometheus.NewRegistry()
counter := promauto.NewCounter(prometheus.CounterOpts{
Namespace: serviceName,
Expand All @@ -68,6 +92,7 @@ func main() {
defer reg.Unregister(counter)
counter.Inc()

// jaeger tracing
slog.Info("Starting the movie metadata service on port", slog.Int("port", cfg.MetadataPort))

ctx, cancel := context.WithCancel(context.Background())
Expand All @@ -88,6 +113,7 @@ func main() {
otel.SetTracerProvider(tp)
otel.SetTextMapPropagator(propagation.TraceContext{})

// service discovery
registry, err := consul.NewRegistry(cfg.ConsulURL)
if err != nil {
slog.Error("failed to connect consul registry:", slog.String("error", err.Error()))
Expand All @@ -112,6 +138,7 @@ func main() {
}()
defer registry.Deregister(ctx, instanceID, serviceName)

// services
conn, err := pgxpool.New(context.Background(), cfg.DatabaseURL)
if err != nil {
slog.Error("cannot connect to db:", slog.String("error", err.Error()))
Expand Down
14 changes: 14 additions & 0 deletions util/profiling.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package util

import (
"crypto/md5"
"crypto/rand"
)

func HeavyOperation() {
for {
token := make([]byte, 1024)
rand.Read(token)
md5.New().Write(token)
}
}

0 comments on commit 3452d6e

Please sign in to comment.