[BUG] CPU performance issue with long running processes

Resolved 💬 4 comments Opened Jan 4, 2026 by adameus03 Closed Feb 18, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Left claude process running for a few hours, here's what happened

I left my system unattended in the afternoon. After multiple hours sleeping I woke up at 2AM to do something else using my system. However I found my the graphical environment session to be unresponsive (black/dark screen). And the system fan was giving constant jet engine noise. So I switched up to a TTY, to see what's happening. First thing i've noticed was that claude code cli is active with 150%+ cpu usage on one process using 100-120%, other one 10-20% and few others. I then ran strace -p PID on the most CPU-intensive claude process to see what it might be doing, and what I found was a flood of [epoll_pwait, [access, statx] * 6] syscall sequences that are all the same.

epoll_pwait(15, [], 1024, 0, NULL, 8)   = 0
access("~/.claude/.config.json", F_OK) = -1 ENOENT (No such file or directory)
statx(AT_FDCWD, "~/.claude.json", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0600, stx_size=61016, ...}) = 0
access("~/.claude/.config.json", F_OK) = -1 ENOENT (No such file or directory) 
statx(AT_FDCWD, "~/.claude.json", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0600, stx_size=61016, ...}) = 0
access("~/.claude/.config.json", F_OK) = -1 ENOENT (No such file or directory)
statx(AT_FDCWD, "~/.claude.json", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0600, stx_size=61016, ...}) = 0  
access("~/.claude/.config.json", F_OK) = -1 ENOENT (No such file or directory)
statx(AT_FDCWD, "~/.claude.json", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0600, stx_size=61016, ...}) = 0 
access("~/.claude/.config.json", F_OK) = -1 ENOENT (No such file or directory)
statx(AT_FDCWD, "~/.claude.json", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0600, stx_size=61016, ...}) = 0 
access("~/.claude/.config.json", F_OK) = -1 ENOENT (No such file or directory)
statx(AT_FDCWD, "~/.claude.json", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0600, stx_size=61016, ...}) = 0

In each such sequence it attempts to check if the ~/.claude/.config.json file exists. And this thing is presumably done in a kind of infinite loop.

I wasn't trying to reproduce it.

What Should Happen?

Nothing

Error Messages/Logs

Steps to Reproduce

Leave claude code running unattended for multiple hours on a GNU/Linux system. But I'm not sure if you'll reproduce it as I didn't try to reproduce it.

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.0.76

Platform

Anthropic API

Operating System

Ubuntu/Debian Linux

Terminal/Shell

Terminator/zsh

Additional Information

_No response_

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗