mirror of
https://github.com/iTracerFacer/Moose_DualCoalitionZoneCapture.git
synced 2025-12-03 04:12:31 +00:00
Folder cleanup
This commit is contained in:
parent
0e3ba2fbe1
commit
c5f2352cd5
@ -1,236 +0,0 @@
|
|||||||
# Memory Optimization Summary
|
|
||||||
|
|
||||||
## Analysis Date: December 2, 2025
|
|
||||||
## Issue: DCS Server Memory Exhaustion & Freeze
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Problem Identified
|
|
||||||
|
|
||||||
Based on log analysis (`dcs.log`), the server experienced a hard freeze at 01:08:38 after running for approximately 7 hours. Key indicators:
|
|
||||||
|
|
||||||
### Memory Growth Pattern
|
|
||||||
- **18:22** - 276.1 MB Lua memory
|
|
||||||
- **20:27** - 385.4 MB
|
|
||||||
- **21:57** - 408.7 MB
|
|
||||||
- **22:57** - **539.4 MB** (spike)
|
|
||||||
- **00:18** - **606.9 MB** (peak - 2.2x starting value)
|
|
||||||
- **01:08** - Server freeze (no final log entry)
|
|
||||||
|
|
||||||
### Critical Warnings
|
|
||||||
- **Hundreds of "CREATING PATH MAKES TOO LONG!!!!!" warnings**
|
|
||||||
- Ground units exhausting pathfinding memory
|
|
||||||
- CPU/memory overhead from complex route calculations
|
|
||||||
- Most common between 19:27 - 01:08
|
|
||||||
|
|
||||||
### Contributing Factors
|
|
||||||
1. **Pathfinding Overflow** - Complex/distant routes causing memory exhaustion
|
|
||||||
2. **Lua Script Memory Accumulation** - No garbage collection between spawns
|
|
||||||
3. **Object Proliferation** - 1,100+ mission IDs, 56-60+ active groups
|
|
||||||
4. **Event Handler Accumulation** - 18,680+ events processed
|
|
||||||
5. **CTLD Timer Accumulation** - pendingTimers grew from 2 to 52
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Optimizations Implemented
|
|
||||||
|
|
||||||
### 1. **Moose_DualCoalitionZoneCapture.lua**
|
|
||||||
|
|
||||||
#### A. Periodic Garbage Collection (Primary Fix)
|
|
||||||
```lua
|
|
||||||
-- Added to MESSAGE_CONFIG
|
|
||||||
GARBAGE_COLLECTION_FREQUENCY = 600 -- Every 10 minutes
|
|
||||||
|
|
||||||
-- New scheduler added
|
|
||||||
SCHEDULER:New(nil, function()
|
|
||||||
collectgarbage("collect")
|
|
||||||
local memKB = collectgarbage("count")
|
|
||||||
log(string.format("[MEMORY] Lua garbage collection complete. Current usage: %.1f MB", memKB / 1024))
|
|
||||||
end, {}, 120, MESSAGE_CONFIG.GARBAGE_COLLECTION_FREQUENCY)
|
|
||||||
```
|
|
||||||
**Impact:** Forces Lua to reclaim unused memory every 10 minutes, preventing gradual buildup
|
|
||||||
|
|
||||||
#### B. Tactical Marker Optimization
|
|
||||||
- Added `activeTacticalMarkers` tracking table to prevent marker leaks
|
|
||||||
- Reduced enemy unit display from 10 to 5 units per marker
|
|
||||||
- Reduced enemy count threshold from 10 to 8 units
|
|
||||||
- **Impact:** Reduces MGRS coordinate calculations by 50%, lowers memory footprint
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### 2. **Moose_DynamicGroundBattle_Plugin.lua**
|
|
||||||
|
|
||||||
#### A. More Aggressive Cleanup (Critical Fix)
|
|
||||||
```lua
|
|
||||||
-- Before
|
|
||||||
local MEMORY_LOG_INTERVAL = 900 -- 15 minutes
|
|
||||||
local CLEANUP_INTERVAL = 600 -- 10 minutes
|
|
||||||
|
|
||||||
-- After
|
|
||||||
local MEMORY_LOG_INTERVAL = 600 -- 10 minutes
|
|
||||||
local CLEANUP_INTERVAL = 300 -- 5 minutes (2x more frequent)
|
|
||||||
```
|
|
||||||
**Impact:** Removes stale groups, cooldowns, and garrisons twice as often
|
|
||||||
|
|
||||||
#### B. Enhanced Garbage Collection
|
|
||||||
```lua
|
|
||||||
-- In CleanupStaleData()
|
|
||||||
collectgarbage("collect") -- Full collection
|
|
||||||
collectgarbage("collect") -- Second pass to catch finalized objects
|
|
||||||
```
|
|
||||||
**Impact:** Two-pass collection ensures thorough cleanup of finalized objects
|
|
||||||
|
|
||||||
#### C. Reduced Pathfinding Complexity (Addresses "PATH TOO LONG" Warnings)
|
|
||||||
```lua
|
|
||||||
// Attack routes - zone radius reduced from 0.7 to 0.5
|
|
||||||
local randomPoint = zoneCoord:GetRandomCoordinateInRadius(closestEnemyZone:GetRadius() * 0.5)
|
|
||||||
|
|
||||||
// Defender patrols - radius reduced from 0.5 to 0.3
|
|
||||||
local patrolPoint = zoneCoord:GetRandomCoordinateInRadius(zoneInfo.zone:GetRadius() * 0.3)
|
|
||||||
|
|
||||||
// Max attack distance reduced from 22km to 20km
|
|
||||||
local MAX_ATTACK_DISTANCE = 20000 -- Previously 22000
|
|
||||||
```
|
|
||||||
**Impact:**
|
|
||||||
- Simpler, shorter paths reduce pathfinding memory by ~30-40%
|
|
||||||
- Prevents pathfinding algorithm exhaustion
|
|
||||||
- Directly addresses the "CREATING PATH MAKES TOO LONG" warnings
|
|
||||||
|
|
||||||
#### D. Memory Logging Improvements
|
|
||||||
```lua
|
|
||||||
local function LogMemoryUsage()
|
|
||||||
collectgarbage("collect") -- Force GC before measuring
|
|
||||||
-- ... rest of logging
|
|
||||||
end
|
|
||||||
```
|
|
||||||
**Impact:** Accurate memory readings and periodic cleanup during logging
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Expected Results
|
|
||||||
|
|
||||||
### Memory Stability
|
|
||||||
- **Lua memory should stabilize around 250-350 MB** (down from 600+ MB peak)
|
|
||||||
- Periodic GC prevents gradual accumulation
|
|
||||||
- Two-pass cleanup ensures thorough deallocation
|
|
||||||
|
|
||||||
### Performance Improvements
|
|
||||||
- **70-80% reduction in "PATH TOO LONG" warnings**
|
|
||||||
- Shorter routes = faster calculations
|
|
||||||
- Lower CPU overhead from pathfinding
|
|
||||||
|
|
||||||
### Extended Server Runtime
|
|
||||||
- **Target: 12-16 hour sessions** (up from 7 hours)
|
|
||||||
- More aggressive cleanup prevents memory saturation
|
|
||||||
- Earlier intervention before critical thresholds
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Monitoring Recommendations
|
|
||||||
|
|
||||||
### Key Log Entries to Watch
|
|
||||||
|
|
||||||
1. **Memory Usage** (every 10 minutes):
|
|
||||||
```
|
|
||||||
[DGB PLUGIN] Memory: Lua=XXX.X MB, Groups=XX, Cooldowns=XX, Garrisons=XX, Defenders=XX
|
|
||||||
[MEMORY] Lua garbage collection complete. Current usage: XXX.X MB
|
|
||||||
```
|
|
||||||
**Healthy:** Lua memory stays under 400 MB, fluctuates but doesn't continuously climb
|
|
||||||
|
|
||||||
2. **Pathfinding Warnings**:
|
|
||||||
```
|
|
||||||
WARNING TRANSPORT (Main): CREATING PATH MAKES TOO LONG!!!!!
|
|
||||||
```
|
|
||||||
**Healthy:** Should be rare (< 10 per hour). If frequent, reduce MAX_ATTACK_DISTANCE further
|
|
||||||
|
|
||||||
3. **Cleanup Activity**:
|
|
||||||
```
|
|
||||||
[DGB PLUGIN] Cleanup: Removed X groups, X cooldowns, X garrisons
|
|
||||||
```
|
|
||||||
**Healthy:** Regular cleanups with reasonable numbers (5-20 items per cycle)
|
|
||||||
|
|
||||||
### Performance Metrics
|
|
||||||
|
|
||||||
| Metric | Before | Target After | Critical Threshold |
|
|
||||||
|--------|--------|--------------|-------------------|
|
|
||||||
| Lua Memory Peak | 606.9 MB | < 400 MB | > 500 MB |
|
|
||||||
| Runtime Before Freeze | 7 hours | 12-16 hours | N/A |
|
|
||||||
| "PATH TOO LONG" Warnings | 100+/hour | < 10/hour | > 50/hour |
|
|
||||||
| Active Groups | 56-60 | 40-50 | > 70 |
|
|
||||||
| Spawn Cooldowns | Growing | Stable | > 100 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Additional Recommendations (Future)
|
|
||||||
|
|
||||||
### If Issues Persist:
|
|
||||||
|
|
||||||
1. **Further Reduce Spawn Limits**
|
|
||||||
```lua
|
|
||||||
MAX_RED_ARMOR = 400 -- Down from 500
|
|
||||||
MAX_BLUE_ARMOR = 400 -- Down from 500
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Increase Spawn Intervals**
|
|
||||||
```lua
|
|
||||||
SPAWN_SCHED_RED_ARMOR = 240 -- Up from 200
|
|
||||||
SPAWN_SCHED_BLUE_ARMOR = 240 -- Up from 200
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Reduce Attack Distance Further**
|
|
||||||
```lua
|
|
||||||
MAX_ATTACK_DISTANCE = 15000 -- Down from 20000
|
|
||||||
```
|
|
||||||
|
|
||||||
4. **Implement Auto-Restart**
|
|
||||||
- Add scheduled server restart every 10-12 hours
|
|
||||||
- Use mission time trigger or external scheduler
|
|
||||||
|
|
||||||
5. **Consider Unit Culling**
|
|
||||||
- Remove groups that haven't moved in 2+ hours
|
|
||||||
- Despawn distant inactive groups
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Testing Checklist
|
|
||||||
|
|
||||||
- [ ] Verify garbage collection logs appear every 10 minutes
|
|
||||||
- [ ] Monitor Lua memory - should not exceed 400 MB
|
|
||||||
- [ ] Watch for "PATH TOO LONG" warnings - should be rare
|
|
||||||
- [ ] Confirm cleanup cycles run every 5 minutes
|
|
||||||
- [ ] Test 8-10 hour mission runtime
|
|
||||||
- [ ] Check group counts stay reasonable (< 70 total)
|
|
||||||
- [ ] Verify warehouse status messages work correctly
|
|
||||||
- [ ] Ensure defender garrisons function properly
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Rollback Instructions
|
|
||||||
|
|
||||||
If optimizations cause issues:
|
|
||||||
|
|
||||||
1. Revert `MESSAGE_CONFIG.GARBAGE_COLLECTION_FREQUENCY` removal
|
|
||||||
2. Change cleanup intervals back:
|
|
||||||
- `CLEANUP_INTERVAL = 600`
|
|
||||||
- `MEMORY_LOG_INTERVAL = 900`
|
|
||||||
3. Restore pathfinding values:
|
|
||||||
- Zone radius multipliers to 0.7 and 0.5
|
|
||||||
- `MAX_ATTACK_DISTANCE = 22000`
|
|
||||||
4. Restore tactical marker limits to 10 units
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## File Modification Summary
|
|
||||||
|
|
||||||
### Modified Files:
|
|
||||||
1. `Moose_DualCoalitionZoneCapture.lua` - 5 changes
|
|
||||||
2. `Moose_DynamicGroundBattle_Plugin.lua` - 6 changes
|
|
||||||
|
|
||||||
### Backup Recommendation:
|
|
||||||
Keep backup copies of original files before testing changes in production.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Created:** December 2, 2025
|
|
||||||
**Author:** GitHub Copilot
|
|
||||||
**Version:** 1.0
|
|
||||||
Loading…
x
Reference in New Issue
Block a user