死机定位(进程虚拟地址空间耗尽)
一、死机现象
内存富裕,但内存申请失败。
死机时打印:
怀疑是:
1、内存碎片原因导致。
2、进程虚拟地址空间耗尽导致。
3、进程资源限制导致。
二、内存碎片分析
1、理论知识:如何分析内存碎片化情况
使用 /proc/buddyinfo:
/proc/buddyinfo 文件提供了关于内存碎片化的重要信息。这个文件显示了每个内存区域(zone)中的空闲页面数量,按不同大小分类。较大的数字表示有更多的大块连续内存可用,而较小的数字则表明存在更多的小块内存,这是内存碎片化的迹象。
内容格式如下:
Node , zone …
Node : NUMA 节点编号;
zone : 内存区域名称;
… : 每个订单(order)对应的空闲内存块数量。每个订单对应 2^N 个页面(通常是 4 KB 页面)
例如:
Node 0, zone Normal 12 22 18 14 10 7 5 3 2 1 0
如果右边的数字(大块内存)较少,而左边的数字较多,说明内存碎片化较为严重。
order 0: 12 个 4 KB 的内存块
order 1: 22 个 8 KB 的内存块
… …
order 9: 1 个 2 MB 的内存块
order 10: 0 个 4 MB 的内存块
实例说明内存碎片化:
高阶订单(如 order 7、8、9、10)的值较低:这表明系统中大块连续内存不足。
低阶订单(如 order 0、1、2、3)的值较高:这表明系统中有大量的小块内存,也可能暗示内存碎片化。
2、实例分析:内存碎片化情况
结论:Top和buddyinfo计算的剩余内存能够匹配,Order 10为4M内存块都剩余48个,按道理申请40kB*8空间不会失败才对。
====》产生问题:为