You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core应用在Linux下获取进程内存信息的正确方法

这个问题我之前踩过同款坑,在跨平台的.NET Core应用里直接用Process类拿内存信息,确实会遇到Linux下返回0的情况,主要是因为.NET Core在不同系统上对Process类属性的实现逻辑不一样。下面给你几个亲测有效的解决办法:

一、调整Process类的使用方式(适配Linux)

Linux下Process的部分属性(比如PrivateMemorySize64)返回0,是因为它依赖系统的/proc文件系统,而有些属性的实现并没有完全适配Linux的proc结构。你可以换这些可靠的方式:

  • 用WorkingSet64属性:这个属性在Linux和Windows下都能正常返回,它代表进程当前占用的物理内存(包含共享内存部分),代码示例:
    var currentProcess = Process.GetCurrentProcess();
    Console.WriteLine($"当前物理内存占用: {currentProcess.WorkingSet64 / 1024 / 1024} MB");
    
  • 直接读取/proc文件解析:如果需要更精细的内存数据(比如私有内存、虚拟内存),可以直接读取/proc/self/status或/proc/self/stat文件,手动解析字段。比如获取虚拟内存:
    var statusLines = File.ReadAllLines("/proc/self/status");
    var vmSizeLine = statusLines.FirstOrDefault(line => line.StartsWith("VmSize:"));
    if (vmSizeLine != null)
    {
        var parts = vmSizeLine.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        if (long.TryParse(parts[1], out var vmSizeKB))
        {
            Console.WriteLine($"虚拟内存占用: {vmSizeKB / 1024} MB");
        }
    }
    
    AWS Linux镜像默认普通用户就有权限读取这些文件,不用额外配置权限。
二、用.NET Core自带的GC类获取托管内存

如果你的需求只是关注.NET应用的托管内存使用(也就是GC管理的内存),那直接用System.Runtime.GC类更靠谱,完全跨平台:

// false表示不强制GC回收,直接返回当前托管堆内存大小
long managedMemory = GC.GetTotalMemory(false);
Console.WriteLine($"当前托管内存占用: {managedMemory / 1024 / 1024} MB");
三、跨平台兼容的代码写法

如果要同时适配Windows和Linux,可以用条件编译指令区分平台,避免在Linux下调用那些无效的属性:

using System.Diagnostics;

long memoryUsage;
#if LINUX
var process = Process.GetCurrentProcess();
memoryUsage = process.WorkingSet64;
#else
var process = Process.GetCurrentProcess();
memoryUsage = process.PrivateMemorySize64;
#endif
Console.WriteLine($"内存占用: {memoryUsage / 1024 / 1024} MB");

编译Linux版本时记得加上-p:DefineConstants=LINUX参数,或者在项目文件里配置条件编译符号。

总结

不需要额外安装系统工具,只要调整代码适配Linux的特性就行:要么换用Process类中跨平台可靠的属性,要么直接读取proc文件解析,或者用GC类获取托管内存。

内容的提问来源于stack exchange,提问作者Optional Option

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:53:34