From 025e84ff8130e9256fdd8fc6c6b39f6e97ee40e7 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 30 Dec 2021 16:40:04 +0800 Subject: [PATCH] fix: skip set ulimit on windows --- hrp/cmd/boom.go | 35 ++----------------------------- internal/boomer/ulimit.go | 32 ++++++++++++++++++++++++++++ internal/boomer/ulimit_windows.go | 12 +++++++++++ 3 files changed, 46 insertions(+), 33 deletions(-) create mode 100644 internal/boomer/ulimit.go create mode 100644 internal/boomer/ulimit_windows.go diff --git a/hrp/cmd/boom.go b/hrp/cmd/boom.go index 7cd14b07..b19c239a 100644 --- a/hrp/cmd/boom.go +++ b/hrp/cmd/boom.go @@ -1,11 +1,8 @@ package cmd import ( - "runtime" - "syscall" "time" - "github.com/rs/zerolog/log" "github.com/spf13/cobra" "github.com/httprunner/hrp" @@ -22,8 +19,8 @@ var boomCmd = &cobra.Command{ $ hrp boom examples/ # run testcases in specified folder`, Args: cobra.MinimumNArgs(1), PreRun: func(cmd *cobra.Command, args []string) { - setUlimit() - setLogLevel("WARN") // disable info logs for load testing + boomer.SetUlimit(10240) // ulimit -n 10240 + setLogLevel("WARN") // disable info logs for load testing }, Run: func(cmd *cobra.Command, args []string) { var paths []hrp.ITestCase @@ -71,31 +68,3 @@ func init() { boomCmd.Flags().StringVar(&prometheusPushgatewayURL, "prometheus-gateway", "", "Prometheus Pushgateway url.") boomCmd.Flags().BoolVar(&disableConsoleOutput, "disable-console-output", false, "Disable console output.") } - -// set resource limit -// ulimit -n 10240 -func setUlimit() { - log.Info().Str("runtime.GOOS", runtime.GOOS).Msg("check GOOS") - if runtime.GOOS == "windows" { - log.Warn().Msg("windows does not support setting ulimit") - return - } - var rLimit syscall.Rlimit - err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit) - if err != nil { - log.Error().Err(err).Msg("get ulimit failed") - return - } - log.Info().Uint64("limit", rLimit.Cur).Msg("get current ulimit") - if rLimit.Cur >= 10240 { - return - } - - rLimit.Cur = 10240 - log.Info().Uint64("limit", rLimit.Cur).Msg("set current ulimit") - err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit) - if err != nil { - log.Error().Err(err).Msg("set ulimit failed") - return - } -} diff --git a/internal/boomer/ulimit.go b/internal/boomer/ulimit.go new file mode 100644 index 00000000..b83585ea --- /dev/null +++ b/internal/boomer/ulimit.go @@ -0,0 +1,32 @@ +// +build !windows + +package boomer + +import ( + "syscall" + + "github.com/rs/zerolog/log" +) + +// set resource limit +// ulimit -n 10240 +func SetUlimit(limit uint64) { + var rLimit syscall.Rlimit + err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit) + if err != nil { + log.Error().Err(err).Msg("get ulimit failed") + return + } + log.Info().Uint64("limit", rLimit.Cur).Msg("get current ulimit") + if rLimit.Cur >= limit { + return + } + + rLimit.Cur = limit + log.Info().Uint64("limit", rLimit.Cur).Msg("set current ulimit") + err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit) + if err != nil { + log.Error().Err(err).Msg("set ulimit failed") + return + } +} diff --git a/internal/boomer/ulimit_windows.go b/internal/boomer/ulimit_windows.go new file mode 100644 index 00000000..76ca69fc --- /dev/null +++ b/internal/boomer/ulimit_windows.go @@ -0,0 +1,12 @@ +// +build windows + +package boomer + +import ( + "github.com/rs/zerolog/log" +) + +// set resource limit +func SetUlimit(limit uint64) { + log.Warn().Msg("windows does not support setting ulimit") +}