即使重新启动后,sysctl -A 中的值也不匹配 /etc/sysctl.conf

即使重新启动后,sysctl -A 中的值也不匹配 /etc/sysctl.conf

/etc/sysctl.conf我使用的是 Mac Monterey 12.1,并增加了文件中的共享内存限制:

kern.sysv.shmmax: 16777216
kern.sysv.shmmin: 1
kern.sysv.shmmni: 128
kern.sysv.shmseg: 512
kern.sysv.shmall: 4096
security.mac.posixshm_enforce: 1
security.mac.sysvshm_enforce: 1

并重新启动(并关闭)机器。但是,重新启动后,当我运行时,sysctl -A | grep shm它显示的值与文件不同:

kern.sysv.shmall: 1024
kern.sysv.shmmax: 4194304
kern.sysv.shmmin: 1
kern.sysv.shmmni: 32
kern.sysv.shmseg: 8
security.mac.posixshm_enforce: 1
security.mac.sysvshm_enforce: 1

即使/etc/sysctl.conf仍然显示更改持续存在。

换句话说,我不知道sysctl -A | grep shm这些值是从哪里得到的。

有谁知道我需要在哪里修改它们?

答案1

感谢亚历山大·丹金让我走上正确的道路。

fio根据OP,我在基准测试方面遇到了类似的问题,解决了亚历山大发布的内容的修改版本。

以下是经过一定程度删节和定制的步骤用户997112的问题。

脚步

  • 禁用 SIP
    • 苹果的免责声明

      警告

      仅暂时禁用 SIP 以执行必要的任务,并尽快重新启用它。完成测试后未能重新启用 SIP 会使您的计算机容易受到恶意代码的攻击。

  • 创造/Library/LaunchDaemons/com.startup.sysctl.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">
    <!-- DISABLE SIP TO USE: macOS Recovery > Utilities > Terminal > `csrutil disable` > Reboot -->
    <plist version="1.0">
        <dict>
            <key>Label</key>
            <string>com.startup.sysctl</string>
            <key>LaunchOnlyOnce</key>
            <true/>
            <key>StandardErrorPath</key>
                <string>/private/tmp/sysctl.err</string>
            <key>StandardOutPath</key>
                <string>/private/tmp/sysctl.out</string>
            <key>ProgramArguments</key>
            <array>
                <string>/usr/sbin/sysctl</string>
                <string>-w</string>
                <string>kern.sysv.shmmax=16777216</string>
                <string>kern.sysv.shmmin=1</string>
                <string>kern.sysv.shmmni=128</string>
                <string>kern.sysv.shmseg=512</string>
                <string>kern.sysv.shmall=4096</string>
            </array>
            <key>RunAtLoad</key>
            <true/>
        </dict>
    </plist>
    
  • 在一些内务处理项目之后加载 PLIST
    # sanity check
    sysctl -a | grep shm
    
    # set permissions
    sudo chown root:wheel /Library/LaunchDaemons/com.startup.sysctl.plist
    
    # validate key-value pairs
    plutil /Library/LaunchDaemons/com.startup.sysctl.plist
    
    # load plist
    sudo launchctl bootstrap system /Library/LaunchDaemons/com.startup.sysctl.plist
    
    # check logs
    tail -f /tmp/sysctl.out
    tail -f /tmp/sysctl.err
    
    # recheck sysctl values
    sysctl -a | grep shm
    

来源

macos - 即使重新启动后,sysctl -A 的值也不匹配/etc/sysctl.conf - 智库101 - 一个基于CC版权的问答分享平台

在 Catalina 中设置共享内存 |苹果开发者论坛

c++ - 共享内存“打开的文件太多”但ipcs没有显示很多分配 - VoidCC

kernel - 如何增加 macOS Big Sur 中的最大打开文件数? - 超级用户

启动教程

答案2

  1. 下载文件.plist https://anonfiles.com/3eGaR6kfya/com.startup.sysctl_plist
  2. 将下载的文件移动到/Library/LaunchDaemons/com.startup.sysctl.plist
  3. 启动终端并依次写入两个命令:先“ sudo chown root:wheel /Library/LaunchDaemons/com.startup.sysctl.plist”,然后“ sudo launchctl load -w /Library/LaunchDaemons/com.startup.sysctl.plist
  4. 重新启动系统。

相关内容