コンテンツにスキップ

VSCode のプロファイリング

VSCode を利用している際に、メモリ使用量が高くなることがある。その際に、どの拡張機能がメモリを多く消費しているのかを調査するために、メモリプロファイリングを行ったので、その備忘録を残す。

プロファイリングの方法

プロファイリングを行うための方法を 2 つ紹介する。

code --status

1 つ目の方法は、code --status をターミナルで実行するというもの。実行すると、メモリ使用率や CPU 使用率などが表示される。

code --status
実行結果
Version:          Code 1.96.0 (138f619c86f1199955d53b4166bef66ef252935c, 2024-12-11T02:29:09.626Z)
OS Version:       Darwin arm64 23.5.0
CPUs:             Apple M1 Pro (8 x 2400)
Memory (System):  32.00GB (2.56GB free)
Load (avg):       3, 3, 3
VM:               0%
Screen Reader:    no
Process Argv:     --crash-reporter-id 8e233b69-3003-47f6-9c3d-510b54f9ecaf
GPU Status:       2d_canvas:                              enabled
                  canvas_oop_rasterization:               enabled_on
                  direct_rendering_display_compositor:    disabled_off_ok
                  gpu_compositing:                        enabled
                  multiple_raster_threads:                enabled_on
                  opengl:                                 enabled_on
                  rasterization:                          enabled
                  raw_draw:                               disabled_off_ok
                  skia_graphite:                          disabled_off
                  video_decode:                           enabled
                  video_encode:                           enabled
                  webgl:                                  enabled
                  webgl2:                                 enabled
                  webgpu:                                 enabled
                  webnn:                                  disabled_off

CPU %   Mem MB     PID  Process
    2      229   32674  code main
    0       66   32677     gpu-process
    0       33   32678     utility-network-service
    0      360   32679  window [1] (12.md — Untitled (Workspace))
    1      262   32680  window [2] (settings.json — .ssh)
    0       66   32711  ptyHost
    0        0   32937       /Users/<USER_NAME>/.local/share/devbox/global/default/.devbox/nix/profile/default/bin/zsh -il
    0        0   32938       /bin/zsh -il
    0        0   32940       /Users/<USER_NAME>/.local/share/devbox/global/default/.devbox/nix/profile/default/bin/zsh -il
    0        0   41234       /Users/<USER_NAME>/.local/share/devbox/global/default/.devbox/nix/profile/default/bin/zsh -i
    0        0   41512       /Users/<USER_NAME>/.local/share/devbox/global/default/.devbox/nix/profile/default/bin/zsh -i
    0        0   43188       /Users/<USER_NAME>/.local/share/devbox/global/default/.devbox/nix/profile/default/bin/zsh -i
    0        0   43471       /Users/<USER_NAME>/.local/share/devbox/global/default/.devbox/nix/profile/default/bin/zsh -i
    0      131   32712  shared-process
    0       66   32713  fileWatcher [2]
    3      950   32935  extensionHost [2]
    0       66   33059       electron-nodejs (languageserver.js )
    0       66   33061       electron-nodejs (server.js )
    0       66   33077       /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/json-language-features/server/dist/node/jsonServerMain --node-ipc --clientProcessId=32935
    0       98   33331       /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Users/<USER_NAME>/.vscode/extensions/streetsidesoftware.code-spell-checker-4.0.21/packages/_server/dist/main.cjs --node-ipc --clientProcessId=32935
    0       33   35050       electron-nodejs (server.js )
    0       33   35051       electron-nodejs (server.js )
    0        0   35059       /Users/<USER_NAME>/.vscode/extensions/hashicorp.terraform-2.34.1-darwin-arm64/bin/terraform-ls serve
    0       66   35106       electron-nodejs (server-node.js )
    0      262   41094       electron-nodejs (server.js )
    0       66   42406       /Users/<USER_NAME>/Library/Application Support/cloud-code/cloudcode_cli/cloudcode_cli/darwin_arm64/cloudcode_cli duet -logtostderr
    0      131   34097  window [3] (Process Explorer)
    0       66   41180  fileWatcher [1]
    0      590   43102  extensionHost [1]
    0        0   43144       /Users/<USER_NAME>/.vscode/extensions/ms-python.python-2024.22.0-darwin-arm64/python-env-tools/bin/pet server
    0       66   43155       electron-nodejs (languageserver.js )
    0       98   43156       electron-nodejs (server.js )
    0       66   43157       /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/markdown-language-features/dist/serverWorkerMain --node-ipc --clientProcessId=43102
    0       66   43180       electron-nodejs (server.js )
    0       66   43284       /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/json-language-features/server/dist/node/jsonServerMain --node-ipc --clientProcessId=43102
    0       33   43290       /Users/<USER_NAME>/.vscode/extensions/hashicorp.terraform-2.34.1-darwin-arm64/bin/terraform-ls serve
    0       33   43377       /Users/<USER_NAME>/dev/Nishikoh.github.io/.venv/bin/python /Users/<USER_NAME>/.vscode/extensions/ms-python.python-2024.22.0-darwin-arm64/python_files/run-jedi-language-server.py
    0       66   43604       electron-nodejs (server-node.js )
    0       98   43613       /Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin) /Users/<USER_NAME>/.vscode/extensions/streetsidesoftware.code-spell-checker-4.0.21/packages/_server/dist/main.cjs --node-ipc --clientProcessId=43102
    0       66   43747       /Users/<USER_NAME>/Library/Application Support/cloud-code/cloudcode_cli/cloudcode_cli/darwin_arm64/cloudcode_cli duet -logtostderr

Workspace Stats:
|  Window (settings.json — .ssh)
|  Window (12.md — Untitled (Workspace))
|    Folder (.ssh): 12 files
|      File types: pub(4) pem(2) old(1)
|      Conf files:
|    Folder (zenn): 26 files
|      File types: md(15) keep(2) json(2) gitignore(1) py(1)
|      Conf files: package.json(1)
|    Folder (dotfiles): 39 files
|      File types: zsh(9) sh(5) gitignore(2) json(2) md(2) txt(2) toml(1)
|                  gitconfig(1) yml(1) latexmkrc(1)
|      Conf files: github-actions(1) settings.json(1) dockerfile(1)
|    Folder (ai-lab): 6084 files
|      File types: py(1755) pyc(715) pyi(571) png(232) so(209) md(192) tf(157)
|                  json(128) yaml(120) hcl(75)
|      Conf files: dockerfile(76) github-actions(23) devcontainer.json(4)
|                  makefile(3)
|    Folder (Nishikoh.github.io): 19378 files
|      File types: svg(13436) py(1357) dat(1045) pyc(569) html(369) md(338)
|                  js(142) txt(81) css(40) typed(39)
|      Conf files: github-actions(1) package.json(1)

Process Explorer

もう 1 つの方法は、Process Explorer を利用する方法。メニューのHelp -> Open Process Explorer から開くことができる。

hoge

拡張機能の ON/OFF

拡張機能タブの 3 点リーダーからDisable All Installed Extensionsを選択することで、全ての拡張機能を無効にできる。有効にする場合は、Enable All Installed Extensionsを選択する。

インストール済みの拡張機能を有効なものだけに絞って表示できるし、無効なものだけに絞って表示することもできる。このあたりの機能を使うと、パフォーマンスの問題が発生している拡張機能を特定しやすい。