Linux/WSLで for .NETプロセスメモリの監視
OCR、PDF生成、画像処理のようなリソース集約型 for .NET作業は、WSL (Windows Subsystem for Linux) などの制約された環境やLinuxコンテナで形状サイズを比べることができません。 プロセスのメモリ消費をリアルタイムでログすることができ、または標準のLinuxツールを使用して外部から監視することができます。
前提条件
- .NET SDKがインストールされており、バージョン
5.0以降であること。 - Linux環境、ネイティブまたはWSL経由。
- 基本的な.NETコンソールアプリ。
解決策
1. メモリ使用量をコンソールにログ
プロセスのプライベートメモリサイズを読み取り、メガバイトで出力します:
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// Trigger your memory-consuming logic here (e.g., OCR, PDF generation, etc.)
// Log memory usage
Process currentProcess = Process.GetCurrentProcess();
long memorySize = currentProcess.PrivateMemorySize64; // In bytes
Console.WriteLine($"Memory Usage: {memorySize / (1024 * 1024)} MB");
}
}
PrivateMemorySize64は、プロセスが独占的に割り当て、他のプロセスと共有しないメモリ量(バイト単位)を返します。 これは、アプリケーションがどのくらい重く実行されているのかを示す堅実な指標です。
2. メモリを継続的に追跡
長時間実行されるプロセスの場合、ループ内で読み取りをラップして、時間と共に使用率をサンプルします:
while (true)
{
var memory = Process.GetCurrentProcess().PrivateMemorySize64;
Console.WriteLine($"Memory Usage: {memory / (1024 * 1024)} MB");
Thread.Sleep(5000); // Log every 5 seconds
}
Thread.Sleep(5000)の呼び出しは、ログを5秒ごとに1回の読み取りにペースします。 出力をファイルまたは別のプロセスにパイプするか、使用がしきい値を超えたときにアラートを発するために使用してください。
コンソール出力
Memory Usage: 214 MB
オプション:Linuxツールで外部から監視
アプリ外部からプロセスを監視するには、標準ユーティリティの1つを使用します。 <pid>はプロセスIDで、オペレーティングシステムが実行中の各プロセスに割り当てるユニークな番号です。
htop: 単一プロセスをライブで監視します。
top -p <pid>
ps: メモリフィールドのワンショットスナップショットを印刷します。
ps -o pid,vsz,rss,comm -p <pid>
ここでRSSは常駐セットサイズ、すなわち使用中の物理メモリです。
**smem:**より詳細なプロセスごとの内訳のためにインストールしてください。
sudo apt install smem
smem -p <pid>
ベストプラクティス
- 本番環境に展開する前にテスト環境でメモリ追跡を実行します。
- 長時間実行されるサービスやAPIの場合、PrometheusやGrafanaのようなメトリクススタックを統合します。
GC.Collect()はデバッグ専用に予約します。

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。