Skip to content

Commit

Permalink
add pprof docs
Browse files Browse the repository at this point in the history
  • Loading branch information
tarunKoyalwar committed Oct 9, 2023
1 parent 6bc0e3c commit 3681bca
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 2 deletions.
52 changes: 52 additions & 0 deletions pprof/README.md
Original file line number Diff line number Diff line change
@@ -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.
6 changes: 4 additions & 2 deletions pprof/pprof.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"runtime"
"runtime/pprof"
"strconv"
"strings"
"time"

"github.com/projectdiscovery/utils/env"
Expand All @@ -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)
Expand Down

0 comments on commit 3681bca

Please sign in to comment.