通过系统API或读取/proc/meminfo获取内存数据,支持多平台实时监控,适用于性能优化与资源管理
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 解析示例:
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#)等跨平台库。
- Python:
psutil.virtual_memory()
自动适配 Windows/Linux/macOS。 - C#:通过
System.Management
查询 WMI 对象(如Win32_OperatingSystem
)。
问题 2:如何实时监控内存变化?
解答:
- 定时轮询:设置固定时间间隔(如每秒)调用 API 刷新数据。
- 事件驱动:在 Linux 中监听
/proc/meminfo
文件变化(需内核支持)。 - 第三方工具:使用 Prometheus + Node Exporter 采集内存指标并
以上内容就是解答有关“api 获取内存”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复