Bagaimana cara terus-menerus mengontrol konsumsi sumber daya sistem maksimum pada Mac?

85

Sebelum Mavericks, saya dapat menggunakan /etc/launchd.conffile untuk mengubah konsumsi sumber daya sistem maksimum, misalnya:

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

Tidak lagi berfungsi di Mavericks.

Apa cara yang benar untuk melakukannya di OS X versi terbaru?

Howard
sumber
Batas Anda di atas maks untuk OS X. maxfiles bertengger di 10240 dan batas maxproc adalah 1064. Jika jawaban yang disetujui menetapkan batas, saya akan mengacungkan jempolnya .. tapi sudah salah duduk dan tidak dikoreksi selama tahun yang baik + sekarang ..
Joey T
@atmosx: Seharusnya /etc/sysctl.conf, tidak /etc/sysctrl.conf.
Siu Ching Pong -Asuka Kenji-
1
@ JoeyT: Sebenarnya Anda bisa mengaturnya ke batas yang lebih tinggi! Tetapi Anda harus membeli "OS X Server" dari "App Store" terlebih dahulu jika Anda menggunakan Mac OS X 10.8 (Mountain Lion) atau 10.9 (Mavericks). (Ya, Anda harus membayar USD $ 19,99 untuk mengubah pengaturan!) Singkatnya, Anda harus menjalankan sudo serverinfo --setperfmode truesatu kali untuk memasukkan mesin Anda ke "Server Performance Mode". Kemudian, Anda memiliki "maksimum yang lebih tinggi", tergantung pada konfigurasi mesin Anda. Silakan lihat posting saya di diskusi.apple.com/thread/5166397 untuk detailnya. Untuk 10.10 (Yosemite), mode aktif secara default (setidaknya di mesin saya!). Lihat jawaban saya di bawah ini.
Siu Ching Pong -Asuka Kenji-

Jawaban:

87

Batas Sesi Shell

Batas yang ditetapkan melalui ulimithanya memengaruhi proses yang dibuat oleh sesi shell saat ini.

  • "Batas lunak" adalah batas aktual yang digunakan. Bisa diatur, sejauh itu tidak lebih besar dari "batas keras".
  • "Batas keras" juga dapat diatur, tetapi hanya untuk nilai kurang dari yang sekarang, dan hanya untuk nilai tidak kurang dari "batas lunak".
  • "Batas keras", serta batas seluruh sistem, dapat dinaikkan oleh root(administrator) dengan menjalankan perintah konfigurasi sistem atau memodifikasi file konfigurasi sistem.

Setelah Anda mengakhiri sesi shell (oleh Ctrl+ D, exitatau menutup Terminal.appjendela, dll), pengaturan hilang. Jika Anda ingin pengaturan yang sama di sesi shell berikutnya, tambahkan pengaturan ke skrip startup shell.

CATATAN: Jika Anda menggunakan bash, maka seharusnya ~/.bash_proileatau ~/.bash_login. Jika Anda menggunakan kerang lain, mungkin harus ~/.profile.

Batas Sistem (Memerlukan Reboot untuk Berfungsi)

Untuk 10.9 (Mavericks), 10.10 (Yosemite), 10.11 (El Capitan), dan 10.12 (Sierra):

Anda harus membuat file di /Library/LaunchDaemons/limit.maxfiles.plist(pemilik root:wheel:, mode:) 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>

Anda harus mengubah angka sesuai dengan kebutuhan Anda. Mereka adalah "batas lunak" ( 262144) dan adalah "batas keras" ( 524288) masing-masing. Untuk informasi lebih lanjut, lihat halaman buku panduan dengan menjalankan man launchd.plist.

Untuk 10.8 (Singa Gunung):

Anda dapat menambahkan baris berikut ke /etc/sysctl.conf(pemilik root:wheel:, mode:) 0644:

kern.maxfiles=524288
kern.maxfilesperproc=262144

Anda harus mengubah angka sesuai dengan kebutuhan Anda. Mereka adalah "batas sistem-lebar" ( kern.maxfiles) dan "batas per-proses" ( kern.maxfilesperproc) masing-masing. Untuk pengaturan lebih lanjut, lihat halaman manual dengan menjalankan man sysctl, atau membaca kode sumber di /usr/include/sys/sysctl.h.

Untuk Mac OS X yang lebih lama (saya kira itu berfungsi pada 10.7 (Lion) atau sebelumnya):

Anda dapat menambahkan baris berikut ke /etc/launchd.conf(pemilik root:wheel:, mode:) 0644:

limit maxfiles 262144 524288

Anda harus mengubah angka sesuai dengan kebutuhan Anda. Mereka adalah "batas lunak" ( 262144) dan adalah "batas keras" ( 524288) masing-masing.

Jika sistem tidak membiarkan Anda menetapkan batas di atas nilai tertentu ...

Sistem tidak membiarkan Anda menetapkan nilai lebih tinggi dari "maksimum keras" (diusulkan oleh Apple). Untuk meningkatkan "hard maksimal" ini, Anda harus membeli "OS X Server" dari "App Store", maka Anda harus menjalankan perintah berikut sekali:

sudo serverinfo --setperfmode true

Ini mengaktifkan "mode kinerja server" pada mesin Anda. Anda kemudian dapat mengatur maksimum sesuai dengan konfigurasi mesin Anda (lihat ini) . Saya mencoba ini sebelumnya (di Gunung dan Mavericks) dan berhasil! Silakan lihat posting saya (di sini ) untuk informasi lebih lanjut.

Referensi

Siu Ching Pong -Asuka Kenji-
sumber
1
Terima kasih; Saya menggunakan Yosemite dan teknik daftar lagu LaunchDaemon bekerja untuk saya. Saya percaya itu satu-satunya yang melakukannya. Bagi siapa pun yang membutuhkan ini, harap dicatat bahwa reboot diperlukan untuk itu agar berlaku .
nc.
1
@ nc. : Menambahkan "Wajibkan Reboot untuk Berlaku" ke jawaban saya. Saya telah bekerja terlalu lama di lapangan, jadi saya tidak sadar bahwa beberapa orang tidak tahu itu. Terima kasih telah mengingatkan!
Siu Ching Pong -Asuka Kenji-
2
Saya menggunakan 10.9.5 tetapi hanya /etc/launchd.confpendekatan yang menunjukkan efek ketika saya menjalankan ulimit -n. Bisakah seseorang memperbarui instruksi jika ini penting?
Sridhar Sarnobat
1
Metode 10,10 Yosemite juga bekerja di 10,11 El Capitan. Meskipun saya tidak dapat mengaturnya ke "tidak terbatas" jadi saya harus menggunakan angka yang sangat tinggi
antriver
1
@aolszowka: Lihat ini untuk cara meningkatkan batas itu melalui /etc/sysctl.conf: superuser.com/questions/827984/…
Rob Johansen
11

Tampaknya membuat file /etc/launchd.confdan menempatkan perintah Anda di dalamnya harus melakukan trik.


Jika tidak berhasil, Anda mungkin dapat mengedit atau membuat /etc/rc.localfile dan menambahkan perintah di dalamnya karena ada sedikit kemungkinan bahwa Apple akan pernah menghapus dukungan untuk batas pada baris perintah.


Sunting 1 :
Seharusnya saya mulai dengan itu, launchd halaman manual merujuk file-file berikut:

  ~/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.

Taruhan saya adalah bahwa Anda sekarang harus memasukkan perintah baik di dalam ~/Library/LaunchAgentsatau di /Library/LaunchDaemons.
Anda harus mencoba keduanya.

Sunting 2 :
Perlu diketahui juga bahwa launchd membutuhkan file xml dan bukan hanya skrip. seorang gui telah ditunjuk untuk membantu dalam tugas semacam itu yang tidak bebas adalah Lingon . Mungkin ada produk gratis lain.

Kiwy
sumber
karena ada banyak informasi dalam posting saya, dapatkah Anda memberi tahu yang mana yang bagus?
Kiwy
lihat jawaban saya di bawah ini.
Howard
Keduanya /etc/launchd.confdan /etc/rc.localdiabaikan pada 10.10 dan yang lebih baru, karena pada 10.10 launchd dirancang ulang dan SystemStarter dihapus.
nisetama
@nise jangan ragu untuk memperbarui jawaban saya jika ada sesuatu yang baru muncul dalam versi terbaru dari Mac OS
Kiwy
10

Saya baru saja menambahkan dua baris ini dalam .bash_profile
karya saya seperti pesona

ulimit -n 1024
ulimit -u 1024
pixelass
sumber
2
Tidak memengaruhi batas sistem.
not2savvy
1
Namun, itu mungkin oke jika batas sistem Anda cukup tinggi. Untuk memeriksa apakah mereka, Anda cukup menjalankannya ulimit -n -H. Pada macOS High Sierra hal itu unlimitedsangat mengubah batas "lunak" pengguna dalam .bash_profilemelakukan trik.
Joshua Pinter
9

Batas sistem

Mengubah batas dalam /etc/launchd.confatau /etc/rc.localtidak lagi didukung untuk macOS terbaru. Lihat: Sistem dan Teknologi Lama .

Sebagai gantinya, Anda harus membuat agen peluncuran baru .

Berikut adalah contoh PlistBuddyperintah menggunakan perintah (lihat 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"

Dan serupa untuk maxprocbatas:

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"

Untuk memuat file di atas, jalankan: sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist.

Catatan:

  • Untuk mencetak file, jalankan: catatau PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist.
  • Untuk memeriksa log untuk setiap kesalahan selama beban, jalankan: tail -f /var/log/system.log.
  • Untuk melihat saat ini launchdbatas, jalankan: launchctl limit.
  • The .plistFile dapat ditempatkan dalam per-user atau folder agen seluruh sistem ( LaunchAgents). Lihat: man launchddan man launchd.plist, atau ini atau itu jawaban untuk lebih jelasnya.

Batas kernel

Harap dicatat bahwa batasan sistem Launchd di atas masih dibatasi oleh kernel, jadi Anda tidak dapat menetapkannya lebih tinggi dari batas aktual yang ditetapkan dalam variabel status kernel (lihat: man sysctluntuk bantuan).

Untuk melihat batas kernel saat ini, jalankan: sysctl -a | grep ^kern.max.

Untuk meningkatkan maxfilesbatas, jalankan: sudo sysctl -w kern.maxfiles=20480.

Untuk membuatnya tetap ada, gunakan metode serupa untuk membuat .plistfile startup , mis

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"

Batas shell

Untuk batas shell, tambahkan ulimitperintah yang relevan ke dalam ~/.bashrcatau ~/.bash_profilefile startup untuk pengguna individu, atau /etc/bashrcuntuk semua pengguna. Lihat: Bagaimana cara menambahkan pengaturan ulimit shell yang ada di Mac?

Baris yang disarankan untuk ditambahkan:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.
kenorb
sumber
1
Berhati-hatilah maxprockarena secara default batas kernel keras pada parameter tersebut adalah 1064, yang berarti mengaturnya ke 2000 atau "tidak terbatas" sebenarnya hanya menetapkannya ke 1064. Sayangnya, kernel tidak memaksakan itu maxprocperuid < maxproc, dan pengaturan yang Anda sarankan akan meninggalkan sistem dengan maxprocperuid=2000dan maxproc=1064mana yang berbahaya. Baca lebih lanjut di sini .
Old Pro