Windows下Git Bash执行cat /proc/meminfo无法获取cached等内存信息如何解决
Windows Git Bash 查询缓存/缓冲/共享内存数值的解决方案
问题本质
Windows 下的 Git Bash 基于 MSYS2 仿真层实现,仅提供最基础的
/proc/meminfo字段,不会模拟 Linux 内核完整的 buffer、cached、shared 内存统计项,因此直接读取/proc/meminfo无法拿到目标数据。
你之前写的提取脚本存在语法错误,awk '/^MemFree:{print $2}' 应该修改为 awk '/^MemFree/ {print $2}',但即使修正语法也无法获取三类目标内存数值,因为底层仿真层没有提供对应字段。
可行实现方案
直接调用 Windows 原生系统命令获取内存统计,再通过 Git Bash 的文本处理工具提取数值即可。需要注意:Windows 内存管理逻辑和 Linux 存在差异,不存在完全对等的 buffer memory、shared memory 统计项,以下方案提供近似匹配的取值方法:
1. 单条命令直接查询
- 查询缓存内存(Cached Memory):
wmic OS get CachedMemory /value | grep CachedMemory - 查询分页缓冲池(对应 Linux buffer 近似值):
wmic OS get PagedPoolSize /value - 查询共享内存页数(对应 Linux shared memory 近似值):
typeperf "\\Memory\\Shared Pages" -sc 1
2. 封装为脚本批量查询
将以下内容保存为 meminfo.sh,在 Git Bash 中执行 chmod +x meminfo.sh 赋予执行权限,之后运行 ./meminfo.sh 即可输出格式化后的内存数据:
#!/bin/bash echo "=== 系统内存统计 ===" # 总物理内存 total_phys=$(wmic OS get TotalVisibleMemorySize /value | awk -F'=' '{print $2}' | sed '/^$/d') echo "总物理内存:$((total_phys/1024)) MB" # 可用物理内存 free_phys=$(wmic OS get FreePhysicalMemory /value | awk -F'=' '{print $2}' | sed '/^$/d') echo "可用物理内存:$((free_phys/1024)) MB" # 缓存内存(Cached) cached=$(wmic OS get CachedMemory /value | awk -F'=' '{print $2}' | sed '/^$/d') echo "缓存内存(Cached):$((cached/1024)) MB" # 分页缓冲池(Buffer近似值) buffer_approx=$(wmic OS get PagedPoolSize /value | awk -F'=' '{print $2}' | sed '/^$/d') echo "缓冲内存(Buffer近似):$((buffer_approx/1024/1024)) MB" # 共享内存页数(Shared近似值) shared_approx=$(typeperf "\\Memory\\Shared Pages" -sc 1 2>/dev/null | awk 'NR==3 {print $2}' | sed 's/"//g') echo "共享内存页数(Shared近似):$shared_approx"
内容的提问来源于stack exchange,提问作者Jd_mahmud
相关产品推荐
相关产品推荐

