Mengapa membatasi jumlah file yang terbuka dan proses Menjalankan di Linux?

14

Saya tidak memiliki banyak pengetahuan tentang cara kerja sistem operasi internal, jadi mengapa kita memiliki batasan untuk jumlah maksimum file terbuka dan menjalankan proses di Linux?

Saya akan sangat menghargai jika ada yang bisa membantu saya mengerti.

aka_learner
sumber

Jawaban:

16

Ini terutama karena alasan historis. Pada mainframe Linux yang lebih lama, banyak pengguna akan terhubung dan menggunakan sumber daya mainframe. Tentu saja, itu perlu dibatasi, dan karena operasi seperti menangani file dan proses dibangun ke dalam kernel, itu terbatas di sana. Ini juga membantu membatasi serangan seperti bom fork . Pertahanan terhadap bom form menggunakan batas proses ditunjukkan di sini .

Ini juga membantu menjaga layanan dan daemon yang rumit tetap terjaga dengan tidak mengizinkan forking dan pembukaan file yang melarikan diri, mirip dengan apa yang coba dilakukan oleh bom fork.

Yang juga perlu diperhatikan adalah hal-hal seperti jumlah RAM dan CPU yang tersedia, dan fakta bahwa penghitung 32-bit hanya dapat merujuk begitu banyak (hanya 4294967296 entri yang dapat dihitung dengan penghitung 32-bit), tetapi batas tersebut jauh di atas yang biasanya ditetapkan oleh programmer dan administrator sistem. Bagaimanapun, jauh sebelum Anda memiliki proses 4294967296, mesin Anda mungkin telah di-reboot, baik seperti yang direncanakan, atau ketika mulai terkunci karena kelaparan sumber daya lain.

Kecuali Anda menjalankan Titan dengan memori 584 TiB (Anda tidak akan melakukannya, karena Linux tidak dapat dijalankan sebagai satu komputer superkomputer), Anda mungkin tidak akan mencapai batas proses ini dalam waktu dekat. Bahkan kemudian, proses rata-rata hanya akan memiliki sekitar 146KB memori, dengan asumsi tidak ada memori bersama.

Pasang kembali Monica - ζ--
sumber
2
+1 untuk fork bomb, menunjukkan betapa berbahayanya metode rekursif ini jika digunakan dalam shell tanpa hati-hati!
aka_learner
9

Ada batasan untuk sebagian besar segalanya, baik dalam kehidupan maupun di Linux. Terkadang batasannya sangat tinggi dan tidak perlu dikhawatirkan, dan terkadang batasnya terlalu rendah, ditetapkan secara sewenang-wenang oleh pemrogram yang malas, atau ditentukan oleh batasan untuk perangkat keras.

Batas sewenang-wenang muncul ketika seorang programmer membuat keputusan seperti jumlah karakter maksimum yang dibolehkan dalam suatu bidang, seperti alamat. Jauh lebih mudah untuk menetapkan batas arbitrer daripada mengalokasikan memori secara dinamis sesuai kebutuhan. Anda tidak ingin mengalokasikan semua memori yang tersedia ke bidang input sederhana, tetapi Anda tidak ingin mengizinkan input untuk menimpa memori lain yang mungkin penting. Untuk file dan proses terbuka, mungkin ada batas yang sewenang-wenang, atau mungkin dibatasi oleh memori yang tersedia. Jika yang terakhir, maka hal-hal buruk akan mulai terjadi ketika Anda mendekati batas, dan sistem mungkin hang, jadi sering kali baik untuk memiliki batas yang ikut bermain sebelum itu terjadi. Kadang-kadang, batas sewenang-wenang dapat ditentukan saat startup tergantung pada memori atau ruang disk, dan biasanya cukup cerdas,

Lalu ada batas yang ditentukan oleh perangkat keras, seperti ukuran bilangan bulat atau karakter. Jika Anda memiliki sistem 32-bit, maka ada batas yang ditentukan oleh ukuran maksimum bilangan bulat (4.294.967.295 jika tidak ditandatangani, atau setengahnya jika ditandatangani).

Marty Fried
sumber
1
Batas yang tampak sewenang-wenang mungkin sebenarnya berbasis standar. Batas alamat pos standar internasional hingga 39 karakter. Batas seperti itu mungkin tampak sewenang-wenang. Batas 60 karakter untuk alamat kemungkinan akan berubah-ubah. Sayangnya, terlalu sedikit programmer memeriksa standar sehingga banyak (kadang-kadang benar) batas diputuskan secara sewenang-wenang.
BillThor
Saya setuju; ketika saya masih bekerja sebagai programmer, saya akan menghabiskan banyak waktu mencari batas yang dinyatakan, baik seperti yang Anda katakan, atau didefinisikan dalam OS sebagai makro (seperti max_path, dll). Tapi saya harus mengatakan bahwa batas sewenang-wenang biasanya lebih baik daripada tidak ada batas sama sekali, terutama untuk panjang lapangan. :)
Marty Fried
7

Untuk proses, / proc / sys / kernel / pid_max adalah pid maksimum yang diizinkan, jadi ini adalah batas keras dari jumlah proses yang dapat berjalan kapan saja. Namun, batas memori biasanya ikut bermain jauh sebelum itu.

Untuk batas atas pada file yang terbuka di seluruh mesin, / proc / sys / fs / file-max adalah batas keras; ini didasarkan pada jumlah memori di mesin, sehingga akan bervariasi. Kernel mengatur ini menjadi:

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

yang bekerja sekitar 100 untuk setiap 1 MB RAM.

Batas proses per berbeda. ulimit akan mendefinisikan ini.

Colin Ian King
sumber
-5

Kami memiliki batasan karena komputer memiliki batasan, saya memiliki RAM 4GB, Jadi saya tidak dapat menjalankan 15 game sekarang, bukan?

Saya kemungkinan besar dapat menjalankannya dengan beberapa lag tetapi itu bukan manusia, Ini adalah batas pada PC Anda dan Linux Kernal, Anda akan membutuhkan kernal yang lebih baik dan banyak RAM untuk dapat memegang program yang dilemparkan pada Anda .

Seperti laptop saya ketika saya menjalankan Windows 7, saya bisa bermain Battlefield, Tapi butuh 80% dari RAM saya jadi jika saya mencoba bermain "Need For Speed", itu membutuhkan 60% Biasanya, saya bisa membuka keduanya tetapi kemudian seluruh sistem saya melambat sejak saya menjalankan 2 Program Tugas Berat, Mereka berdua berjuang untuk RAM (Memori Akses Acak)

Singkatnya, komputer normal tidak bisa menjalankan banyak program sekaligus. Musik, Notepad, Browser, Email, Game, Anda pikir itu banyak di komputer, tetapi itu hanya sekadar, Game seperti World of Warcraft membutuhkan lebih banyak RAM dan membuat komputer Anda kesulitan (Kecuali jika Anda memiliki 8-16 GB RAM seperti halnya laptop mahal!)

Ubisoft Terzuz
sumber
Terima kasih atas informasi tentang proses seperti yang kita tahu akan ada beban CPU yang tinggi jika banyak proses akan berjalan secara bersamaan, dan lalu lintas pada core CPU akan sangat tinggi untuk menanganinya dan seiring waktu sistem Anda akan dalam keadaan hang, tidak memberikan yang tepat iris waktu untuk salah satu proses untuk mengeksekusi saya kira jika saya tidak salah. Tetapi mengapa ada juga batasan untuk membuka file di Linux?
aka_learner
Saya tidak tahu tentang batas file terbuka, saya belum pernah mengalami itu sama sekali, Mungkin itu komputer Anda terbatas dibandingkan dengan saya, saya tidak yakin tentang hal itu. Saya selalu punya 10 file terbuka, Kemudian browser web, Music Player, dan Terminal terbuka.
Ubisoft Terzuz
Ini umumnya terjadi pada saya ketika database mysql saya memberi saya mengikuti "120428 20:30:01 [ERROR] / usr / sbin / mysqld: Tidak dapat membuka file: './djlabo_open/cart_layout.frm' (errno: 24)" kesalahan dalam log kesalahannya karena linux tidak membiarkannya untuk membuka file database ini.
aka_learner
Itu mungkin sesuatu yang berbeda dari batas OS untuk membuka file.
Nanne
1
@Terzuz Ini benar-benar didasarkan pada apakah orang menganggap jawaban satu sama lain secara faktual benar. Banyak orang (termasuk saya, sayangnya) merasa seolah-olah jawaban ini mungkin tidak benar-benar mengatasi batas yang disebutkan dalam pertanyaan, tetapi batas lainnya.
Reinstate Monica - ζ--