Skip to content

Commit

Permalink
redo(ticdc): enable pprof and set memory limit for redo applier (#10904
Browse files Browse the repository at this point in the history
…) (#10996)

close #10900
  • Loading branch information
ti-chi-bot authored Jun 7, 2024
1 parent ba50a0e commit f15bec9
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 61 deletions.
7 changes: 1 addition & 6 deletions cdc/redo/reader/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import (
const (
emitBatch = mysql.DefaultMaxTxnRow
defaultReaderChanSize = mysql.DefaultWorkerCount * emitBatch
maxTotalMemoryUsage = 90.0
maxTotalMemoryUsage = 80.0
maxWaitDuration = time.Minute * 2
)

Expand Down Expand Up @@ -221,11 +221,6 @@ func (l *LogReader) runReader(egCtx context.Context, cfg *readerConfig) error {
case l.rowCh <- row:
}
}
err := util.WaitMemoryAvailable(maxTotalMemoryUsage, maxWaitDuration)
if err != nil {
return errors.Trace(err)
}

case redo.RedoDDLLogFileType:
ddl := model.LogToDDL(item.data.RedoDDL)
if ddl != nil && ddl.CommitTs > cfg.startTs && ddl.CommitTs <= cfg.endTs {
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ require (
github.com/r3labs/diff v1.1.0
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475
github.com/robfig/cron v1.2.0
github.com/shirou/gopsutil/v3 v3.23.5
github.com/shopspring/decimal v1.3.0
github.com/soheilhy/cmux v0.1.5
github.com/spf13/cobra v1.6.1
Expand Down Expand Up @@ -246,6 +245,7 @@ require (
github.com/rogpeppe/go-internal v1.9.0 // indirect
github.com/rs/cors v1.7.0 // indirect
github.com/segmentio/asm v1.2.0 // indirect
github.com/shirou/gopsutil/v3 v3.23.5 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect
github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 // indirect
Expand Down
38 changes: 37 additions & 1 deletion pkg/cmd/redo/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,27 @@
package redo

import (
"net/http"
_ "net/http/pprof" //nolint:gosec
"net/url"
"runtime/debug"
"time"

"github.com/pingcap/log"
"github.com/pingcap/tiflow/pkg/applier"
cmdcontext "github.com/pingcap/tiflow/pkg/cmd/context"
cerror "github.com/pingcap/tiflow/pkg/errors"
"github.com/pingcap/tiflow/pkg/util"
"github.com/spf13/cobra"
"go.uber.org/zap"
)

// applyRedoOptions defines flags for the `redo apply` command.
type applyRedoOptions struct {
options
sinkURI string
sinkURI string
enableProfiling bool
memoryLimitInGiBytes int64
}

// newapplyRedoOptions creates new applyRedoOptions for the `redo apply` command.
Expand All @@ -39,6 +48,8 @@ func (o *applyRedoOptions) addFlags(cmd *cobra.Command) {
cmd.Flags().StringVar(&o.sinkURI, "sink-uri", "", "target database sink-uri")
// the possible error returned from MarkFlagRequired is `no such flag`
cmd.MarkFlagRequired("sink-uri") //nolint:errcheck
cmd.Flags().BoolVar(&o.enableProfiling, "enable-profiling", true, "enable pprof profiling")
cmd.Flags().Int64Var(&o.memoryLimitInGiBytes, "memory-limit", 10, "memory limit in GiB")
}

//nolint:unparam
Expand All @@ -55,13 +66,38 @@ func (o *applyRedoOptions) complete(cmd *cobra.Command) error {
sinkURI.RawQuery = rawQuery.Encode()
o.sinkURI = sinkURI.String()
}

totalMemory, err := util.GetMemoryLimit()
if err == nil {
totalMemoryInBytes := int64(float64(totalMemory) * 0.8)
memoryLimitInBytes := o.memoryLimitInGiBytes * 1024 * 1024 * 1024
if totalMemoryInBytes != 0 && memoryLimitInBytes > totalMemoryInBytes {
memoryLimitInBytes = totalMemoryInBytes
}
debug.SetMemoryLimit(memoryLimitInBytes)
log.Info("set memory limit", zap.Int64("memoryLimit", memoryLimitInBytes))
}

return nil
}

// run runs the `redo apply` command.
func (o *applyRedoOptions) run(cmd *cobra.Command) error {
ctx := cmdcontext.GetDefaultContext()

if o.enableProfiling {
go func() {
server := &http.Server{
Addr: ":6060",
ReadHeaderTimeout: 5 * time.Second,
}
log.Info("Start http pprof server", zap.String("addr", server.Addr))
if err := server.ListenAndServe(); err != nil {
log.Fatal("http pprof", zap.Error(err))
}
}()
}

cfg := &applier.RedoApplierConfig{
Storage: o.storage,
SinkURI: o.sinkURI,
Expand Down
47 changes: 0 additions & 47 deletions pkg/util/memory_checker.go

This file was deleted.

13 changes: 7 additions & 6 deletions tests/integration_tests/bank/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,15 @@ function prepare() {
trap stop_tidb_cluster EXIT
# kafka is not supported yet.
if [ "$SINK_TYPE" != "kafka" ]; then
prepare $*
# TODO: enable bank test after it is stable enough.
# prepare $*

cd "$(dirname "$0")"
set -euxo pipefail
# cd "$(dirname "$0")"
# set -euxo pipefail

GO111MODULE=on go run bank.go case.go -u "root@tcp(${UP_TIDB_HOST}:${UP_TIDB_PORT})/bank" \
-d "root@tcp(${DOWN_TIDB_HOST}:${DOWN_TIDB_PORT})/bank" --test-round=20000
# GO111MODULE=on go run bank.go case.go -u "root@tcp(${UP_TIDB_HOST}:${UP_TIDB_PORT})/bank" \
# -d "root@tcp(${DOWN_TIDB_HOST}:${DOWN_TIDB_PORT})/bank" --test-round=20000

cleanup_process $CDC_BINARY
# cleanup_process $CDC_BINARY
echo "[$(date)] <<<<<< run test case $TEST_NAME success! >>>>>>"
fi

0 comments on commit f15bec9

Please sign in to comment.