Compare commits
2 Commits
a952204e15
...
bd4e8587b4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bd4e8587b4 | ||
|
|
bc60e644bf |
43
docs/agent-concurrency-benchmark.md
Normal file
43
docs/agent-concurrency-benchmark.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Agent Concurrency Benchmark
|
||||||
|
|
||||||
|
**Date:** 2026-04-01
|
||||||
|
**Hardware:** 8GB RAM, 16 CPU cores
|
||||||
|
|
||||||
|
## Test Results
|
||||||
|
|
||||||
|
| Concurrent Agents | Status | Memory Usage | Notes |
|
||||||
|
|-------------------|--------|--------------|-------|
|
||||||
|
| 1 | ✓ Works | ~1.1GB idle | Baseline test |
|
||||||
|
| 3 | ✓ Works | ~1.1GB idle | Default limit |
|
||||||
|
| 5 | ✓ Works | ~1.1GB idle | Increased limit |
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Default limit is set to **5 concurrent agents** in `skills/kugetsu/scripts/kugetsu`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
MAX_CONCURRENT_AGENTS="${MAX_CONCURRENT_AGENTS:-5}"
|
||||||
|
```
|
||||||
|
|
||||||
|
The limit can be overridden via environment variable:
|
||||||
|
```bash
|
||||||
|
MAX_CONCURRENT_AGENTS=3 kugetsu start <issue> <message>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Observations
|
||||||
|
|
||||||
|
1. **Idle Memory:** ~1.1GB used even with sessions idle (includes system buffers)
|
||||||
|
2. **CPU:** 16 cores available - sufficient for multiple agents
|
||||||
|
3. **No Active Processes:** When sessions are idle, opencode processes are not actively running
|
||||||
|
|
||||||
|
## Recommendations
|
||||||
|
|
||||||
|
- **1-3 agents:** Safe for most workloads on 8GB RAM systems
|
||||||
|
- **5 agents:** Works but monitor memory if running additional services
|
||||||
|
- **More than 5:** Not tested - may require more RAM
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Each agent session creates a worktree in `~/.kugetsu/worktrees/`
|
||||||
|
- Sessions are forked from base session using `opencode run --fork --continue --session`
|
||||||
|
- Idle sessions consume minimal resources
|
||||||
@@ -857,14 +857,14 @@ cmd_start() {
|
|||||||
remove_worktree_for_issue "$issue_ref"
|
remove_worktree_for_issue "$issue_ref"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
trap release_agent_slot EXIT
|
|
||||||
if [ "$DEBUG_MODE" = true ]; then
|
if [ "$DEBUG_MODE" = true ]; then
|
||||||
opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 | tee "$SESSIONS_DIR/$session_file.debug.log"
|
opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 | tee "$SESSIONS_DIR/$session_file.debug.log" &
|
||||||
else
|
else
|
||||||
opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1
|
opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1 &
|
||||||
fi
|
fi
|
||||||
|
local child_pid=$!
|
||||||
|
wait $child_pid
|
||||||
release_agent_slot
|
release_agent_slot
|
||||||
trap - EXIT
|
|
||||||
|
|
||||||
local after_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort)
|
local after_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort)
|
||||||
local new_session_id=""
|
local new_session_id=""
|
||||||
@@ -937,23 +937,23 @@ cmd_continue() {
|
|||||||
echo "Error: Max concurrent agents ($MAX_CONCURRENT_AGENTS) reached. Try again later." >&2
|
echo "Error: Max concurrent agents ($MAX_CONCURRENT_AGENTS) reached. Try again later." >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
trap release_agent_slot EXIT
|
|
||||||
if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then
|
if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then
|
||||||
echo "Using worktree: $worktree_path"
|
echo "Using worktree: $worktree_path"
|
||||||
if [ "$DEBUG_MODE" = true ]; then
|
if [ "$DEBUG_MODE" = true ]; then
|
||||||
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 | tee "$session_path.debug.log"
|
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 | tee "$session_path.debug.log" &
|
||||||
else
|
else
|
||||||
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path"
|
opencode run "$message" --continue --session "$opencode_session_id" --dir "$worktree_path" 2>&1 &
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [ "$DEBUG_MODE" = true ]; then
|
if [ "$DEBUG_MODE" = true ]; then
|
||||||
opencode run "$message" --continue --session "$opencode_session_id" 2>&1 | tee "$session_path.debug.log"
|
opencode run "$message" --continue --session "$opencode_session_id" 2>&1 | tee "$session_path.debug.log" &
|
||||||
else
|
else
|
||||||
opencode run "$message" --continue --session "$opencode_session_id"
|
opencode run "$message" --continue --session "$opencode_session_id" 2>&1 &
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
local child_pid=$!
|
||||||
|
wait $child_pid
|
||||||
release_agent_slot
|
release_agent_slot
|
||||||
trap - EXIT
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_list() {
|
cmd_list() {
|
||||||
|
|||||||
Reference in New Issue
Block a user