Mac OSX程序内存限制:求教@AlexGray回答中的相关技术问题
嘿,我明白你现在的困惑——刚接触Mac上的进程内存限制,又碰到launchd、plist这些陌生概念,完全摸不着头脑对吧?别慌,我给你把这些东西拆成大白话讲清楚!
1. 什么是launchd item?
launchd是Mac系统自带的「启动管家」,负责管理几乎所有程序的启动、运行规则。而launchd item就是给某个程序定制的「运行说明书」——告诉launchd什么时候启动这个程序、给它分配多少资源、崩溃了要不要重启等等。
2. 什么是plist文件?
plist是Mac上特有的配置文件格式(全称Property List),本质是结构化的XML文件(也有二进制版本),专门用来存储各种程序的配置参数。刚才说的launchd item,其实就是一个后缀为.plist的文件,所有规则都写在这个文件里。
3. 配置Key是什么?
你可以把Key理解成plist文件里的「开关」或「参数项」,每个Key对应一个具体的功能。比如用来限制内存的Key,就专门告诉launchd「这个程序最多能使用多少内存」;还有控制启动时机的Key、控制权限的Key等等,不同的Key负责不同的规则。
@AlexGray提到的给可执行文件配置launchd item,核心就是写一个对应的plist文件,里面和内存限制相关的关键部分大概是这样(我给你补个实际例子):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <!-- 指定要管理的可执行文件路径 --> <key>Program</key> <string>/path/to/your/executable</string> <!-- 软内存限制:超过会收到系统警告,程序可以尝试释放内存 --> <key>SoftResourceLimits</key> <dict> <key>MemoryAllocation</key> <integer>104857600</integer> <!-- 这里是100MB,单位是字节 --> </dict> <!-- 硬内存限制:超过直接被系统终止,没有商量余地 --> <key>HardResourceLimits</key> <dict> <key>MemoryAllocation</key> <integer>209715200</integer> <!-- 这里是200MB --> </dict> </dict> </plist>这里的
SoftResourceLimits和HardResourceLimits就是控制内存的核心Key,你可以根据需求调整后面的数值。
MAN页面是Unix类系统(包括Mac)的官方手册,里面有最权威的说明。你只需要打开Mac的「终端」App,输入下面的命令回车:
man launchd.plist
就能看到所有launchd支持的配置Key的详细解释了,包括每个Key的作用、取值范围,比网上零散的资料靠谱多了。
内容的提问来源于stack exchange,提问作者Remi.b

