When working with Performance Monitor (perfmon) on Windows Server 2008, you might encounter the frustrating error message: "The Data Collector Set or one of its dependencies is already in use."
. This typically occurs when attempting to start a newly created Data Collector Set (DCS).
From my experience troubleshooting similar issues, these are the most frequent scenarios:
- Another instance of perfmon is running the same DCS
- The DCS was improperly terminated in a previous session
- System resources are locked by another performance monitoring tool
- Permission issues with the output location
Before diving into solutions, let's verify the exact state of your performance monitoring:
logman query -ets
This command will list all running Event Trace Sessions. Look for any entries that might be using your target DCS.
If you identify a stuck session, use this PowerShell command to terminate it:
Stop-PerfCollectorSet -Name "YourCollectorSetName" -Force
Alternatively, the command-line approach:
logman stop "YourCollectorSetName" -ets
logman delete "YourCollectorSetName"
In persistent cases, you might need to clean up registry entries:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger]
"YourCollectorSetName"=-
Warning: Always back up your registry before making changes.
Here's a complete PowerShell script I've used to handle this issue:
function Reset-PerfmonSessions {
param(
[string]$CollectorSetName
)
try {
# Stop if running
logman stop $CollectorSetName -ErrorAction SilentlyContinue
# Delete existing
logman delete $CollectorSetName -ErrorAction SilentlyContinue
# Clean up potential registry residue
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\WMI\Autologger"
if (Test-Path "$regPath\$CollectorSetName") {
Remove-Item -Path "$regPath\$CollectorSetName" -Force
}
# Restart the service for good measure
Restart-Service -Name "pla" -Force
return $true
}
catch {
Write-Error $_.Exception.Message
return $false
}
}
To avoid this issue in the future:
- Always properly stop DCS through perfmon UI or
logman stop
- Implement unique naming for your collector sets
- Consider adding error handling to your monitoring scripts
When working with Performance Monitor (Perfmon) on Windows Server 2008, you might encounter the frustrating error: "The Data Collector Set or one of its dependencies is already in use."
. This typically occurs when attempting to start a newly created Data Collector Set (DCS).
The issue often manifests in environments with:
- Identically configured virtual machines (where it works on one but not another)
- Previously terminated DCS sessions that didn't clean up properly
- Conflicting performance counters
- Permission issues with the Performance Log Users group
Before diving deep, try these PowerShell commands to check active collectors:
# List all running data collector sets
Get-WmiObject -Namespace "root\cimv2" -Class "Win32_PerfFormattedData" |
Where-Object {$_.Name -like "*YourCollectorSetName*"}
# Alternative method using logman
logman query -ets
Here's a step-by-step method to resolve the issue:
1. Force Stop All Running Collectors
# PowerShell command to stop all running collectors
Get-WmiObject -Namespace "root\cimv2" -Class "Win32_PerfFormattedData" |
ForEach-Object {
if ($_.Name -match "YourCollectorSetName") {
$_.Stop()
}
}
# Alternative using logman
logman stop "YourCollectorSetName" -ets
logman delete "YourCollectorSetName"
2. Reset Performance Counters
# Rebuild performance counters
lodctr /r
# For more thorough reset
unlodctr /q
lodctr /q
3. Check for File Locks
The DCS might be locked due to output files. Check with:
# PowerShell to find locked files
$handleExe = "$env:SystemRoot\System32\handle.exe"
if (Test-Path $handleExe) {
& $handleExe -a "YourCollectorSetName"
} else {
Write-Warning "Handle.exe not found in System32"
}
For recurring issues, create this PowerShell script:
# Perfmon DCS Cleanup Script
$collectorName = "YourCollectorSetName"
try {
# Stop if running
logman stop $collectorName -ets -ErrorAction SilentlyContinue
# Delete existing
logman delete $collectorName -ErrorAction SilentlyContinue
# Recreate with proper permissions
$user = "$env:USERDOMAIN\$env:USERNAME"
logman create counter $collectorName -o "C:\PerfLogs\$collectorName.blg" -f bin -si 15 --v -c "\Processor(_Total)\% Processor Time" "\Memory\Available MBytes" -u $user
# Start fresh
logman start $collectorName
Write-Host "Successfully reset $collectorName" -ForegroundColor Green
} catch {
Write-Error "Failed to reset collector: $_"
}
If the issue persists, examine these areas:
- Windows Event Viewer logs (Application and System)
- Resource Monitor for handle conflicts
- Process Explorer for detailed process information
To avoid future occurrences:
# Scheduled task to clean up stale collectors
$action = New-ScheduledTaskAction -Execute "logman.exe" -Argument "stop YourCollectorSetName -ets"
$trigger = New-ScheduledTaskTrigger -AtLogOn
Register-ScheduledTask -TaskName "PerfmonCleanup" -Action $action -Trigger $trigger -RunLevel Highest