mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-03 03:35:04 +03:00
fix: keep panel restarts from hanging on the CPU job and Telegram (#7029)
Restarting the panel left it unreachable for up to a minute. CheckCpuJob sampled cpu.Percent over its whole one-minute period, so cron.Stop nearly always waited on it; it now diffs cpu.Times against its previous run (iowait counted as idle, as before). With Telegram unreachable, bus.Stop waited on an in-flight send and tgbot.Start ran getMe/setMyCommands inline; each bot call now returns once StopBot closes the bot's stop channel, the bot stops before the bus, and the artwork/commands warm-up runs in the background.
This commit is contained in:
@@ -880,36 +880,12 @@ func (s *ServerService) sampleCPUUtilization() (float64, error) {
|
||||
return s.emaCPU, nil
|
||||
}
|
||||
|
||||
// Compute busy and total deltas
|
||||
// Note: Guest and GuestNice times are already included in User and Nice respectively,
|
||||
// so we exclude them to avoid double-counting (Linux kernel accounting)
|
||||
idleDelta := cur.Idle - s.lastCPUTimes.Idle
|
||||
busyDelta := (cur.User - s.lastCPUTimes.User) +
|
||||
(cur.System - s.lastCPUTimes.System) +
|
||||
(cur.Nice - s.lastCPUTimes.Nice) +
|
||||
(cur.Iowait - s.lastCPUTimes.Iowait) +
|
||||
(cur.Irq - s.lastCPUTimes.Irq) +
|
||||
(cur.Softirq - s.lastCPUTimes.Softirq) +
|
||||
(cur.Steal - s.lastCPUTimes.Steal)
|
||||
|
||||
totalDelta := busyDelta + idleDelta
|
||||
|
||||
// Update last sample for next time
|
||||
raw, ok := sys.CPUBusyPercent(s.lastCPUTimes, cur)
|
||||
s.lastCPUTimes = cur
|
||||
|
||||
// Guard against division by zero or negative deltas (e.g., counter resets)
|
||||
if totalDelta <= 0 {
|
||||
if !ok {
|
||||
return s.emaCPU, nil
|
||||
}
|
||||
|
||||
raw := 100.0 * (busyDelta / totalDelta)
|
||||
if raw < 0 {
|
||||
raw = 0
|
||||
}
|
||||
if raw > 100 {
|
||||
raw = 100
|
||||
}
|
||||
|
||||
// Exponential moving average to smooth spikes
|
||||
const alpha = 0.3 // smoothing factor (0<alpha<=1). Higher = more responsive, lower = smoother
|
||||
if s.emaCPU == 0 {
|
||||
|
||||
Reference in New Issue
Block a user