读取和临时修改 Darwin 内核参数,查看 CPU、内存与网络栈配置。
sysctl 按 MIB 名称读写内核变量:hw.* 是硬件能力,kern.* 是内核限制,net.* 是网络参数,machdep.* 是平台相关项。-a 列出全部,-n 只输出值,-w 写入。Apple Silicon 上不少 hw.*、machdep.* 项不提供或只读,读不到不代表系统异常。
边界:-w 只改运行时值,重启即失效;/etc/sysctl.conf 在旧版 macOS 上生效,新版并不保证,长期修改建议用 LaunchDaemon 执行 sysctl -w 并在启动后验证。SIP 和内核限制会让部分写入返回 Operation not permitted,不要反复重试。
# 1. 读取逻辑 CPU 数和物理内存(字节)
% sysctl -n hw.ncpu hw.memsize
% sysctl -n hw.physicalcpu hw.logicalcpu
# 2. 判断是否为 Apple Silicon:1 表示是,0 表示 Intel
% sysctl -n hw.optional.arm64
# 3. 查看文件描述符和进程数上限
% sysctl kern.maxfiles kern.maxfilesperproc kern.maxproc
# 4. 临时提高文件描述符上限,重启后失效
% sudo sysctl -w kern.maxfiles=65536
% sysctl kern.maxfiles
# 5. 对比产品版本、构建号和本次启动时间
% sysctl -n kern.osproductversion kern.osversion kern.boottime
# 6. 查看 TCP 发送/接收缓冲区
% sysctl net.inet.tcp.sendspace net.inet.tcp.recvspace
# 7. 批量筛选网络参数
% sysctl -a 2>/dev/null | grep '^net.inet.tcp' | head -20
sysctl -w 永久生效:它只改当前内核;要持久化用 LaunchDaemon,并在重启后复查。Operation not permitted:该参数受 SIP 或内核保护,或类型/范围不合法;不要用 sudo 硬试,先确认是否可写。hw.memsize 单位是字节,不是 MB/GB;比较前统一换算,避免差三个数量级。machdep.cpu.brand_string 一类字段是正常的;芯片型号用 system_profiler 查。sysctl -a 输出巨大且个别项读取失败会写 stderr;脚本里重定向 stderr 并精确 grep 命名空间。kern.maxfiles 不改 kern.maxfilesperproc,单进程仍可能受限;两个值一起核对。system_profiler — 硬件与系统信息,字段更友好。sw_vers — 产品版本和构建号。launchctl — 用 LaunchDaemon 持久化内核参数。sysctl — 对照 /etc/sysctl.conf 与命名空间差异。ulimit — 对照用户级资源限制。合上页面,先回答,再展开对照。
sysctl -w 修改的参数重启后还在吗?要持久化该怎么做?machdep.* 字段?这是故障吗?-w 只改运行时;用 LaunchDaemon 在启动时执行 sysctl -w,并验证结果。system_profiler SPHardwareDataType。sysctl -n hw.optional.arm64,返回 1 是 Apple Silicon,返回 0 或不存在是 Intel。
小程序版
微信扫码,随时查命令