Notes from when we were discussing memory leaks on the Vue.js jp Slack

Here is a dump of comments from kazupon (to prevent them from disappearing after 90 days)
By the way, I am not participating in the conversation myself.

kazupon 2024-05-22

node のバージョンを明示していただいているので,メモリリークの調査は Node.js 公式で提供されている方法で調査できます.

Node.js — Tracing garbage collection
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
Node.js — Tracing garbage collection favicon https://nodejs.org/en/learn/diagnostics/memory/using-gc-traces#memory-leak\
Node.js — Tracing garbage collection

request の生成は ab 等のパフォーマンス測定ツールを使えば,再現環境は構築できるはずです.
で,Nuxt のようなフレームワークを使った場合は,メモリリークの調査は,いきなり実際に使っているアプリケーションに対して行うと難しいので,一般的は最小構成の環境を作って切り分けながら行います.
Nuxt の場合は以下の環境をそれぞれ用意して行うとよいと思います.\

  • Node で hello world の response を返すような simple な HTTP サーバ
  • Node + Nuxt (nuxt init で生成された初期構成)
  • Node + Nuxt + Nuxt Module (使っている Nuxt Module を差し込んでいく)
  • Node + Nuxt + Nuxt Module + 実際のアプリケーションに近い最小コード

自分がメンテしている OSS の issue で何度かメモリリーク対応したので,参考にしてください.

Version 8.0.0 rc 9 throws memory leak · Issue #2612 · nuxt-modules/i18n
Environment Operating System: Linux Node Version: v20.5.1 Nuxt Version: 3.8.2 CLI Version: 3.10.0 Nitro Version: 2.8.1 Package Manager: [email protected] Builder: - User Config: - Runtime Modules: - Build ...
Version 8.0.0 rc 9 throws memory leak · Issue #2612 · nuxt-modules/i18n favicon https://github.com/nuxt-modules/i18n/issues/2612
Version 8.0.0 rc 9 throws memory leak · Issue #2612 · nuxt-modules/i18n
SSR Memory Leak with Legacy API · Issue #920 · intlify/vue-i18n
Reporting a bug? Using vite-plugin-ssr to run Vue 3 with server side rendering, leaving the legacy api enabled will cause memory to slowly increase with every request. Expected behavior Memory does...
SSR Memory Leak with Legacy API  · Issue #920 · intlify/vue-i18n favicon https://github.com/intlify/vue-i18n-next/issues/920
SSR Memory Leak with Legacy API  · Issue #920 · intlify/vue-i18n

ちなみに,docker 使っているみたいですが,メモリリーク調査するときは docker 使わずに,素の環境でしましょう.
コンテナ上でもできますが,コンテナ向けの設定が必要になったり(ポートフォワーディング),ツールが正しく計測できなかったりします.

© 2024-PRESENT ubugeeei. All rights reserved.