Visual Studio Code には便利な Extension が色々ありますよね
Remote Development に含まれる Remote SSH というのを便利だから使っていたんですが
ちょっと問題を起こしてしまったので備忘録です
当時は無知だった故にかなり恥ずかしいことをやらかしました。
経緯
- とある仕事の開発環境がAWSのインスタンス上に構築
- ローカルで扱うことが禁止されていたデータが有り、ローカルでの動作確認が無理だったので編集はローカル、確認はファイルを都度アップロードしサーバー上でするプロジェクトだった
- vim で直接いじるの慣れてなくて辛いし編集した都度 winscp でやり取りするのもなぁ
- 軽くググったら Remote SSH で直接編集できるし便利だな、みんなでこれ使うか!
- 管理者「それちょっとやばいんで使うのやめてください」
何が起きていたか
Remote SSH (Remote Development) の仕組みは単にSSH接続してファイル編集できるというものではなく
接続した先の環境上に vscode-server というのをインストールして VScode の機能を持った中継サーバーを起動させ
そこに接続してサーバー上のファイルを直接編集できるようにするといったものです。
この vscode-server が曲者でサーバーリソースを遠慮なくバカ食いしていくものでした。
実体は、ホスト側に .vscode-server などという怪しいディレクトリを作り node を始めとしたバイナリを流し込みたった 65536 個しかないポートの 1 つを勝手に奪い(内部でポートフォワーディングをしているらしい)、メモリと CPU をバカ食いする node のサーバを建てるという凶悪な仕様になっている。
しかもなんと最高なことに、向こうのサーバでダウンロードに失敗するとこちらでダウンロードして scp して注ぎ込む仕様にすらなっている(設定で変えられる)。鬼か。
※引用元記事
https://qiita.com/Ishotihadus/items/469b8f59ce74333a0a2e#remote-development
起動された vscode-server を ps で確認してみるとこのような感じ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
(略)
myuser 2538 0.0 0.0 119848 188 ? S 00:03 0:00 sh /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/server.sh --start-server --host=127.0.0.1 --enable-remote-auto-shutdown --port=0 --connection-secret /home/myuser/.vscode-server/.622cb03f7e070a9670c94bae1a45d7
myuser 2546 0.0 2.7 1008360 56036 ? Sl 00:03 0:17 \_ /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/node /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/out/vs/server/main.js --start-server --host=127.0.0.1 --enable-remote-auto-shutdo
myuser 2680 2.9 5.7 1204864 114760 ? Sl 00:03 13:41 \_ /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/node /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/out/bootstrap-fork --type=extensionHost --uriTransformerPath=/home/myuser
myuser 2716 0.6 15.3 1139148 307560 ? Sl 00:03 2:50 | \_ /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/node /home/myuser/.vscode-server/extensions/bmewburn.vscode-intelephense-client-1.6.3/node_modules/intelephense/lib/intelephense.js --node-ipc --client
myuser 2691 0.0 1.1 881344 22788 ? Sl 00:03 0:06 \_ /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/node /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/out/bootstrap-fork --type=watcherService
当時の開発環境のメモリは2GBでした、その上でなんか使用率15%とか見えますね
[myuser@ip-XXX-XX-XX-XXX .vscode-server]$ pwd
/home/myuser/.vscode-server
[myuser@ip-XXX-XX-XX-XXX .vscode-server]$ du -sh *
408M bin
101M data
75M extensions
インストールされた vscode-server のファイルサイズもなかなか男前ですね
こんなにリソースを食っているが 真に恐ろしいのは個人専用である ということ
別の人が同じ環境に Remote SSH を使った場合、新たにその人専用の vscode-server がインストールされて
リソースバカ食いする node を新しく立ち上げてサーバーリソースを容赦なく圧迫します。
これをチーム内の3人くらいがそれぞれ使ってた結果、開発環境の大部分のリソースを食い尽くし
サーバーがダウン寸前まで行く不調を起こして注意を受けたということがありました
結論
- Remote SSH(Remote Development) は便利だけどヤバい、共用の環境には絶対使わない方がいい
- ベタ褒めする記事ばっかり見つかるから気軽に使用されそう、実際その一人だった
- 共有する環境ではなく確実に個人だけが使う環境なら自己責任で使う選択肢はある
代替策
sftp という拡張機能を使うようにしました。
https://rfs.jp/sb/vsc/vscsftp.html
リモート編集しているのとほぼ変わらない操作感だったので便利でした
少なくとも今回やりたかったことはsftpで充分カバーできた