diff --git a/pprof/README.md b/pprof/README.md new file mode 100644 index 00000000..783597eb --- /dev/null +++ b/pprof/README.md @@ -0,0 +1,52 @@ +## PProfiling Usage Guide + +### Environment Variables + +- `PPROF`: Enable or disable profiling. Set to 1 to enable. +- `MEM_PROFILE_DIR`: Directory to write memory profiles to. +- `CPU_PROFILE_DIR`: Directory to write CPU profiles to. +- `PPROF_TIME`: Polling time for CPU and memory profiles (with unit ex: 10s). +- `MEM_PROFILE_RATE`: Memory profiling rate (default 4096). + + +## How to Use + +1. Set the environment variables as per your requirements. + +```bash +export PPROF=1 +export MEM_PROFILE_DIR=/path/to/memprofile +export CPU_PROFILE_DIR=/path/to/cpuprofile +export PPROF_TIME=10s +export MEM_PROFILE_RATE=4096 +``` + +2. Run your Go application. The profiler will start automatically if PPROF is set to 1. + +**Output** + +- Memory profiles will be written to the directory specified by MEM_PROFILE_DIR. +- CPU profiles will be written to the directory specified by CPU_PROFILE_DIR. +- Profiles will be written at intervals specified by PPROF_TIME. +- Memory profiling rate is controlled by MEM_PROFILE_RATE. + +### Example + +```bash +[+] GOOS: linux +[+] GOARCH: amd64 +[+] Command: /path/to/your/app +Available PPROF Config Options: +MEM_PROFILE_DIR - directory to write memory profiles to +CPU_PROFILE_DIR - directory to write cpu profiles to +PPROF_TIME - polling time for cpu and memory profiles (with unit ex: 10s) +MEM_PROFILE_RATE - memory profiling rate (default 4096) +profile: memory profiling enabled (rate 4096), /path/to/memprofile +profile: ticker enabled (rate 10s) +profile: cpu profiling enabled (ticker 10s) +``` + +### Note + +- The polling time (PPROF_TIME) should be set according to your application's performance and profiling needs. +- The memory profiling rate (MEM_PROFILE_RATE) controls the granularity of the memory profiling. Higher values provide more detail but consume more resources. \ No newline at end of file diff --git a/pprof/pprof.go b/pprof/pprof.go index b826884f..653b9ad3 100644 --- a/pprof/pprof.go +++ b/pprof/pprof.go @@ -8,6 +8,7 @@ import ( "runtime" "runtime/pprof" "strconv" + "strings" "time" "github.com/projectdiscovery/utils/env" @@ -23,8 +24,9 @@ const ( func init() { if env.GetEnvOrDefault(PPROFSwitchENV, 0) == 1 { - log.Printf("GOOS: %v\n", runtime.GOOS) - log.Printf("GOARCH: %v\n", runtime.GOARCH) + log.Printf("[+] GOOS: %v\n", runtime.GOOS) + log.Printf("[+] GOARCH: %v\n", runtime.GOARCH) + log.Printf("[+] Command: %v\n", strings.Join(os.Args, " ")) log.Println("Available PPROF Config Options:") log.Printf("%-16v - directory to write memory profiles to\n", MemProfileENV) log.Printf("%-16v - directory to write cpu profiles to\n", CPUProfileENV)