OS X 10.7.1'deki sinir bozucu "Sistemde çok fazla açık dosya var" sınırından kurtulmam gerekiyor.
Bir yolu var mı?
OS X 10.7.1'deki sinir bozucu "Sistemde çok fazla açık dosya var" sınırından kurtulmam gerekiyor.
Bir yolu var mı?
Yanıtlar:
Göre bu yararlı maddeye (ki ben okuma tavsiye):
Varsayılan olarak, Mac OS X'in açabileceği maksimum dosya sayısı 12.288 olarak ayarlanmıştır ve verilen bir işlemin açabileceği maksimum dosya sayısı 10.240'tır.
Bunları kontrol edebilirsiniz:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
Sınırları (kendi sorumluluğunuzdadır) ile artırabilirsiniz:
sysctl -w kern.maxfiles=20480
(veya seçtiğiniz numara)sysctl -w kern.maxfilesperproc=18000
(veya seçtiğiniz numara)Değişikliği kalıcı hale getirmek için sudo
, ayarlarınızı koymak için kullanın /etc/sysctl.conf
(bu, oluşturmanız gerekebilir), şöyle:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Not: OS X 10.10 veya daha düşük sürümlerde, /etc/launchd.conf
benzer ayarları ekleyebilirsiniz limit maxfiles
ve buraya koyduğunuz şeyi geçersiz kılar.
Yine, makaleden:
Bunu yaptıktan sonra, çekirdeğin kendisinde maksimum sayıda dosya olacaktır, ancak kabuk olmayabilir. Ve bu işlemlerin çoğunu alacak olan çoğu işlem, onu artırmak isteyeceğiniz bir kabuk tarafından başlatılacak.
Bunun için komut:
ulimit -S -n 2048 # or whatever number you choose
Bu değişiklik de geçicidir; yalnızca geçerli kabuk oturumu için sürer. Bir kabuğunu her açtığınızda çalışmasını istiyorsanız .bashrc
, kabuk yapılandırma dosyasına ( .zshrc
veya her neyse) ekleyebilirsiniz .
kern.maxfiles=65000 kern.maxfilesperproc=65000
/Etc/sysctl.conf dosyasını koydum ve yeniden başlattım. kern.maxfiles yoksayıldı ve varsayılan kaldı, ancak kern.maxfilesperproc 65000 olarak ayarlandı. /etc/launchd.conf 'a sahip değilim.
OS X'in her sürümü için açık dosya limitini değiştirmek için tamamen farklı bir yöntem var gibi görünüyor!
OS X Sierra (10.12.X) için yapmanız gerekenler:
1.
Bir dosya oluşturun /Library/LaunchDaemons/limit.maxfiles.plist
ve aşağıdakini yapıştırın (iki sayıyı değiştirmekten çekinmeyin (sırasıyla yumuşak ve sert sınırlar):
<?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>64000</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
2. Yeni dosyanızın sahibini değiştirin:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Bu yeni ayarları yükleyin:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Son olarak, sınırların doğru olduğunu kontrol edin:
launchctl limit maxfiles
IO Error: Bad file descriptor (Write failed)
Ulimit ayarlarınızı artırmanız gerekecek - bugünlerde OS X'te oldukça düşük - varsayılan olarak 256. ulimit -n 4096
~ / .Profile veya eşdeğerinize ekleyin veya buna benzer ve bunu yerel ortamınızda çözecektir. ulimit -a
Mevcut seviyelerini kontrol etmek için koş
Sistem ayarlarını görmek için şunu çalıştırın:
launchctl limit maxfiles
Lion'da (10240) işlem başına esasında olduğundan biraz daha yüksek bir değere ayarlanmış. Fakat hala orada vuruyorsanız, aynı seviyeyi istediğiniz seviyelerde kullanarak daha yüksek bir değere ayarlayabilirsiniz. Değişiklikleri kalıcı yapmak için /etc/launchd.conf, ilgili satırları eklemeniz gereken yerdir.
ulimit -a
).
Diğer seçenek de suçluyu bulmak olabilir:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Sonuncusu için hangi dosyaların açık olduğunu görebilirsiniz:
sudo lsof -n | grep socketfil
Ve eğer istenirse işlemi öldür
kill $pid
Yorumlardan:
Buna değer, aynı zamanda kullanarak en açık dosyaları içeren işlem kimlikleri listesini de alabilirsiniz.
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
-h
(OS X 10.12.3) olmadan iyi çalıştı :sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
-h
lsof -n +c 0
Kesme işleminin adını önlemek için kullanın .
Millet, Mavericks'te 10.9.4
ulimit -n 2048
iyi çalışıyor. Yeni bir oturum açma oturumu başlatmanız gerekebilir.
En son macOS için (yazma sırasında: 10.14.1), kullanabilirsiniz sudo launchctl limit maxfiles 64000 524288
(varsayılan olarak 256 idi), ancak yalnızca geçerli oturumda çalışır. Kalıcı bir çözüm için launchctl
@ ninjaPixel'den ( https://superuser.com/a/1171028/760235 ) gelen işi kullanın .
Koşabilirsin
lsof -n
Hangi işlem çok fazla dosya açar.
o zaman öldür.
veya
sysctl -w kern.maxfiles=20480
daha büyüğü ile değiştirin.
Yukarıdaki tüm değişikliklerden sonra java 10000 dosyadan daha fazlasını yapmadı. Çözüm bu jvm bayrağıydı -XX: -MaxFDLimit
Bir chmod yaparken -R ile karşılaştım, bu yüzden daha küçük adımlar atarak dolaştırdım
# for each directory
find . -type d -exec chmod 755 {} \;
Https://superuser.com/a/1171028/367819 ile benzer
Mac OS X sisteminizdeki geçerli sınırları kontrol etmek için aşağıdakileri çalıştırın:
launchctl limit maxfiles
Son iki sütun sırasıyla yumuşak ve sert sınırlardır.
Mac OS X Yosemite’te açık dosya limitlerini sistem bazında ayarlamak için iki yapılandırma dosyası oluşturmanız gerekir. Birincisi, aşağıdaki XML yapılandırmasını içeren /Library/LaunchDaemons/limit.maxfiles.plist içindeki bir özellik listesi (aka plist) dosyasıdır:
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
Bu açık dosya limitini 200000 olarak ayarlayacaktır. İkinci plist konfigürasyon dosyası aşağıdaki içeriğe sahip /Library/LaunchDaemons/limit.maxproc.plist dosyasında saklanmalıdır:
<?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.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
Her iki plist dosya root tarafından sahiplenilmelidir: wheel ve izinleri -rw-r - r--. Bu izinler varsayılan olarak yerinde olmalıdır, ancak sudo chmod 644 çalıştırarak yerinde olduklarından emin olabilirsiniz. Yukarıda açıklanan adımlar, sistem genelinde açık dosya limitlerinin yeniden başlatmanın ardından doğru şekilde ayarlanmasına neden olsa da, launchctl limitini çalıştırarak bunları manuel olarak uygulayabilirsiniz.
Bu limitleri sistem düzeyinde ayarlamaya ek olarak, bashrc, bashprofile veya analog dosyaya aşağıdaki satırları ekleyerek oturum seviyesini ayarlamanızı öneririz:
ulimit -n 200000
ulimit -u 2048
Plist dosyaları gibi, bashrc veya benzer dosyalarınız da -rw-r - r-- izinlerine sahip olmalıdır. Bu noktada, bilgisayarınızı yeniden başlatabilir ve terminalinize ulimit -n girebilirsiniz. Sisteminiz doğru yapılandırılmışsa, maksimum dosyaların 200000 olarak ayarlandığını görmelisiniz.
Daha fazla ayrıntı için bu makaleyi takip edebilirsiniz.
https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Değerlerin etkili olması için Mac'inizi yeniden başlatmayı unutmayın.