Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - rvansoest79

#1
About once a day (10 times in 6 days) the packet-processor worker stops sending heartbeats for ~21 s, the watchdog sends SIGTERM, the worker needs another 15–36 s to die (ends with signal 3), and during that time the kernel logs netmap_transmit igc1 full and traffic through the interface stalls (users notice a 30–60 s internet hiccup). All 10 kills happened in minute :10–:14 of an hour. I can't find what the worker is doing when it hangs. Looking for ideas / known issues / a way to get a useful trace.

Environment
- OPNsense 26.7.4_1 (series 26.7, regular update repo 26.7/latest; FreeBSD 15.1-RELEASE-p3)
- Intel Celeron N5100 (4 cores), 7.8 GB RAM, Intel I226-V (igc), XGS-PON ~900/900 Mbit
- Zenarmor Home, stable release channel, latest version (no update pending): os-sensei 2.6.2, os-sensei-agent 2.6.1, engine "Release 2.6.2 built at Jul 17 2026"
- One instance: netmap@igc1 (LAN uplink to the switch, routed mode, 1 worker, no CPU pinning)
- dev.netmap.admode=2 (generic/emulated; I tried native and went back), buf_size=4096 (2048 gave drop packet size 2345 > 2048), buf_num=1000000, ring_num=1024, ring_size=36864
- Exclusions: 56 MAC addresses + 6 IP nets (incl. my UniFi management VLAN and UniFi OS server) To try to lower the load as a test, Watchdog enabled=true, timeout=20
- Use case: home network, Zenarmor only to block malicious sites, botnets/C2 and malware — no content/app-control policies
- Typical load is low: ~200 UDP pps outside 443 (measured), load average ~0.5–1.3, 0 kernel drops in a normal minute

Example (last one, times CEST)
20:12:00  worker0 log: last line (normal: DnsEnrichmentManager::setDNSCacheItem WARN ...)
20:12:28  ERR  [WatchDogManager::checkHeartBeats] Watchdog: Worker
  • failed to send heartbeat for 21 seconds
20:12:28  ERR  [WatchDogManager::checkHeartBeats] Watchdog: Killing Worker
20:12:28  CRIT [EastpectWorker::KillWorker] Sending TERM signal to worker native_pid: 92412
20:12:46–20:13:04  kernel: netmap_transmit igc1 full ...   (2 lines/s, ~19 s)
20:13:04  CRIT [EastpectWorker::WaitWorkers] Child worker0 ... terminated with signal: 3
20:13:04  CRIT [EastpectWorker::WaitWorkers] Child worker0, new [native_pid: 82907] re-spawned.
20:13:04  kernel: pid 92412 (eastpect), jid 0, uid 0: exited on signal 3 (no core dump - denied by kern.coredump)
20:13:04–20:13:19  kernel: generic_netmap_unregister/dtor/attach ... "Emulated adapter for igc1" deactivated → created → activated

What I found
- 10 watchdog kills between 16 Sep and 21 Sep. All in minute :10–:14 (4× :10, 2× :11, 1× each :12/:13/:14, ...). Not every hour, roughly 1–2 per day.
- TERM → dead takes 1–36 s and always ends with signal 3 (the worker doesn't react to SIGTERM). Every slow one (≥10 s) produced netmap_transmit igc1 full bursts; fast ones sometimes.
- Heartbeat is lost 13–29 s before the kill. The last worker0 log lines before the silence are ordinary (DnsEnrichmentManager mismatch WARNs, TLS ClientHello parse, LibhtpParser "httpInfo is null" WARN) — no error, no crash.
- It is not a traffic spike: during a 26-drop burst I captured only 467 UDP packets in 13 s.
- Not correlated (checked against the logs, at chance level): cloud_agent SyncPolicyUpdate (runs every ~2 min) and scheduledServiceControl (~every 4 min). Zenarmor's own hourly check_license.py runs at :10:00 but I have no evidence that it is involved.
- Earlier I also had bursts of UDPConnectionFlow::connect ... UDP flow connect failed: Address already in use / EastpectInstance::onAcceptUDP New UDP flow connect failed (98% in minute :09–:12) from one server VM; excluding that host removed those errors, but the worker hangs remain.

Questions
1. Is this a known issue in 2.6.2 (or with emulated netmap on igc/I226-V)? What in the worker can block for 20+ s?
2. Is there a supported way to get a stack/trace of the hung worker (core dumps are denied by kern.coredump; what would you like me to enable)?
3. Why does the worker ignore SIGTERM for 15–36 s?
4. Would bypassEnable/bypassModeOn let traffic pass while the worker is hung/being killed? (Both are false now, I could not find documentation on the exact behaviour.)
5. Is it safe to change the watchdog timeout (20 s), or does that just make the stall longer?

I can provide main_*.log/worker0_*.log excerpts for any of the events. For now I have stopped the engine (configctl zenarmor service eastpect stop) to confirm the household hiccups disappear without it