Linux'ta açık dosya limiti sayısını nasıl değiştirebilirim? [kapalı]


194

Uygulamamı çalıştırırken bazen bir hata alıyorum too many files open.

Çalışan ulimit -asınırın 1024 olduğunu bildiriyor. Sınırı 1024'ün üzerine nasıl yükseltebilirim?

Düzenleme ulimit -n 2048 izin hatası ile sonuçlanır.



Sadece Centos 7'de (RHEL'de aynı) geçtim ve bunu kapsayan bir blog yazısı yaptım çünkü tüm bu yayınlarda bile çok sorun yaşadım : coding-stream-of-consciousness.com/2018/12/21/… . Genellikle açık dosyalarla birlikte, aslında birden fazla ayar dosyasında bulunan nproc'u artırmanız gerekir ... ve kendi ayrı ayarlarına sahip systemd / systemctl kullanıyorsanız. Biraz fındık.
John Humphreys - w00te

Linux'ta VSCode kullanıyorsanız bu geçici çözüm yardımcı olabilir: stackoverflow.com/a/55027686/1190948
Juri Sinitson

Yanıtlar:


153

Her zaman bir ulimit -n 2048. Bu yalnızca geçerli kabuğunuzun sınırını sıfırlar ve belirttiğiniz sayı sabit sınırı aşmamalıdır

Her işletim sisteminin bir yapılandırma dosyasında farklı bir sabit limit kurulumu vardır. Örneğin, Solaris'teki sabit açık dosya sınırı / etc / system'den önyüklemede ayarlanabilir.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

OS X'te, aynı verilerin /etc/sysctl.conf dosyasında ayarlanması gerekir.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Linux altında, bu ayarlar genellikle /etc/security/limits.conf dizinindedir.

İki tür sınır vardır:

  • yumuşak sınırlar basitçe şu anda uygulanan sınırlardır
  • sabit sınırlar, yumuşak sınır ayarlanarak aşılamayacak maksimum değeri işaretler

Yumuşak limitler herhangi bir kullanıcı tarafından belirlenebilirken, sert limitler sadece kök tarafından değiştirilebilir. Sınırlar bir sürecin özelliğidir. Bir alt işlem oluşturulduğunda devralınırlar, böylece init komut dosyalarında sistem başlatma sırasında sistem genelinde sınırlar ve örneğin kullanıcı girişi sırasında pam_limits kullanılarak kullanıcı sınırları ayarlanmalıdır.

Makine önyüklendiğinde genellikle varsayılan değerler ayarlanır. Bu nedenle, ulimitinizi ayrı bir kabukta sıfırlayabilmenize rağmen, yeniden başlatma sırasında önceki değerine sıfırlandığını görebilirsiniz. Varsayılanı değiştirmek istiyorsanız, varolan ulimit komutları için önyükleme komut dosyalarınızı grep etmek isteyebilirsiniz.


4
bana bunu pencerelerde nasıl kullanacağımı söyleyebilir misin?
Pritam

@hoyhoy olarak değiştirebilirim 2048ama 4500neden olarak değiştiremiyorum ? bkz.
alhelal

@GaneshKrishnan bahsettiğiniz linux dosyalarına ne eklenir?
aviral sanjay

@Pritam Windows'da hiç yok ulimit. Ne kullandığınızı belirtmelisiniz (örn. WSL, Cygwin).
Melebius

99

Linux kullanıyorsanız ve izin hatasını alıyorsanız, /etc/limits.confveya /etc/security/limits.confdosyada izin verilen sınırı artırmanız gerekir (dosyanın bulunduğu yer Linux dağıtımınıza bağlıdır).

Örneğin, makinedeki herhangi birinin açık dosya sayısını 10000'e kadar yükseltmesine izin vermek için satırı limits.confdosyaya ekleyin .

* hard nofile 10000

Daha sonra oturumu kapatın ve sisteminize yeniden giriş yapın ve şunları yapabilirsiniz:

ulimit -n 10000

izin hatası olmadan.


6
NOT: Joker karakter kullanıcı için geçerli değildirroot . Sınırı root hard nofile 10000ayarlamak isteyip istemediğinizi belirtmeniz gerekir root.
Joshua Pinter

1
@JoshPinter Haha, sadece son 3 saat geçirdim nasıl değiştirileceği hakkında her tek öğretici geçirdim ulimitve sonunda kök olarak giriş yaptım öğrendim. Bu yüzden içinde 1024'ü görmeye devam ettim ulimit -a. Wildcare'i değiştirdim ve *içine bir şey ekledim limits.conf. Şimdi her şey iyi, (im ssh tuşlarını kullanarak endişelenmeyin: P) - Teşekkür ederim !!!
NiCk Newman

1
@NiCkNewman Bu konuda güldüğüne sevindim! Bu bir programcı / sysops kişisinde iyi bir özellik. Aynı şeyi yaptım ve çok neşeli değildim. Yardımcı oldu sevindim! :)
Joshua Pinter

Suplement: Ayrıca dizin içindeki bir yapılandırma bulabilirsiniz: /etc/security/limits.d/.
Waldemar Wosiński

2
/Etc/security/limits.conf dosyasını ilk kez açtım ve her şeyin orada yorumlandığını fark ettim. Peki "hard nofile" varsayılan değeri nedir?
ka3ak

36

1) Aşağıdaki satırı ekleyin /etc/security/limits.conf

webuser hard nofile 64000

sonra web kullanıcısı olarak giriş yapın

su - webuser

2) Webuser için aşağıdaki iki dosyayı düzenleyin

ekleme Bashrc ve .bash_profile çalıştırarak dosya

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) Oturumu kapatın, sonra tekrar oturum açın ve değişikliklerin doğru yapıldığını doğrulayın:

$ ulimit -a | grep open
open files                      (-n) 64000

İşte bu ve onlar patladı, pat patladı.


9
Çizginizi limit.conf içinde 'hard' 'dan' soft 'olarak değiştirirseniz, yeni varsayılan haline gelmeli ve bash profillerinde değişiklik yapılmasını gerektirmemelidir.
RishiD

Ekstra adımları tekrarladığınızı görünüyor. Sınırları tek başına belirlemek profil ile aynıdır, ancak tüm oturumlarda.
Eddie

6

Hizmetlerinizden bazıları ulimitlere engel oluyorsa, bazen hizmetin init-script'ine uygun komutlar koymak daha kolaydır. Örneğin, Apache bildirirken

[alert] (11) Kaynak geçici olarak kullanılamıyor: apr_thread_create: çalışan iş parçacığı oluşturulamıyor

Koymak için deneyin ulimit -s unlimitediçine /etc/init.d/httpd. Bu, sunucunun yeniden başlatılmasını gerektirmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.