Home / Blog / A 27-byte telemetry response nobody reads freezes Claude…
Tech News

A 27-byte telemetry response nobody reads freezes Claude Desktop every two

An unread 27-byte telemetry response leaks open file descriptors in Claude Desktop on Linux, exhausting system limits and crashing the renderer every two days.

By Dillip Chowdary • Nov 14, 2026 • Source: blog.dfb.sh

A 27-byte telemetry response nobody reads freezes Claude Desktop every two

Anthropic provides Claude Desktop for workstation environments, but Linux installations face recurring UI freezes and crashes every couple of days. According to blog.dfb.sh's report, an unread 27-byte telemetry response causes Chromium to leak file descriptors until the renderer crashes completely. Standard logs remained empty during failures, leaving the underlying defect hidden for months.

This report examines the debugging process required to trace the leak across Electron runtime layers, system crash daemons, and V8 engine internals. It is written for Linux engineers and developers maintaining long-running Electron desktop software. The breakdown covers disk saturation during crashes, virtual memory architecture, and how unconsumed network responses trigger total application failure.

01Disk saturation and runaway core dumps

Claude Desktop users on Linux encounter failures where interface elements disappear into empty skeletons or clicks cease responding entirely. The issue occurs irregularly because the application must remain running without restarts to trigger the bug. When the renderer terminates, the operating system kernel attempts a memory dump that severely degrades host machine performance.

Host diagnostics showed system load averages surging to 46 while executing the uptime utility took 20 seconds to respond. Storage pressure metrics confirmed extreme input and output bottlenecks, with ten-second averages reaching 85.30 and saturating local NVMe hardware. The systemd-coredump utility was attempting to serialize the entire virtual memory space of the crashed renderer.

Because standard Unix pipes cannot seek, untouched address pages could not be skipped and were transferred as literal zeros. The core dumper wrote 92.4 gibibytes in five minutes before exceeding timeout limits and leaving no file. Meanwhile, the application log simply noted that the main webview was unresponsive every 20 to 40 seconds.

02Renderer exit codes and custom logging

Isolating the failure required patching the desktop application binary to capture diagnostics before process termination. Core dumps were capped at 4 gibibytes, and standard output and error streams were redirected from the null device into the systemd journal. Eleven days later, Chromium recorded a fatal child thread error indicating the process had hung.

A 27-byte telemetry response nobody reads freezes Claude Desktop every two
Illustration · Pexels

Because standard stack traces revealed minimal detail, a debugger was attached to dump JavaScript call stacks during unresponsive states. Thirteen days later, the window stayed dead for 18 minutes while keyboard reloads failed, producing zero debugger output. Custom logging was subsequently implemented to record exact renderer exit codes and termination reasons.

Subsequent tests caught the renderer exiting cleanly with an exit code of zero, which Electron treated as an intentional shutdown. Because clean exits prevent automatic reloads, the window remained dead until custom code forced a reload, cutting downtime to one minute. Further logging revealed futex waits and failed GPU buffer allocations without identifying the root cause.

Advertisement

Tech Pulse Daily

Get tomorrow's pulse first

Join engineers who read Tech Pulse before stand-up. Free, weekday mornings.

03Live process capture and sparse files

After eight days, the interface froze while streaming an active assistant response, locking the typing animation at six seconds and 246 tokens. Because the renderer was stalled yet alive after 35 hours of uptime, live memory could be captured directly. Running the gcore utility extracted full memory snapshots from the renderer and browser processes.

Writing directly to disk files allowed gcore to produce a sparse file measuring 1.5 tebibytes in virtual size but only 1.5 gibibytes on disk. This disparity demonstrated that the massive memory footprint consisted of uncommitted virtual reservations rather than active resident data. The live dump allowed deep inspection of internal allocations without overloading storage drives.

The application executes on Electron 44, which incorporates the Chrome 152 runtime engine. Standard crash daemons convert these vast address reservations into literal zeros when streaming across pipes, explaining earlier disk thrashing. Analyzing the sparse image allowed researchers to examine how Chromium structures its address space across modern security sandboxes.

04Virtual memory reservations inside the sandbox

Chromium allocates 1,376 gibibytes of virtual address space specifically for the V8 JavaScript engine sandbox. Inside this boundary, sandboxed pointers are stored as base offsets so corrupted memory references cannot reach outside protected process memory. The allocation reserves one tebibyte for the sandbox proper alongside 352 gibibytes of guard regions to intercept invalid array indexing.

The initial 4 gibibytes of the sandbox constitute the pointer compression cage housing JavaScript heap objects. Pointers inside this zone use 32-bit offsets with low-bit tags to differentiate heap objects, weak references, forwarding pointers, and small integers. Additional guard regions exceeding 32 gibibytes protect against worst-case 64-bit array index calculations that compute out-of-bounds offsets.

Beyond V8, PartitionAlloc reserves two 16-gibibyte memory pools, while Oilpan reserves another 16 gibibytes for C++ objects. The bottom 4 gibibytes of system address space are mapped to force hardware faults if integers are dereferenced as pointers. Although V8 instructs the kernel to exclude sandbox reservations from core files, unseekable streaming pipes bypass these instructions.

05Unread telemetry replies and descriptor exhaustion

Detailed memory analysis of the stalled renderer identified an operating system resource leak tied directly to background telemetry. The desktop application repeatedly sends presence requests across the network but never reads the resulting 27-byte HTTP response bodies. Because incoming payloads remain unconsumed in network buffers, Chromium keeps an open file descriptor for every completed telemetry request.

Over approximately two days of continuous operation, the abandoned network descriptors accumulate until the operating system limit for the renderer is exhausted. Once descriptor handles run out, routine operations like futex synchronization, GPU memory allocations, and inter-process messaging fail immediately. Depending on which call fails first, the renderer either exits cleanly or hangs until terminated.

Chromium maintainers reviewed the report and concluded that retaining open file descriptors for unread response bodies represents intended behavior. Meanwhile, Anthropic's automated issue bot closed the submitted problem report after classifying it as unrelated to the Claude Code CLI. As a result, Linux users must restart Claude Desktop regularly or use custom patches to prevent descriptor exhaustion.

A 27-byte telemetry response nobody reads FAQ

Why does Claude Desktop freeze every two days on Linux?

Claude Desktop sends telemetry presence requests but never reads the 27-byte responses. Chromium retains an open file descriptor for each unread reply until descriptor limits are exhausted, causing the renderer to crash or hang.

Why did systemd-coredump saturate NVMe drives during crashes?

The renderer reserves 1.5 tebibytes of virtual address space for V8 sandbox protection. Because Unix pipes cannot seek, systemd-coredump wrote untouched sparse pages as literal zeros, generating 92.4 gibibytes of disk writes before timing out.

How did Anthropic and Chromium maintainers respond to the issue?

Chromium developers concluded that holding open file descriptors for unconsumed response bodies operates as intended. Anthropic's automated bot closed the bug report after determining it was not about Claude Code.

Sources

Dillip Chowdary

Author

Dillip Chowdary

Writes Tech Bytes coverage of AI, engineering, and the tools that actually ship. Editor of Tech Pulse Daily.

Related on Tech Bytes

Advertisement

5-min tech signal

Weekday briefing for engineers who skip the noise.

No spam · Unsubscribe anytime

Advertisement

✈️ CareerPilot

Your AI job-search copilot

Match your resume against live Ashby, Greenhouse & Lever openings — fit scores, job-specific resume optimization and email alerts.

Find matching jobs →

Free Tools

Browse all tools →