Logo návodník

Jak přestat VPS přetěžovat VS Code: praktický návod

VS Code přes Remote-SSH je skvělý — pohodlně editujete přímo na serveru. Problém je, že součásti „na serveru“ (tzv. vscode-server) mohou na slabším stroji spustit hodně procesů (file watcher, jazykové servery, rozšíření) a server se kvůli tomu přetěžuje. V tomto článku vysvětlím, proč se to děje a ukážu praktické kroky, jak zátěž zmírnit — od rychlé první pomoci až po trvalé omezení.

Co se na serveru děje

Když se připojíte z VS Code přes Remote-SSH, na serveru se spustí malý „server“, který zajišťuje:

  • sledování souborů (file watcher) – reaguje na změny v souborovém systému,
  • jazykové servery (Python, TypeScript, atd.) – poskytují vyhledávání, doplňování, lintování,
  • extension host a další procesy rozšíření.

U velkých projektů nebo při špatném nastavení může sledování a jazykové servery výrazně zatěžovat CPU, paměť a diskové I/O. Výsledek: server se zpomalí nebo dokonce zamrzne.


Rychlá první pomoc

Pokud je server právě přetížený, můžete udělat toto:

  1. Připojte se přes SSH a najděte procesy VS Code:
ps aux | grep -i vscode
  1. Snižte prioritu hlavního procesu (nahraďte <PID> skutečným číslem procesu):
sudo renice +10 -p <PID>
sudo ionice -c3 -p <PID>
  1. Pokud chcete procesy okamžitě ukončit:
pkill -f vscode-server

Po tomto příkazu se VS Code při dalším připojení znovu nastartuje.


Trvalé řešení: konfigurace VS Code

Největší úsporu přinese nastavení VS Code tak, aby zbytečně neindexoval celé projekty a nespouštěl nepotřebné funkce. To se řeší v souboru settings.json. Důležité jsou dvě úrovně:

  • Globální nastavení (User/Machine) – platí pro všechny projekty. Obvykle se nachází v ~/.vscode-server/data/Machine/settings.json.
  • Lokální nastavení projektu (Workspace) – soubor ./.vscode/settings.json v konkrétním repozitáři, který přepíše globální nastavení.

Doporučené globální nastavení

Tento soubor radikálně sníží zátěž: vypne file watcher, omezí jazykové servery a zakáže automatické aktualizace rozšíření.

{
    "files.watcherExclude": {
        "**": true,
        "**/node_modules/**": true,
        "**/.git/**": true,
        "**/.venv/**": true,
        "**/venv/**": true,
        "**/dist/**": true,
        "**/build/**": true,
        "**/.cache/**": true
    },
    "git.enabled": false,
    "git.autoRepositoryDetection": "openEditors",
    "git.autofetch": false,
    "git.confirmSync": false,
    "search.exclude": {
        "**/node_modules": true,
        "**/.venv": true,
        "**/venv": true,
        "**/dist": true,
        "**/build": true,
        "**/.cache": true
    },
    "search.followSymlinks": false,
    "python.analysis.indexing": false,
    "python.analysis.autoImportCompletions": false,
    "python.analysis.completeFunctionParens": false,
    "typescript.tsserver.maxTsServerMemory": 256,
    "typescript.tsserver.log": "off",
    "typescript.disableAutomaticTypeAcquisition": true,
    "javascript.suggest.autoImports": false,
    "javascript.validate.enable": false,
    "extensions.autoUpdate": false,
    "extensions.autoCheckUpdates": false,
    "extensions.ignoreRecommendations": true,
    "remote.SSH.useLocalServer": true,
    "remote.SSH.remoteServerListenOnSocket": true,
    "telemetry.telemetryLevel": "off",
    "workbench.startupEditor": "none",
    "files.simpleDialog.enable": true,
    "files.autoSave": "off"
}

Co toto dělá:

  • files.watcherExclude vypíná sledování změn v souborech (hlavní zdroj zátěže).
  • git.enabled: false zakáže náročné operace Gitu, pokud stačí používat Git z příkazové řádky.
  • python.* a typescript.* nastavení omezují jazykové servery, které jinak hodně indexují.
  • extensions.* vypínají automatické aktualizace rozšíření a doporučení.
  • remote.SSH.* přesune část logiky na lokální počítač a sníží počet procesů na serveru.
  • telemetry.telemetryLevel: off zakáže sběr telemetrie.

Lokální nastavení pro vývojové projekty

Na vývojovém serveru můžete chtít mít víc funkcí (Git, částečný watcher, IntelliSense). To se řeší lokálním ./.vscode/settings.json přímo v projektu. Typicky povolíte Git, necháte watcher fungovat jen na zdrojových složkách a zvýšíte paměť pro TypeScript.

{
    "files.watcherExclude": {
        "**/node_modules/**": true,
        "**/.git/**": true,
        "**/.venv/**": true,
        "**/venv/**": true,
        "**/dist/**": true,
        "**/build/**": true,
        "**/.cache/**": true
    },
    "git.enabled": true,
    "git.autofetch": false,
    "typescript.tsserver.maxTsServerMemory": 512,
    "javascript.suggest.autoImports": true,
    "javascript.validate.enable": true
}

Tento soubor přepíše přísné globální nastavení pouze pro konkrétní projekt.


Proč někdy běží více serverů VS Code

Každé otevřené okno Remote-SSH = vlastní serverový proces. Pokud otevřete pět projektů, běží pět serverů. Navíc se po aktualizaci VS Code instalují nové verze serveru a staré procesy mohou zůstat viset. Pomůže:

  • Zavřít nepotřebná okna VS Code.
  • Ukončit staré procesy:
pkill -f vscode-server
  • Odstranit staré verze:
rm -rf ~/.vscode-server/cli/servers/Stable-*

Shrnutí

  • VS Code Remote-SSH může server přetížit hlavně kvůli file watcheru a jazykovým serverům.
  • Rychlá pomoc je procesy zabít nebo snížit jejich prioritu.
  • Trvalé řešení je správně nastavit settings.json.
  • Globální nastavení drží server v bezpečí, workspace nastavení umožní pohodlnější vývoj jen tam, kde je to potřeba.
  • Vyplatí se pravidelně čistit staré verze vscode-server a mít otevřené jen tolik oken VS Code, kolik opravdu používáte.