简体   繁体   English

尝试分配更多共享 memory 时“驱动器上没有剩余空间”

[英]"No space left on drive" when trying to allocate more shared memory

MacOS.苹果系统。 16GB RAM 16GB 内存

I'm running code (which other users are running on similar hardware) allocating shared memory.我正在运行代码(其他用户在类似硬件上运行)分配共享 memory。 It gets halfway through, then dies with the message:它通过了一半,然后随着消息而死:

Error allocating shared memory:: No space left on device

I've checked:我检查过:

sysctl -A | grep shm               
kern.sysv.shmall: 1024
kern.sysv.shmmax: 4194304
kern.sysv.shmmin: 1
kern.sysv.shmmni: 32
kern.sysv.shmseg: 128
security.mac.posixshm_enforce: 1
security.mac.sysvshm_enforce: 1

I tried to increase shmall but kept getting:我试图增加shmall但不断得到:

sysctl: unknown oid 'kern.sysv.shmall:'

Anyone know how to fix this?有人知道怎么修这个东西吗?

This looks like a duplicate of https://unix.stackexchange.com/questions/689295/values-from-sysctl-a-dont-match-etc-sysctl-conf-even-after-restart/710645 .这看起来像https://unix.stackexchange.com/questions/689295/values-from-sysctl-a-dont-match-etc-sysctl-conf-even-after-restart/710645的副本。

I can copy/paste my answer here, but not sure if that's double dipping haha.我可以在这里复制/粘贴我的答案,但不确定这是否是双重浸渍哈哈。 The tl;dr is you'll need to create a LaunchDaemon after disabling SIP : tl;博士是您需要在禁用 SIP后创建一个 LaunchDaemon :

<?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=4194304</string>
            <string>kern.sysv.shmmin=1</string>
            <string>kern.sysv.shmmni=32</string>
            <string>kern.sysv.shmseg=128</string>
            <string>kern.sysv.shmall=1024</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Then load with sudo launchctl bootstrap system /Library/LaunchDaemons/com.startup.sysctl.plist然后使用sudo launchctl bootstrap system /Library/LaunchDaemons/com.startup.sysctl.plist加载

Output looks like this: Output 看起来像这样:

λ tail -f /tmp/sysctl.out
kern.sysv.shmmax: 16777216 -> 4194304
kern.sysv.shmmin: 1 -> 1
kern.sysv.shmmni: 4096
kern.sysv.shmseg: 512 -> 128
kern.sysv.shmall: 4096 -> 1024

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM