Neden Linux'ta açık dosya ve Çalışan işlemlerin sayısını sınırlandırıyorsunuz?


14

İşletim sistemi dahili çalışmaları hakkında fazla bilgim yok, neden Linux'ta maksimum sayıda açık dosya ve çalışan işlem için sınırlarımız var?

Biri anlamama yardım ederse çok sevinirim.

Yanıtlar:


16

Bu esas olarak tarihi nedenlerden kaynaklanmaktadır. Eski Linux ana bilgisayarlarında, birçok kullanıcı anabilgisayarın kaynaklarını bağlar ve kullanır. Tabii ki, sınırlamak gerekiyordu ve dosya tutamaçları ve süreçleri gibi işlemler çekirdeğe inşa edildiğinden, orada sınırlıydı. Çatal bomba gibi saldırıların sınırlanmasına da yardımcı olur . Proses sınırlarını kullanarak bombaya karşı bir savunma burada gösterilmiştir .

Ayrıca, çatal bombasının yapmaya çalıştığı gibi kaçak çatallama ve dosya açılmasına izin vermeyerek karmaşık hizmetleri ve cinleri kontrol altında tutmaya yardımcı olur.

Ayrıca dikkat edilmesi gereken, kullanılabilir RAM ve CPU miktarı gibi şeyler ve 32 bitlik bir sayacın sadece çok fazla referans gösterebilmesi (sadece 32 bitlik bir sayaç tarafından sayılabilen 4294967296 girişleri), ancak bu sınırlar çok uzak genellikle programcılar ve sistem yöneticileri tarafından belirlenir. Her neyse, 4294967296 işlemlerinizden çok önce, makineniz muhtemelen planlandığı gibi veya başka bir kaynak açlıktan dolayı kilitlenmeye başladığında yeniden başlatılacaktı.

Titan'ı 584 TiB belleği ile çalıştırmazsanız (Linux bir süper bilgisayarda tek bir örnek olarak çalıştırılamayacağından, muhtemelen bu işlem sınırına çok yakında ulaşamayacaksınız). O zaman bile, ortalama bir işlemin paylaşılan bellek olmadığı varsayıldığında, yalnızca kabaca 146 KB bellek olurdu.


2
Çatal bomba için +1, bu özyinelemeli yöntemlerin dikkatli bir şekilde kabukta kullanılması durumunda ne kadar tehlikeli olabileceğini gösterdi!
aka_learner

9

Hem hayatta hem de Linux'ta her şeyin çoğu için sınırlar vardır. Bazen sınırlar çok yüksektir ve endişelenmeye değmez ve bazen çok düşüktür, tembel bir programcı tarafından keyfi olarak ayarlanır veya donanıma sınırlar ile ayarlanır.

Bir programcı adres gibi bir alanda izin verilen maksimum karakter sayısı gibi bir karar verdiğinde rasgele sınırlar ortaya çıkar. Belleği gerektiği gibi dinamik olarak ayırmak yerine, rasgele bir sınır ayarlamak çok daha kolaydır. Kullanılabilir belleğin tamamını basit bir giriş alanına atamak istemezsiniz, ancak girdinin önemli olabilecek diğer belleğin üzerine yazmasına da izin vermek istemezsiniz. Açık dosyalar ve işlemler için isteğe bağlı bir sınır olabilir veya kullanılabilir bellekle sınırlı olabilir. Eğer ikincisi, sınıra yaklaştıkça kötü şeyler olmaya başlayacak ve sistem asılabilir, bu yüzden bu gerçekleşmeden önce devreye giren bir sınıra sahip olmak genellikle iyidir. Bazen, keyfi sınırlar başlangıçta bellek veya disk alanına bağlı olarak belirlenebilir ve genellikle oldukça zekidir,

Ardından, bir tamsayı veya karakterin boyutu gibi donanım tarafından belirlenen sınırlar vardır. 32 bit sisteminiz varsa, bir tamsayı maksimum boyutu tarafından belirlenen sınırlar vardır (imzalanmamışsa 4.294.967.295 veya imzalanmışsa bunun yarısı).


1
Keyfi görünen limitler aslında standartlara dayalı olabilir. Uluslararası standart posta adresi satırlarını 39 karakterle sınırlar. Böyle bir sınır keyfi görünebilir. Bir adres için 60 karakterlik bir sınır muhtemelen keyfi olacaktır. Ne yazık ki, çok az programcı standartları kontrol etmektedir, bu nedenle pek çok (bazen doğru) limite keyfi olarak karar verilmektedir.
BillThor

Katılıyorum; hala bir programcı olarak çalışırken, söylediğiniz gibi ya da işletim sisteminde bir makro (max_path, vb.) olarak tanımlanan belirtilen sınırları aramak için çok zaman harcıyordum. Ancak şunu söylemeliyim ki, özellikle alan uzunlukları için, keyfi sınırlar genellikle hiçbir sınırdan daha iyi değildir. :)
Marty Fried

7

İşlemler için / proc / sys / kernel / pid_max izin verilen maksimum pid'dir, bu nedenle herhangi bir anda çalışabilecek işlem sayısının zor sınırı budur. Ancak, bellek üzerindeki sınırlar normalde bundan önce çok iyi bir şekilde devreye girer.

Makinenin tamamındaki açık dosyalarda üst sınır için / proc / sys / fs / file-max zor sınırdır; bu makinedeki bellek miktarına bağlıdır, bu nedenle değişecektir. Çekirdek bunu şu şekilde ayarlar:

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

her 1 MB RAM için yaklaşık 100 olacak şekilde çalışır.

İşlem başına limitler farklıdır. ulimit bunları tanımlayacaktır.


-5

Bir sınırımız var çünkü bilgisayarların sınırları var, 4GB RAM'im var, şimdi 15 oyun çalıştıramam, yapabilir miyim?

Büyük olasılıkla biraz gecikme ile çalıştırabilirim ama insan olmaz, PC'nizde ve Linux'un Kernal'ında sınırdır, Size atılan herhangi bir programı tutabilmek için daha iyi bir çekirdek ve RAM'e ihtiyacınız olacaktır. .

Windows 7'yi çalıştırdığımda dizüstü bilgisayarım gibi, Battlefield'ı oynayabilirdim, ancak RAM'imin% 80'ini aldı, bu yüzden "Need For Speed" oynamaya çalışırsam,% 60 alır Genellikle, her ikisini de açabilirim ama sonra tüm sistemim 2 Ağır Hizmet Programı çalıştırdığım için yavaşladım, ikisi de RAM için savaşıyor (Rasgele Erişim Belleği)

Kısacası, Normal bir bilgisayar aynı anda birçok programı çalıştıramaz Müzik, Not Defteri, Tarayıcı, E-posta, Oyun, Bir bilgisayarda çok şey olduğunu düşünüyorsunuz, ama sadece, World of Warcraft gibi bir oyun çok daha fazla RAM alıyor ve bilgisayar mücadelesi yapar (pahalı dizüstü bilgisayarlar gibi 8-16 GB RAM yoksa!)


Birçok işlem eşzamanlı olarak çalışacaksa yüksek CPU yükü olacağını bildiğimiz süreçler hakkındaki bilgiler için teşekkürler ve CPU çekirdeklerindeki trafik işlemek için çok yüksek olacak ve zamanla sisteminiz uygun durumda değil, askıda kalacaktır. herhangi bir işlem için zaman dilimi yanlış değilse sanırım i. Ama neden Linux'ta açık dosyalar için de sınır var?
aka_learner

Açık dosyaların bir sınırını bilmiyorum, hiç deneyimlemedim, Belki de bilgisayarlarınız benimkine kıyasla sınırlı, bu konuda emin değilim. Her zaman birkaç açık dosyam var, Sonra bir web tarayıcısı, Müzik Çalar ve Terminal açık.
Ubisoft Terzuz

Genelde benim mysql veritabanım "120428 20:30:01 [HATA] / usr / sbin / mysqld: Dosya açılamıyor: './djlabo_open/cart_layout.frm' (errno: 24)" hata günlüğünde hata çünkü linux bu veritabanı dosyasını açmasına izin vermiyor.
aka_learner

Muhtemelen dosyaları açmak için bir işletim sistemi sınırından farklı bir şey.
Nanne

1
@Terzuz Gerçekten insanların birbirlerinin cevaplarını gerçekten doğru görüp görmediğine dayanıyor. Birçok kişi (ben de dahil olmak üzere, maalesef) bu cevap gerçekten soruda belirtilen sınırlara değil, diğer sınırlara değiniyormuş gibi hissediyor.
Monica'yı eski durumuna getir - Nov--
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.