SUSE Tumbleweed中执行Shell命令时Git占用100%CPU问题求助
特定文件夹下Git进程高CPU问题排查与解决
1. 检查Git钩子脚本
特定仓库出现问题,首先排查.git/hooks目录下的自定义钩子——这类脚本可能在仓库触发操作时自动执行,若脚本存在逻辑问题(如循环、大量计算),会导致Git进程占用高CPU。
- 列出所有钩子文件:
ls -la .git/hooks/ - 若发现非默认的可执行钩子(如
pre-commit、post-checkout),临时重命名禁用(例如mv pre-commit pre-commit.bak),再执行命令测试问题是否消失。
2. 调整Git自动操作配置
部分Git配置项可能导致后台自动执行资源密集型操作:
- 检查
core.preloadindex:该配置预加载索引,在大仓库中可能引发高CPU。执行git config --local core.preloadindex查看状态,若为true,临时关闭:git config --local core.preloadindex false - 禁用自动垃圾回收:Git的
auto-gc会在特定条件下自动执行git gc,大仓库中该操作耗时极长。执行git config --local gc.auto 0临时关闭,测试问题是否缓解。
3. 排查Shell自动脚本
执行cd这类基础命令也触发问题,大概率是Shell配置在进入Git仓库时自动执行Git相关命令(如提示符工具实时获取分支、状态):
- 切换到纯净Shell环境测试:执行
bash --noprofile --norc进入无配置的bash,进入目标文件夹执行命令,若问题消失,说明是.bashrc/.zshrc等配置中的自动脚本导致。 - 定位问题脚本:检查Shell配置文件中与Git相关的提示符美化、目录切换钩子(如
PROMPT_COMMAND、chpwd函数),注释掉相关代码后测试。
4. 修复Git仓库索引与状态
仓库索引损坏或存在大量未跟踪文件,会导致Git每次操作都需重新计算状态:
- 查看仓库状态:
git status,若存在大量未跟踪文件,添加到.gitignore或暂存/提交;若有索引错误提示,执行git reset --hard(注意:会丢失未提交修改,谨慎操作)重置索引。 - 检查仓库完整性:
git fsck --full,修复损坏的Git对象。
5. 清理文件系统权限与缓存
即使已取消TeX文件的可执行权限,可能仍有残留问题:
- 批量清理异常可执行权限:
find . -type f -executable -not -name "*.sh" -not -name "*.py" -exec chmod -x {} \;(排除正常脚本文件) - 清理文件系统缓存:
sudo sync && sudo sysctl -w vm.drop_caches=3,释放缓存后测试。
内容的提问来源于stack exchange,提问作者user2609605
相关产品推荐
相关产品推荐

