局域网服务器git服务延迟处理

来源:互联网 发布:unity3d 播放网络视频 编辑:程序博客网 时间:2024/06/01 23:26
记录以备忘
原由, 公司项目的git服务器, 几周前突然变的慢了. 再进行git fetch, git pull, git push 等远程操作时, 总要延迟10~15秒, 才有反馈.
今天偷点时间搞了一下.

首先了解一下, git数据传输协议 它一般是通过以下四种协议来和客户端传输数据的.


1.本地协议
   如果服务器就是在同一硬盘上,一般用此协议, eg :
   [git@192 IrisloftServer]$ git remote -v

   origin /home/git/repositories/ProjectName.git (fetch)

2 SSH协议
    Git 使用的传输协议中最常见的可能就是 SSH 了 eg:
    raochontaosimac:RainDay terrence$ git remote -v
    origin git@192.168.1.180:~/repositories/ProjectName.git (fetch)

3 Git协议
    这是一个包含在 Git 软件包中的特殊守护进程;它会监听一个提供类似于 SSH 服务的特定端口(9418),而无需任何授权。打算支持 Git 协议的仓库,需要先创建 git-daemon-export-ok 文件 — 它是协议进程提供仓库服务的必要条件 — 但除此之外该服务没有什么安全措施。要么所有人都能克隆 Git 仓库,要么谁也不能。这也意味着该协议通常不能用来进行推送。你可以允许推送操作;然而由于没有授权机制,一旦允许该操作,网络上任何一个知道项目 URL 的人将都有推送权限。不用说,这是十分罕见的情况。
    这个协议我是没用到过


4 HTTP/S 协议
    最后还有 HTTP 协议。HTTP 或 HTTPS 协议的优美之处在于架设的简便性。基本上,只需要把 Git 的裸仓库文件放在 HTTP 的根目录下,配置一个特定的 post-update 挂钩(hook)就可以搞定(Git 挂钩的细节见第 7 章)。此后,每个能访问 Git 仓库所在服务器上 web 服务的人都可以进行克隆操作。下面的操作可以允许通过 HTTP 对仓库进行读取:
    eg:
    raochontaosimac:RainDay terrence$ git remote -v
    bitbucket https://TerrenceRao@bitbucket.org/projectname.git (fetch)


现在项目使用的就是ssh 协议. git 远程操作的延迟其实也就是ssh登录的延迟, 更直接一点.
ssh git@192.168.1.180
同样也是10~15秒后能登录上服务器
ssh -v git@192.168.1.180
可以看到这期间都在做什么, 哪一块消耗了时间


下面说下如何解决这样的问题,最为常见的原因是因为server的sshd会去DNS查找访问
client IP的hostname. 这会消耗大量的时间.


解决方法是更改sshd_cofnig的配置


1. 打开文件
sudo emacs /etc/ssh/sshd_config,
CentOS系统, 同一目录还存在ssh_config, 注意一下文件名


2. 搜索UserDNS, 设置为no
有些系统可能没有这个选项, 没有的话, 就增加一行
UseNDS no


3.重启sshd服务
service sshd restart


再进行git 远程操作, 或ssh的登录操作. 速度就快多了
0 0
原创粉丝点击