2008-09-29 85 views
11

我一直在使用emacs tramp进行一些远程开发,发现它很慢。每次保存文件时,大约需要10秒钟才能完成保存。所以,现在我正在使用rsync远程传输文件,而且工作速度更快,这需要大约一秒的时间,而且emacs的本地保存是即时的。在tramp中是否有任何配置选项使其运行速度与rsync在命令行上的速度一样快?即使我看到如此糟糕的表现,使用tramp而不是rsync有没有好处?使用emacs tramp与rsync进行远程开发

回答

5

如果您使用的是SSH/SCP功能流浪汉,你会发现开启了一个永久的SSH连接将流浪汉行动快很多:他们会重新使用现有的连接,而不是创建一个新的每次切割在不影响安全性的情况下减少大量的加密开销。请参阅关于SSH ControlMaster功能的文章。

+0

它仍然需要大约10秒,但我能够立即连接到其他服务器。我想知道这是否会成为服务器问题。 – 2008-09-30 04:30:12

+0

如果它仍然需要10秒钟,它可能是远程计算机上的.bashrc/.bash_profile导致延迟。 – 2013-02-20 22:31:38

3

你知道在gnu.org流浪汉文档中的一节提到使用rsync的?它说,在部分:

5.3外部转移方法

外部转移方法通过多种渠道操作,使用于许多操作的 远程外壳连接,同时委托文件 传输到外部传输工具。

这节省了编码和解码的多路复用通过所述一个连接 传送具有与内联方法的开销。

...

rsync的 - SSH和rsync 使用ssh命令安全地连接到远程计算机和 rsync命令来传输文件是几乎相同的SCP方法。

While rsync performs much better than scp when transferring files that 
exist on both hosts, this advantage is lost if the file exists only on one side 
of the connection. 

The rsync based method may be considerably faster than the rcp based 
methods when writing to the remote system. Reading files to the local 
machine is no faster than with a direct copy. 

This method supports the ‘-p’ hack. 
11

虽然流浪汉可以配置为使用大量的运输方法,我想你使用ssh连接到远程服务器。

相信大多数需要完成操作的时间来自建立连接和认证。如果您使用的是足够新的OpenSSH版本,可以通过使用连接共享功能来获得帮助,请参阅ssh_config(5)中的ControlMaster。

我建议你尝试

ControlMaster auto

,看看是否能改善这种情况。

0

既然你刚才说,你有一个特定的服务器上的问题,检查问题的机器上sshd的配置文件。它可能类似于/ etc/ssh/sshd_config。

查找名为“UseDNS”的配置选项。将其设置为“否”

看看这是否会加快你的速度。如果是这样,那么ssh可能会超时等待反向dns查找,你可能不关心。

0

最近,我来拥抱SSHFS让远程文件是在本地编辑。适用于Linux,Mac和Unix系统,并将ssh部分放在一个命令中,而不是每次访问。并完全存在于用户空间中。

1

对我来说加速是显着的!现在使用流浪汉真的很愉快。我也比sshfs更喜欢它,因为我也从emacs中编译,tramp为我编译远程编译并解释编译器的错误消息:)

0

如果您使用ssh方法,则可以尝试sftp方法,(我相信)打开一个持久的sftp连接到远程ssh服务器。另外,如果您使用GNOME,则可以将sftp添加到tramp-gvfs-methods以使TRAMP使用GNOME的GVFS连接到sftp服务器,这可能会也可能不会更快/更方便。

5

几个答案都提到使ControlMaster保持持续 ssh连接开放(避免了昂贵的连接建立/手发抖,否则需要通过ssh每个流浪汉操作),但你不不需要在Emacs之外配置任何东西来使用它 - 如果你看一下tramp-methods变量,你会看到现有的方法可以启用ControlMaster。

具体来说,就是rsynccscpc的方法。

连接的两端都需要支持ControlMaster,当然(例如Cygwin不能这样做,这对于Windows用户*来说是一种耻辱),但是我建议将其中的一个设置为您的tramp-default-method

没有持久连接会导致扩展Tramp的使用非常痛苦,但是使用它非常有用,(在给定相当快的连接的情况下,几乎可以忘记它正在发生)。

在回答你的问题的最后部分,是的,有很好的理由使用Tramp而不是手动rsyncing文件。主要的一点是shell命令可以直接在远程服务器上执行,并且您甚至不必考虑它,因为Emacs负责处理细节。

例如,从远程文件缓冲器,的MxshellRET打开远程服务器上的外壳,并命令等的MxrgrepRET的Mxfind-grep-diredRET将运行在远程服务器上查找+ grep。我相信这通常适用于调用shell命令的函数。

对我来说,这是绰绰有余的理由来使用Tramp(除非在远程服务器上安装Emacs并使用本地显示器是一种选择,在这种情况下,对于长期使用,我会考虑这样做)。

(*)当使用Windows我曾经在本地建立一个Linux虚拟机并运行里面那个Emacs的(使用Cygwin提供的X显示)为唯一原因使用ControlMaster为流氓(https://stackoverflow.com/a/3049375/324105)的。