如何在Mac OS系统中查看OOM killer进程终止日志
问题说明
未启用swap交换分区时,运行持续申请并写入大块内存的程序,进程会被操作系统因内存不足强制终止。以下是在Mac电脑上查看这类内存不足杀进程事件日志的具体方案,可复现现象的测试代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #define MEM_SIZE 1024 * 1024 * 1024 int main() { char* addr[4]; int i = 0; for(i = 0; i < 4; ++i) { addr[i] = (char*) malloc(MEM_SIZE); if(!addr[i]) { return -1; } } for(i = 0; i < 4; ++i) { memset(addr[i], 0, MEM_SIZE); } getchar(); return 0; }
查看OOM终止日志的具体方法
- 控制台图形化查看
打开启动台「其他」文件夹内的「控制台」应用,左侧边栏选中当前使用的Mac设备,在右上角搜索框输入jetsam或memorystatus筛选日志,即可看到系统因内存压力终止进程的全量记录,记录包含被终止进程的名称、PID、终止时间、触发时系统内存压力等级等核心信息。 - 终端命令行查询
打开终端执行以下命令,可直接拉取指定时间范围内的OOM事件日志:
命令末尾的log show --predicate 'eventMessage contains "jetsam" OR eventMessage contains "memorystatus"' --last 1h--last 1h表示拉取最近1小时的日志,可按需调整时间范围,比如替换为--last 1d即可查询最近1天的相关记录。 - 查看进程诊断报告
在控制台应用左侧边栏找到「诊断报告」分类,查找文件名以被终止进程名开头、后缀为.ips的报告文件,这类报告记录了进程被终止时的单进程内存占用、系统整体内存分配状态等更详细的排查信息。
注意事项
Mac系统的内存不足进程终止逻辑由jetsam(也称memorystatus)模块负责,和Linux系统的OOM Killer机制类似:当系统物理内存耗尽且无swap空间可供调度时,会按预设优先级杀死高内存占用进程,所有这类终止操作都会被系统强制记录日志,不存在事件无记录的情况。
内容的提问来源于stack exchange,提问作者walker
相关产品推荐
相关产品推荐

