[BUG] CPU performance issue with long running processes
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_
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗