VSCodeが切断される?e2-microやOracle無料インスタンスでも快適に使うためのスワップ設定術

✅ はじめに

近年はAIや高性能GPUの記事が目立ちますが、実際に多くのユーザーが使っているのは 無料プランのUbuntuサーバーe2-micro(GCP)Oracle CloudのFree Tier といった 低スペック環境です。

私自身もその一人。VSCodeでSSH接続して作業していると、途中で突然切断されてしまうことがありました。作業中のコードが消えてしまうこともあり、TeraTermに切り替えざるを得なかった経験があります。

VSCodeのの仕様が変わったせいか、今までは切断されることはなかったんです。
原因は、2025 年春の VS Code アップデート(v1.95 以降)で Remote‑SSH が常駐する vscode‑server プロセスと巨大なファイル監視サブプロセスを Node 20 ベースに刷新したためです。
無料 VPS の 0.5 〜 1 GB RAM 環境ではメモリが足りず、Linux の OOM‑killer が node プロセスを強制終了 → SSH トンネルごと落ちる、という流れで「突然切断」に見えます。

1. 仕様変更のポイント

時期変更内容低スペック VPS への影響
2025‑04 (VS Code 1.93)Remote‑SSH v0.108 で “companion” チャネルのハートビート間隔が短縮CPU 0.2 〜 0.3 core 常時使用
2025‑05 (VS Code 1.95)vscode‑server が Node 20 + 内蔵 file‑watcher に刷新。プロセス常駐数 2→3、RSS 約 +200 MB512 MB プランは OOM 発生 → 接続断【GitHub #9778】GitHub
2025‑06Dynamic port‑forward をデフォルトで自動有効化SSHD 側で AllowTcpForwarding no だと握手失敗・即切断Cursor – Community Forum

2. よく報告される症状

  • ssh child died, shutting down と出て再接続ループに入るStack Overflow
  • CLI の普通の ssh や TeraTerm は安定している
  • top / htop で見ると node ~/.vscode-server/bin/.../node が急激にメモリを消費し、瞬間的に Killed になる

3. 即効で効く応急処置

手順コマンド効果
リモートのキャッシュ削除rm -rf ~/.vscode-server/古いバイナリと拡張の衝突解消earlruby.org
Dynamic ポートフォワード無効settings.json に
"remote.SSH.enableDynamicForwarding": false
AllowTcpForwarding no の VPS でも接続維持
Keep‑alive 送信~/.ssh/config
ServerAliveInterval 60
ServerAliveCountMax 3
NAT / FW のアイドル切断を回避support.huaweicloud.com
メモリ節約①不要な拡張を remote 側で無効化
"remote.SSH.useLocalServer": false
Node プロセス数・RAM 削減

4. 抜本的な回避策

  1. VS Code のバージョンピン
    • 安定していた 1.92 (2025‑03) の ZIP を落とし、"update.mode": "none" で自動更新停止。
  2. 別プロセスエディタ併用
    • シェル作業・vim などは VS Code とは別セッション (tmux/Screen) にする。
  3. VS Code インサイダー版
    • v1.101-insider ではメモリリークが暫定修正されているという報告あり(Issue #9778 参照)。

参考にした公開情報

  • Remote‑SSH 2025‑05 アップデート後の大量切断報告(Cursor フォーラム)Cursor – Community Forum
  • vscode-server メモリリーク Issue #9778(GitHub)GitHub
  • .vscode-server ディレクトリ削除で復旧する事例(ブログ)earlruby.org
  • ssh は生きているのに VS Code だけ落ちる問題(Stack Overflow)Stack Overflow
  • Keep‑alive 設定でファイアウォールのアイドル切断を防ぐ方法(Huawei Cloud KB)support.huaweicloud.com

🧪 現在のマシンスペックと問題点

以下は、私が使用しているUbuntuインスタンスのスペックです:

$ free
total used free shared buff/cache available
Mem: 979708 526436 98036 1556 536932 453272
Swap: 0 0 0
  • メモリは約1GB
  • Swapは未設定
  • 長時間のVSCode接続で切断される

この状態では、少し重い処理を実行するだけで「Out of Memory(OOM)」が発生し、VSCode側がタイムアウト・切断してしまいます。

🛠 解決策:スワップファイルの導入

Swap(スワップファイル)を設定することで、物理メモリが不足したときの緊急避難先ができます。
手順は以下の通りです:

1. スワップファイルを作成(例:1GB)

sudo fallocate -l 1G /swapfile

または互換性重視なら:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

表示された内容

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 17.8276 s, 60.2 MB/s

2. パーミッションを設定

sudo chmod 600 /swapfile

3. 初期化と有効化

sudo mkswap /swapfile
sudo swapon /swapfile

表示された内容

sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=ea117786-54d3-4317-b575-130df8e58c5b

4. 永続化(再起動後も有効に)

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

表示された内容

/swapfile none swap sw 0 0

5. /etc/fstab に重複行がないか確認

cat /etc/fstab

出力に以下のような行が複数回書かれていないか確認してください:

/swapfile none swap sw 0 0

❌ NG例(今回の状態):

/swapfile none swap sw 0 0
/swapfile none swap sw 0 0

✅ OK例:

/swapfile none swap sw 0 0

🔧 重複していた場合の対処方法:

sudo nano /etc/fstab

もしくは

sudo vi /etc/fstab

で開いて、片方を削除 → 保存。

💡 なぜこれが重要?

  • fstab に同じ行が複数あると、起動時にスワップ領域の重複エラーマウント失敗が発生することがあります。
  • 特にCloud-initベースのインスタンス(e.g., GCP/Oracle)ではブート時の処理が繊細です。

🔍 その後どうなったか?

VSCodeでのSSH接続が 極端に切れにくくなり、普段どおりの開発作業ができるようになりました。
とくに、AIを使うほどのリソースは必要ないけど、ちょっとしたPythonスクリプトを書きたいといった用途には最適です。

💬 まとめ

VSCodeが切断される原因は通信の不安定さだけではなく、サーバー側のメモリ不足が関係していることがあります。

e2-microやOracle Cloudの無料プランでも、スワップファイルを設定すれば十分に快適な開発環境になります。
“ちょっとした工夫で劇的改善”──このような泥臭い改善も、これからの時代にこそ価値があるはずです。

スワップファイル作成ガイド

🔧 スワップファイル作成ガイド

VS Code Remote-SSH 接続切断問題の解決法
⚠️ 現在の状況:1GB RAM環境
1GB
総メモリ
0MB
スワップ
500MB+
VS Code必要メモリ
💥
OOM Killer発動
💡 解決策:スワップファイル作成
物理メモリが不足してもディスク容量で補完

📋 スワップファイル作成手順

1
スワップファイルを作成
1GBのスワップファイルを高速に作成します。fallocateコマンドを使用することで瞬時に領域を確保できます。
sudo fallocate -l 1G /swapfile
fallocate: ディスク領域を即座に確保
-l 1G: 1GBのサイズを指定
/swapfile: スワップファイルのパス
2
ファイルの権限を設定
セキュリティのため、スワップファイルはroot以外がアクセスできないように権限を制限します。
sudo chmod 600 /swapfile
chmod 600: 所有者のみ読み書き可能に設定
スワップファイルには機密情報が含まれる可能性があるため必須
3
スワップ領域として初期化
作成したファイルをLinuxがスワップ領域として認識できるようにフォーマットします。
sudo mkswap /swapfile
mkswap: ファイルをスワップ領域としてフォーマット
この時点ではまだスワップとして使用されていません
4
スワップを有効化
フォーマットしたスワップファイルを実際にシステムのスワップ領域として有効にします。
sudo swapon /swapfile
swapon: スワップ領域を有効化
この瞬間からシステムがスワップを使用開始
🔄 再起動後も有効にする(永続化)
/etc/fstab ファイルに以下の行を追加:
/swapfile none swap sw 0 0
📝 編集コマンド例:sudo nano /etc/fstab
スワップ作成の確認
free -h
swapon –show
cat /proc/meminfo | grep Swap
Swap: 1.0G と表示されれば成功!
🎉 これでVS Code Remote-SSHが安定動作!
OOM Killerによる突然の切断から解放されます

🧩 おまけ:VSCodeが切断されたときの応急処置

  • VSCodeのSSHセッションを一度閉じて再接続
  • 必要なら .vscode-server ディレクトリを削除して再構築
  • 長時間作業には screentmux の併用もおすすめです
タイトルとURLをコピーしました