api 获取内存

通过系统API或读取/proc/meminfo获取内存数据,支持多平台实时监控,适用于性能优化与资源管理

API 获取内存信息详解

操作系统内存 API

不同操作系统提供了不同的 API 或接口用于获取内存信息,以下是主流操作系统的解决方案:

api 获取内存

操作系统 API/接口
Windows GlobalMemoryStatusEx 总内存、可用内存、缓存、进程数等
Linux /proc/meminfo 文件 MemTotal、MemAvailable、Buffers、Cache
macOS sysctl 系统调用 物理内存、页交换信息、压缩内存统计
跨平台方案 psutil(Python 库) 统一接口获取多平台内存、磁盘、CPU 信息

Windows 系统内存获取

使用 GlobalMemoryStatusEx API

  • 函数声明
    BOOL GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer);
  • 数据结构
    typedef struct {
        DWORD dwLength;
        DWORD dwMemoryLoad;
        DWORDLONGullTotalPhys;
        DWORDLONGullAvailPhys;
        DWORDLONGullTotalPageFile;
        DWORDLONGullAvailPageFile;
        DWORDLONGullTotalVirtual;
        DWORDLONGullAvailVirtual;
        DWORDLONGullAvailExtendedVirtual;
    } MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
  • 关键指标
    • ullTotalPhys:物理内存总量(字节)
    • ullAvailPhys:可用物理内存(字节)
    • dwMemoryLoad:内存使用率(百分比)

C# 示例代码

using System;
using System.Diagnostics;
class MemoryInfo
{
    static void Main()
    {
        MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
        memStatus.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX));
        if (GlobalMemoryStatusEx(ref memStatus))
        {
            Console.WriteLine($"总内存: {memStatus.ullTotalPhys / (1024 * 1024)} MB");
            Console.WriteLine($"可用内存: {memStatus.ullAvailPhys / (1024 * 1024)} MB");
            Console.WriteLine($"内存使用率: {memStatus.dwMemoryLoad}%");
        }
    }
    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    public static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer);
}

Linux 系统内存获取

解析 /proc/meminfo

  • 文件路径/proc/meminfo

  • 关键字段

    MemTotal:       16384256 kB
    MemAvailable:   10234567 kB
    Buffers:         204800 kB
    Cached:          819200 kB
  • Python 解析示例

    api 获取内存

    def get_linux_memory():
        with open("/proc/meminfo") as f:
            data = {}
            for line in f:
                key, value = line.split(":", 1)
                data[key.strip()] = int(value.strip().split()[0])  # 提取数值(KB)
            return data
    mem_info = get_linux_memory()
    print(f"总内存: {mem_info['MemTotal'] / 1024} MB")
    print(f"可用内存: {mem_info['MemAvailable'] / 1024} MB")

跨平台方案(Python + psutil)

安装依赖

pip install psutil

示例代码

import psutil
memory = psutil.virtual_memory()
print(f"总内存: {memory.total / (1024 ** 3):.2f} GB")
print(f"可用内存: {memory.available / (1024 ** 3):.2f} GB")
print(f"内存使用率: {memory.percent}%")

常见问题与解答

问题 1:如何实现跨平台内存监控?

解答
推荐使用 psutil(Python)或 System.Management(C#)等跨平台库。

  • Pythonpsutil.virtual_memory() 自动适配 Windows/Linux/macOS。
  • C#:通过 System.Management 查询 WMI 对象(如 Win32_OperatingSystem)。

问题 2:如何实时监控内存变化?

解答

  1. 定时轮询:设置固定时间间隔(如每秒)调用 API 刷新数据。
  2. 事件驱动:在 Linux 中监听 /proc/meminfo 文件变化(需内核支持)。
  3. 第三方工具:使用 Prometheus + Node Exporter 采集内存指标并

以上内容就是解答有关“api 获取内存”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

api 获取内存

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-05-10 17:55
下一篇 2025-05-10 18:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信