mac OS下的资源限制 以及 引出的ulimit, launchctl, sysctl区别
生活随笔
收集整理的這篇文章主要介紹了
mac OS下的资源限制 以及 引出的ulimit, launchctl, sysctl区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天在模擬一個大量socket連接的時候系統告訴我 socket:Too many open files,之后在查閱怎么修改配置的時候發現了有好幾種方式,ulimit, launchctl, sysctl都可以修改文件打開上限,但是在cli下launchctl和sysctl的maxfiles修改都只是改變了參數,cli下的socket連接依然無法創建更多。折騰了將近一下午,終于解決問題,把這些理清楚了!
來自https://serverfault.com/questions/502053/difference-between-ulimit-launchctl-sysctl的回答:
1. ulimit This is a builtin command of your shell (bash/ash/zsh etc). It?temporarily?sets process limits for the current shell. This is not OS X specific by the way. 2. sysctl Most unix-like (Linux/*BSD/OS X) systems set global limit/kernel settings via the?sysctlcommand//etc/sysctl.conf?config file. But see below for the OS X caveat. 3. launchd Seems like OS X does not honor? sysctl.conf?on startup anymore ( https://discussions.apple.com/thread/2781309?start=0&tstart=0). So on OS X, it looks like? sysctlis merely usable for? temporarily?setting the global limits.翻譯:
1、ulimit 這是一種嵌入shell的命令,只能臨時設置當前shell(也就是當前進程)的參數。unix-like OS都有。 2、sysctl 大部分unix-like OS都采用這個來設置全局的內核限制,sysctl為命令,/etc/sysctl.conf為配置文件。不過請看下面的launchctl 3、 launchctl 看起來OS X在啟動的時候不在尊重sysctl.conf的配置(附鏈接)。所以在OS X上,sysctl僅僅能夠臨時設置全局限制。 (第三條看起來和個人使用下來的感覺一樣,這兩個配置在OS X上有點混亂)
以下是博主使用下來確認的應用級經驗:
ulimit:
ulimit僅作用于當前shell,也就是當前進程 ulimit -n 的設置理所當然的也是臨時設置 ulimit下的open files才是真正影響當前進程打開文件的配置 修改open files的上限不能超過? kern.maxfilesperproc設置(參見下面sysctl參數)launchctl:
launchctl為macOS特有配置 $ launchctl limit maxfiles maxfiles ? 1024 ? ?10240 可將launchctl子命令寫入/etc/launchd.conf中 有軟配和硬配。軟配為每個進程可自由控制,但不能超過硬配;硬配為只有root才能修改,目的就是給軟配劃定上限。 修改該項配置會直接同時設置sysctl的 kern.maxfilesperproc參數 熱修改sysctl上限值不會影響launchctl,而反之,launchctl會影響sysctl上限值sysctl:
sysctl為系統控制 $ sysctl -a|grep files kern.maxfiles: 10240 kern.maxfilesperproc: 512 由以上兩個配置項決定,第一個為內核總文件上限,第二個為每個進程允許的上限 在/etc/sysctl.conf中寫入, 通過配置文件永久更改?重啟生效總結
以上是生活随笔為你收集整理的mac OS下的资源限制 以及 引出的ulimit, launchctl, sysctl区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞凌课堂丨液晶模块的DE和HV模式
- 下一篇: 性价比高的蓝牙耳机排行榜,推荐200内最