shuzhiren-comfyui/analyze_log.ps1

146 lines
4.3 KiB
PowerShell

# 日志分析脚本 - 检测僵尸任务
Write-Host "正在分析日志文件...`n" -ForegroundColor Cyan
$logFile = "message-dispatcher_debug.txt"
if (-not (Test-Path $logFile)) {
Write-Host "错误: 找不到日志文件 $logFile" -ForegroundColor Red
exit 1
}
$lines = Get-Content $logFile
$tasks = @{}
$completedTasks = @{}
$failedTasks = @{}
$instanceLocks = @{}
for ($i = 0; $i -lt $lines.Count; $i++) {
$line = $lines[$i].Trim()
if (-not $line) { continue }
# 匹配任务ID
if ($line -match "任务(直接分配|调度|确认|完成|失败|超时): ([a-f0-9-]{36})") {
$taskId = $matches[2]
$eventType = $matches[1]
if (-not $tasks.ContainsKey($taskId)) {
$tasks[$taskId] = @{
taskId = $taskId
events = @()
startTime = $null
endTime = $null
instanceId = $null
completed = $false
failed = $false
}
}
$tasks[$taskId].events += @{
line = $i + 1
content = $line
}
if ($line -match "任务完成") {
$tasks[$taskId].completed = $true
$tasks[$taskId].endTime = $line
$completedTasks[$taskId] = $true
}
elseif ($line -match "任务失败" -or $line -match "任务超时") {
$tasks[$taskId].failed = $true
$tasks[$taskId].endTime = $line
$failedTasks[$taskId] = $true
}
elseif ($line -match "任务调度" -or $line -match "任务直接分配") {
if ($line -match "实例 ([^,\s]+)") {
$tasks[$taskId].instanceId = $matches[1]
}
$tasks[$taskId].startTime = $line
}
}
# 匹配实例锁定
if ($line -match "实例已锁定: ([^,]+), taskId: ([a-f0-9-]{36})") {
$instanceId = $matches[1]
$taskId = $matches[2]
$instanceLocks[$instanceId] = @{
locked = $true
taskId = $taskId
line = $i + 1
}
if ($tasks.ContainsKey($taskId)) {
$tasks[$taskId].instanceId = $instanceId
}
}
# 匹配实例释放
if ($line -match "实例锁已释放: ([^,\s]+)") {
$instanceId = $matches[1]
$instanceLocks[$instanceId] = @{
locked = $false
line = $i + 1
}
}
}
# 统计
$activeTasks = @()
$zombieTasks = @()
foreach ($task in $tasks.Values) {
if (-not $task.completed -and -not $task.failed) {
$activeTasks += $task
if ($task.startTime) {
$zombieTasks += $task
}
}
}
$lockedInstances = @()
foreach ($instanceId in $instanceLocks.Keys) {
if ($instanceLocks[$instanceId].locked) {
$lockedInstances += @{
instanceId = $instanceId
info = $instanceLocks[$instanceId]
}
}
}
# 输出结果
Write-Host "=== 统计结果 ===" -ForegroundColor Yellow
Write-Host "总任务数: $($tasks.Count)"
Write-Host "已完成任务: $($completedTasks.Count)"
Write-Host "失败/超时任务: $($failedTasks.Count)"
Write-Host "活跃任务(未完成): $($activeTasks.Count)"
Write-Host "可能的僵尸任务(已开始但未完成): $($zombieTasks.Count)`n"
if ($zombieTasks.Count -gt 0) {
Write-Host "=== 可能的僵尸任务详情 ===" -ForegroundColor Red
foreach ($task in $zombieTasks) {
Write-Host "任务ID: $($task.taskId)" -ForegroundColor Red
$instanceDisplay = if ($task.instanceId) { $task.instanceId } else { '未知' }
Write-Host "实例ID: $instanceDisplay"
Write-Host "事件记录:"
$recentEvents = $task.events | Select-Object -Last 5
foreach ($evt in $recentEvents) {
Write-Host "$($evt.line): $($evt.content)"
}
Write-Host ""
}
} else {
Write-Host "✅ 没有发现僵尸任务!" -ForegroundColor Green
}
if ($lockedInstances.Count -gt 0) {
Write-Host "`n=== 仍被锁定的实例 ===" -ForegroundColor Red
foreach ($item in $lockedInstances) {
Write-Host "实例: $($item.instanceId)" -ForegroundColor Red
Write-Host "任务ID: $($item.info.taskId)"
Write-Host "锁定位置: 行$($item.info.line)"
Write-Host ""
}
} else {
Write-Host "`n✅ 所有实例锁都已释放!" -ForegroundColor Green
}