Mac에서 최대 시스템 리소스 소비를 지속적으로 제어하는 ​​방법은 무엇입니까?


85

매버릭스 전에 /etc/launchd.conf파일을 사용 하여 최대 시스템 리소스 소비를 변경할 수있었습니다 . 예를 들면 다음과 같습니다.

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

매버릭스에서는 더 이상 작동하지 않습니다.

최신 버전의 OS X에서 올바른 방법은 무엇입니까?


귀하의 한도는 OS X의 최대치를 초과합니다. maxfiles는 10240에서 상한선이며 maxproc 한도는 1064 선입니다. 승인 된 답변이 한도를 해결 한 경우 승인을 거절 할 것입니다. now ..
Joey T

@atmosx : /etc/sysctl.conf그렇지 않아야 /etc/sysctrl.conf합니다.
Siu Ching Pong -Asuka Kenji-

1
@JoeyT : 사실 당신은 그것을 더 높은 한계로 설정할 수 있습니다! 그러나 Mac OS X 10.8 (Mountain Lion) 또는 10.9 (Mavericks) 인 경우 먼저 "App Store"에서 "OS X Server"를 구입해야합니다. (예, 설정을 변경하려면 미화 $ 19.99를 지불해야합니다!) 간단히 말해서 sudo serverinfo --setperfmode true컴퓨터를 "서버 성능 모드" 로 설정하려면 한 번만 실행해야합니다 . 그런 다음 시스템 구성에 따라 "최대 값"이 높아집니다. 자세한 내용은 discussions.apple.com/thread/5166397의 내 게시물을 참조 하십시오. 10.10 (요세미티)의 경우 모드는 기본적으로 켜져 있습니다 (적어도 내 컴퓨터에서는!). 아래 답변을 참조하십시오.
Siu Ching Pong -Asuka Kenji-

답변:


87

셸 세션 제한

통해 설정된 제한 ulimit은 현재 셸 세션에서 생성 된 프로세스에만 영향을줍니다.

  • "소프트 한계"는 사용되는 실제 한계입니다. "하드 한계"보다 크지 않은 한 설정할 수 있습니다.
  • "하드 한계"는 현재 값보다 작고 "소프트 한계"이상으로 만 설정할 수 있습니다.
  • 시스템 root관리자는 시스템 구성 명령을 실행하거나 시스템 구성 파일을 수정하여 "하드 제한"과 시스템 전체 제한을 높일 수 있습니다 .

당신은 쉘 세션을 종료 한 후 (에 의해 Ctrl+ D, exit또는 닫는 Terminal.app창 등), 설정이 사라 졌어요. 다음 쉘 세션에서 동일한 설정을 원하면 설정을 쉘 시작 스크립트에 추가하십시오.

참고 :를 사용하는 경우 또는 bash이어야합니다 . 다른 쉘을 사용하는 경우 아마도이어야 합니다.~/.bash_proile~/.bash_login~/.profile

시스템 제한 (재부팅해야 적용)

10.9 (매버릭스), 10.10 (요세미티), 10.11 (엘 캐피 탄) 및 10.12 (시에라) :

/Library/LaunchDaemons/limit.maxfiles.plist(소유자 : root:wheel, 모드 :) 에서 파일을 만들어야합니다 0644.

<?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>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>262144</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

필요에 따라 번호를 변경해야합니다. 이들은 각각 "소프트 한계"( 262144)이고 "하드 한계"( 524288)입니다. 자세한 내용은을 실행하여 매뉴얼 페이지를 참조하십시오 man launchd.plist.

10.8 (산사자)의 경우 :

/etc/sysctl.conf(owner : root:wheel, mode :)에 다음 줄을 추가 할 수 있습니다 0644.

kern.maxfiles=524288
kern.maxfilesperproc=262144

필요에 따라 번호를 변경해야합니다. 이들은 "시스템 전체 한계"( kern.maxfiles) 및 "프로세스 당 한계"( kern.maxfilesperproc)입니다. 자세한 설정은을 실행하여 매뉴얼 페이지를 참조 man sysctl하거나에서 소스 코드를 읽으십시오 /usr/include/sys/sysctl.h.

구형 Mac OS X의 경우 (10.7 (Lion) 또는 그 이전 버전에서 작동한다고 생각합니다) :

/etc/launchd.conf(owner : root:wheel, mode :)에 다음 줄을 추가 할 수 있습니다 0644.

limit maxfiles 262144 524288

필요에 따라 번호를 변경해야합니다. 이들은 각각 "소프트 한계"( 262144)이고 "하드 한계"( 524288)입니다.

시스템에서 특정 값 이상의 한계를 설정할 수없는 경우 ...

시스템에서는 "하드 최대 값"(Apple에서 제안한)보다 높은 값을 설정할 수 없습니다. 이 "하드 최대"를 늘리려면 "App Store"에서 "OS X Server"를 구입 한 후 다음 명령을 한 번 실행해야합니다.

sudo serverinfo --setperfmode true

컴퓨터에서 "서버 성능 모드"가 활성화됩니다. 그런 다음 컴퓨터 구성에 따라 최대 값을 설정할 수 있습니다 (이것 참조) . 나는 이것을 전에 산과 매버릭스에서 시험해 보았습니다. 자세한 내용은 내 게시물 ( here )을 참조하십시오.

참고 문헌


1
감사합니다; 나는 요세미티를 사용하고 있으며 LaunchDaemon plist 기술이 나를 위해 일했습니다. 나는 그것이 유일하다고 믿는다. 이 기능이 필요한 사람 은 다시 부팅해야 적용 됩니다.
nc.

1
@체크 안함. : 답변에 "재부팅 필요"가 추가되었습니다. 나는 현장에서 너무 오랫동안 일해 왔기 때문에 어떤 사람들은 그 사실을 모른다는 것을 알지 못했습니다. 상기시켜 주셔서 감사합니다!
Siu Ching Pong -Asuka Kenji-

2
10.9.5를 사용하고 있지만 /etc/launchd.conf실행 하면 접근 방식 만 영향을 미칩니다 ulimit -n. 이것이 중요한 경우 누군가가 지침을 업데이트 할 수 있습니까?
Sridhar Sarnobat

1
10.10 Yosemite 방법은 10.11 El Capitan에서도 작동합니다. "무제한"으로 설정할 수는 없었기 때문에 정말 높은 숫자를 사용해야했습니다
antriver

1
@aolszowka :를 통해 그 한계 늘리는 방법이 참조 /etc/sysctl.conf: superuser.com/questions/827984/...
롭 요한센

11

파일을 만들고 /etc/launchd.conf명령을 파일 안에 넣으면 트릭을 수행해야합니다.


그래도 동작하지 않는다면, /etc/rc.local파일을 편집하거나 생성 한 후 명령을 추가 할 수 있습니다. Apple은 명령 행에서 제한에 대한 지원을 삭제할 가능성이 거의 없습니다.


편집 1 :
시작해야 합니다. 설명서 launchd 페이지 는 다음 파일을 참조합니다.

  ~/Library/LaunchAgents         Per-user agents provided by the user.
  /Library/LaunchAgents          Per-user agents provided by the administrator.
  /Library/LaunchDaemons         System-wide daemons provided by the administrator.
  /System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
  /System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.

내 생각에 당신은 이제 ~/Library/LaunchAgents또는 안에 명령을 넣어야합니다 /Library/LaunchDaemons.
둘 다 시도해야합니다.

편집 2 :
또한 시작에는 스크립트뿐만 아니라 xml 파일이 필요합니다. GUI는 그러한 작업을 돕기 위해 고안된 것이지 무료아닌 것은 Lingon 입니다. 다른 무료 제품이있을 수 있습니다.


내 게시물에 많은 정보가 있으므로 어느 것이 좋은지 알 수 있습니까?
Kiwy

아래 내 답변을 참조하십시오.
Howard

모두 /etc/launchd.conf/etc/rc.local10.10 launchd에이 재 설계되었으며 SystemStarter는 제거에 있기 때문에, 나중에 10.10 무시하고있다.
nisetama

@nise는 최신 버전의 Mac OS에서 새로운 기능이 나오면 언제든지 답변을 업데이트하십시오
Kiwy

10

난 그냥 .bash_profile
작품처럼 이 두 줄을 매력처럼 추가

ulimit -n 1024
ulimit -u 1024

2
시스템 한계에 영향을 미치지 않습니다.
not2savvy

1
그러나 시스템 한계가 충분히 높으면 괜찮을 수 있습니다. 그들이 무엇인지 확인하려면 간단하게 실행할 수 있습니다 ulimit -n -H. macOS High Sierra 에서는 트릭을 수행함에 unlimited있어 사용자의 "소프트"한계를 변경했습니다 .bash_profile.
Joshua Pinter

9

시스템 한계

최근 macOS 에서는 한계를 변경 /etc/launchd.conf하거나 /etc/rc.local더 이상 지원되지 않습니다. 구 시스템 및 기술 참조 .

대신 새 시작 에이전트를 작성해야합니다 .

다음은 command를 사용하는 명령 예입니다 PlistBuddy(참조 man PlistBuddy).

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist \
-c "add Label string com.launchd.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxfiles" \
-c "add ProgramArguments: string 10240" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

그리고 maxproc한계 와 비슷합니다 .

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxproc.plist \
-c "add Label string com.launchd.maxproc" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxproc" \
-c "add ProgramArguments: string 2000" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

위의 파일을로드하려면 다음을 실행하십시오 sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist..

노트:

  • 파일을 인쇄하려면 다음을 실행하십시오. cat또는 PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist.
  • 로드 중 오류가 있는지 로그를 확인하려면 다음을 실행하십시오 tail -f /var/log/system.log..
  • 현재 launchd한계 를 보려면 다음을 실행하십시오 launchctl limit..
  • .plist파일은 사용자 별 또는 시스템 전체 에이전트 폴더 (배치 될 수있다 LaunchAgents). 참조 : man launchdman launchd.plist, 또는 또는 자세한 내용은 대답.

커널 한계

위에서 시작된 시스템 한계는 여전히 커널에 의해 제한되므로 커널 상태 변수에 설정된 실제 한계보다 높게 설정할 수는 없습니다 ( man sysctl도움말 참조 ).

현재 커널 한계를 보려면 다음을 실행하십시오 sysctl -a | grep ^kern.max..

maxfiles한계 를 늘리려면 다음을 실행하십시오 sudo sysctl -w kern.maxfiles=20480..

그것들을 지속 시키려면 비슷한 방법으로 시작 .plist파일 을 만드십시오.

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.kern.maxfiles.plist \
-c "add Label string com.kern.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string sysctl" \
-c "add ProgramArguments: string -w" \
-c "add ProgramArguments: string kern.maxfiles=20480" \
-c "add RunAtLoad bool true"

쉘 한계

쉘 한계를 들어, 관련 추가 ulimit로 명령을 ~/.bashrc또는 ~/.bash_profile개별 사용자에 대한 파일을 시동, 또는 /etc/bashrc모든 사용자에 대해. Mac에서 영구 셸 ulimit 설정을 추가하는 방법을 참조하십시오.

추가 할 제안 된 행 :

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.

1
특히주의 maxproc기본적으로 해당 매개 변수의 하드 커널 제한을 2000로 설정하거나 실제로 단지 불행하게도, 커널이 그것을 적용하지 않습니다 (1064)로 설정합니다 "무제한"을 의미, 1064 때문에 maxprocperuid < maxproc, 그리고 설정 당신은 떠날 것 제안 와 시스템 maxprocperuid=2000maxproc=1064위험합니다. 자세한 내용은 여기를 참조 하십시오 .
올드 프로
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.