sshfs挂载远程Git仓库后,远程git status变慢问题排查求助
排查方法与解决方案
排查方向
- 检查远程文件锁状态:在远程CentOS6机器上执行
lsof | grep /path/to/repo,查看是否有未释放的文件句柄;或者用flock -n /path/to/repo/.git/index echo "lock free"测试.git/index文件是否被锁定。如果无输出,说明文件被其他进程持有锁,导致git操作阻塞。 - 跟踪远程Git系统调用:在远程机器上执行
strace -tt -T git status,对比速度正常和变慢时的输出,重点看耗时较长的系统调用(比如open、stat、flock),定位阻塞点。 - 开启sshfs调试日志:在本地CentOS7上重新挂载时添加
-o debug参数,即sshfs -o debug -o cache=no user@ip:/path/to/repo path/to/repo,观察本地执行git status后,sshfs与远程的通信是否有未关闭的会话或异常请求。 - 监控远程机器资源:用
top、iostat查看远程机器在git status变慢时的CPU、磁盘IO使用率,确认是否是sshfs的读写操作耗尽了系统资源。
解决方案
- 调整sshfs挂载参数:尝试使用
sshfs -o direct_io -o attr_timeout=1 -o cache_timeout=1 user@ip:/path/to/repo path/to/repo,direct_io跳过本地缓存直接读写远程文件,短超时参数让属性缓存快速过期,减少对远程文件状态的干扰。 - 确保本地操作后释放资源:本地执行完git命令后,可执行
fusermount -u path/to/repo临时卸载挂载,再重新挂载,看远程git操作是否恢复速度;或者避免在挂载状态下长时间保持文件打开。 - 替换远程访问方式:放弃sshfs挂载,直接在笔记本通过ssh连接到远程CentOS6操作Git;或者在本地CentOS7上
git clone远程仓库,日常通过git push/pull同步,避免文件系统层面的远程挂载开销。 - 优化远程Git配置:在远程仓库执行
git config --global core.preloadindex true(预加载索引提升性能)和git config --global core.fsyncobjectfiles false(关闭文件同步减少IO操作)。 - 检查sshfs版本兼容性:CentOS6的sshfs版本可能与CentOS7的2.10存在兼容问题,尝试在远程CentOS6升级sshfs到匹配版本,或在本地降级sshfs测试。
内容的提问来源于stack exchange,提问作者Lotus
相关产品推荐
相关产品推荐

