Ich habe einige Remote-Entwicklung mit Emacs Tramp gemacht und festgestellt, dass es ziemlich langsam war. Jedes Mal, wenn ich eine Datei speichere, dauert es etwa 10 Sekunden, um den Speichervorgang abzuschließen. So, jetzt benutze ich rsync, um die Dateien aus der Ferne zu übertragen, und es funktioniert viel schneller, es dauert etwa eine Sekunde plus die lokalen speichert von Emacs sind sofort. Gibt es Konfigurationsoptionen innerhalb von Tramp, damit es so schnell ausgeführt wird wie rsync in der Befehlszeile? Gibt es Vorteile, Tramp anstelle von rsync zu verwenden, obwohl ich so schlechte Leistung sehe?Verwenden von Emacs Tramp vs Rsync für die Remote-Entwicklung
Antwort
Wenn Sie Tramp für ssh/scp-Funktionalität verwenden, werden Sie feststellen, dass das Öffnen einer persistenten SSH-Verbindung die Tramp-Operationen viel schneller macht: Sie werden die bestehende Verbindung wiederverwenden, anstatt jedes Mal eine neue Verbindung zu erstellen einen großen Teil des kryptographischen Overhead aus, ohne die Sicherheit zu beeinträchtigen. Siehe diesen Artikel auf der SSH ControlMaster Funktionalität.
Kennen Sie den Abschnitt in der Tramp-Dokumentation auf gnu.org, der die Verwendung von rsync erwähnt? Er sagt unter anderem:
5,3 Externe Übertragungsmethoden
Die externe Übertragungsverfahren über mehrere Kanäle arbeiten, die für viele Aktionen Remote-Shell-Verbindung während Datei Delegieren Transfers an ein externes Übertragungsprogramm.
Dies spart den Overhead der Codierung und Decodierung, die das Multiplexen der Übertragung über die eine Verbindung mit den Inline-Methoden hat.
...
rsync - ssh und rsync den Befehls ssh Verwendung sicher auf den entfernten Rechner zu verbinden und den rsync Befehl zur Übertragung von Dateien ist fast identisch mit dem scp Verfahren.
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.
Während tramp konfiguriert werden kann, eine große Anzahl von Transportmethode zu verwenden, ich nehme an, Sie ssh verwenden, um den Remote-Server zu verbinden.
Ich glaube, dass die meiste Zeit, die es dauert, um den Vorgang abzuschließen, vom Aufbau einer Verbindung und der Authentifizierung kommt. Wenn Sie eine neue Version von OpenSSH verwenden, können Sie dies mithilfe der Funktion für die gemeinsame Nutzung von Verbindungen tun, siehe ControlMaster in ssh_config (5).
Ich schlage vor, Sie
ControlMaster auto
versuchen und sehen, ob das die Situation verbessert.
Da Sie zuvor gesagt haben, dass Sie ein Problem auf einem bestimmten Server haben, überprüfen Sie die sshd-Konfigurationsdatei auf dem Problemcomputer. Es ist wahrscheinlich etwas wie/etc/ssh/sshd_config.
Suchen Sie nach einer Konfigurationsoption namens "UseDNS". Setze das auf "Nein"
Sehen Sie, ob das die Dinge nicht für Sie beschleunigt. Wenn ja, dann ist es wahrscheinlich, dass ssh auf eine umgekehrte DNS-Suche wartet, die Ihnen wahrscheinlich egal ist.
Kürzlich habe ich sshfs umarmen, so dass die Remote-Dateien lokal bearbeitet werden können.Funktioniert gut für Linux-, Mac- und Unix-Systeme und fügt die ssh-Teile in einen Befehl anstatt in jeden Zugriff ein. Und existiert vollständig im Benutzerbereich.
Für mich war die Beschleunigung signifikant! Tramp ist jetzt sehr angenehm. Ich bevorzuge es auch über sshfs, da ich auch aus emacs kompilieren und tramp macht die remote-compilation für mich und interpretiert die Fehlermeldungen des Compilers für mich :)
Wenn Sie die SSH-Methode verwenden, können Sie stattdessen die SFTP-Methode versuchen , was (glaube ich) eine persistente sftp-Verbindung zum entfernten ssh-Server öffnet. Wenn Sie GNOME verwenden, können Sie auch sftp
zu tramp-gvfs-methods
hinzufügen, damit TRAMP mit sftp-Servern über GNOMEs GVFS eine Verbindung herstellt, die möglicherweise schneller/bequemer ist.
Ein paar Antworten erwähnt ermöglicht Control eine persistent SSH-Verbindung offen zu halten (was die teure Verbindung vermeidet Set-up/Handshake sonst benötigt für jeden Tramp Betrieb über ssh), aber Sie don‘ • Sie müssen alles außerhalb von Emacs konfigurieren, um dies zu verwenden - wenn Sie sich die tramp-methods
Variable ansehen, werden Sie sehen, dass es bereits Methoden gibt, die ControlMaster aktivieren.
Speziell die rsyncc
und scpc
Methoden.
Beiden Seiten der Verbindung müssen Control, natürlich unterstützen (zum Beispiel Cygwin nicht so tun kann, was eine Schande für Windows-Nutzer *), aber ich würde vorschlagen, einen von denen als tramp-default-method
Einstellung.
Keine dauerhafte Verbindung macht die erweiterte Tramp-Nutzung ziemlich schmerzhaft, aber mit einem ist es unglaublich brauchbar (bis zu dem Punkt, wo man bei einer relativ schnellen Verbindung fast vergessen kann, dass es passiert).
Als Antwort auf den letzten Teil Ihrer Frage, ja, es gibt sehr gute Gründe, Tramp anstelle von rsyncing die Dateien manuell zu verwenden. Der wichtigste ist, dass Shell-Befehle direkt auf dem Remote-Server ausgeführt werden können und Sie nicht einmal darüber nachdenken müssen, da Emacs sich um die Details kümmert.
beispielsweise von einem entfernten-Dateipuffer, Mxshell
RET öffnet eine Shell auf dem Remote-Server, und Befehle, wie Mxrgrep
RET und Mxfind-grep-dired
RET wird der Lauf finde + grep auf dem entfernten Server. Ich glaube, das gilt generell für Funktionen, die Shell-Befehle aufrufen.
Für mich ist das mehr als genug Grund, Tramp zu verwenden (es sei denn, Emacs auf dem Remote-Server zu installieren und die Verwendung Ihrer lokalen Anzeige war eine Option in diesem Fall, für eine langfristige Nutzung würde ich dies stattdessen in Betracht ziehen).
(*) Bei Verwendung von Windows verwenden ich lokal einen Linux-VM Host und führten Emacs im Innern, dass (mit Cygwin dem X-Display Providing) für den Sohle Grund der Verwendung von Control für Tramp (https://stackoverflow.com/a/3049375/324105).
Meine Emacs 25.3.2 hat in 'tramp-methods' keine' scpc' oder 'rsyncc', aber ich sehe, dass die Variable' tramp-ssh-controlmaster-options' für '% c' eingefügt wird und die normale' ssh' Methode '' verwendet % c' – unhammer
- 1. Emacs mit Tramp-Modus
- 2. emacs tramp performance
- 3. Wie zusammen in Emacs mit TRAMP SSH und SUDO verwenden
- 4. Ist es möglich, Ropemacs mit TRAMP in Emacs zu verwenden?
- 5. TRAMP ignoriert tramp-remote-Pfad
- 6. Tramp-Modus in Emacs mit SSH-Konfiguration
- 7. emacs tramp über eine unzuverlässige Verbindung
- 8. Emacs-Shell-Befehl gleichwertig mit tramp-Modus
- 9. Wie kann Autosave für Tramp-Puffer in Emacs deaktiviert werden?
- 10. Remote-Verzeichnis in Emacs aktualisieren Tramp-Modus
- 11. Passwörter in Emacs Tramp-Modus bearbeiten
- 12. Wie erzwinge ich eine Emacs-Tramp-Zeit?
- 13. Stop Tramp-Modus läuft auf emacs Start
- 14. Verwenden von Tramp in Python-Shell von Cygwin emacs24.5
- 15. Verwenden von Emacs TRAMP mit einem SSH-Server, der/bin/sh nicht bereitstellt?
- 16. Emacs 24.3.1 TRAMP bleibt beim Öffnen der Datei hängen
- 17. Emacs Tramp stecken bei 'Remote-Shell-Eingabeaufforderung gefunden' während Dateiabruf
- 18. In Emacs, wie finde ich heraus, welches Paket lädt Tramp?
- 19. Emacs: Terminal vs Shell?
- 20. Emacs Tramp konnte nicht Region in Datei schreiben
- 21. Verwenden von Emacs für große große Projekte
- 22. Skript-Datei vs Befehlszeile: rsync und --exclude
- 23. Verwenden Sie die Emacs-Tableiste?
- 24. XEmacs vs Emacs was ist besser für die Programmierung C++
- 25. Verwenden von Subversion für die allgemeine Sicherung
- 26. Verwenden von rsync zum Bereitstellen von Codeaktualisierungen für die Symfony-Anwendung
- 27. Carbon vs Aqua vs Cocoa Emacs baut
- 28. Verwendung von Tramp mit EmacsW32 und Cygwin, möglich?
- 29. Ursprüngliche Bearbeitung von Remote-Datei mit Emacs Tramp aus SSH-Sitzung
- 30. Verwenden von Git mit Emacs
Es dauert immer noch etwa 10 Sekunden, aber ich kann sofort mit anderen Servern verbinden. Ich frage mich, ob es ein Serverproblem sein könnte. –
Wenn es immer noch 10 Sekunden dauert, könnte die .bashrc/.bash_profile auf dem Remote-Computer die Verzögerung verursachen. –