ทำไมต้อง จำกัด จำนวนไฟล์ที่เปิดและกระบวนการกำลังทำงานอยู่ใน Linux?


14

ฉันไม่มีความรู้เกี่ยวกับการทำงานภายในของระบบปฏิบัติการดังนั้นทำไมเราถึงมีข้อ จำกัด เกี่ยวกับจำนวนไฟล์ที่เปิดสูงสุดและกระบวนการทำงานใน Linux

ฉันจะขอบคุณถ้าใครสามารถช่วยฉันเข้าใจ

คำตอบ:


16

นี่คือเหตุผลหลักในประวัติศาสตร์ บนเมนเฟรม Linux เก่าผู้ใช้หลายคนจะเชื่อมต่อและใช้ทรัพยากรของเมนเฟรม แน่นอนว่าจำเป็นต้อง จำกัด และเนื่องจากการดำเนินการเช่นตัวจัดการไฟล์และกระบวนการถูกสร้างขึ้นในเคอร์เนลจึงมีข้อ จำกัด นอกจากนี้ยังช่วยโจมตีขีด จำกัด เช่นระเบิดส้อม ป้องกันกับระเบิดแบบฟอร์มการใช้ขีด จำกัด ของกระบวนการจะแสดงที่นี่

นอกจากนี้ยังช่วยรักษาบริการที่ซับซ้อนและ daemons ด้วยการตรวจสอบโดยไม่อนุญาตให้ฟอร์กฟอร์กและการเปิดไฟล์คล้ายกับที่ fork bomb พยายามทำ

สิ่งที่ต้องสังเกตก็คือปริมาณของ RAM และ CPU ที่มีอยู่และความจริงที่ว่าตัวนับ 32 บิตสามารถอ้างอิงได้มากเท่านั้น (รายการ 4294967296 เท่านั้นที่สามารถนับได้โดยตัวนับ 32 บิต) แต่ข้อ จำกัด นั้นอยู่ไกล เหนือสิ่งที่กำหนดโดยโปรแกรมเมอร์และผู้ดูแลระบบ อย่างไรก็ตามก่อนที่คุณจะมีกระบวนการ 4294967296 กระบวนการเครื่องของคุณอาจถูกรีบูตทั้งตามที่วางแผนไว้หรือตามที่มันเริ่มล็อคเนื่องจากทรัพยากรอื่นกำลังหิวโหย

นอกจากว่าคุณจะเรียกใช้Titanด้วยหน่วยความจำ 584 TiB (คุณจะไม่ทำเช่นนั้นเนื่องจาก Linux ไม่สามารถรันเป็นอินสแตนซ์เดียวบนซูเปอร์คอมพิวเตอร์) คุณอาจจะไม่ถึงขีด จำกัด กระบวนการนี้ในไม่ช้า แม้ว่ากระบวนการเฉลี่ยจะมีหน่วยความจำประมาณ 146KB เท่านั้นโดยไม่มีหน่วยความจำที่แชร์


2
+1 สำหรับ fork bomb แสดงให้เห็นว่าวิธีการ recursive เหล่านี้อันตรายเพียงใดหากใช้ในกระสุนโดยไม่ต้องระวัง!
aka_learner

9

มีข้อ จำกัด สำหรับทุกสิ่งส่วนใหญ่ทั้งในชีวิตและใน Linux บางครั้งข้อ จำกัด นั้นสูงมากและไม่คุ้มค่าที่จะกังวลและบางครั้งมันก็ต่ำเกินไปตั้งค่าโดยไม่ตั้งใจของโปรแกรมเมอร์ที่ขี้เกียจหรือตั้งไว้ตามข้อ จำกัด ของฮาร์ดแวร์

ข้อ จำกัด โดยพลการเกิดขึ้นเมื่อโปรแกรมเมอร์ตัดสินใจเช่นจำนวนอักขระสูงสุดที่อนุญาตในฟิลด์เช่นที่อยู่ การตั้งค่าขีด จำกัด เองง่ายกว่าการจัดสรรหน่วยความจำแบบไดนามิกตามที่จำเป็นได้ง่ายกว่ามาก คุณไม่ต้องการจัดสรรหน่วยความจำทั้งหมดที่มีให้กับฟิลด์อินพุตแบบง่าย แต่คุณไม่ต้องการอนุญาตให้อินพุตเขียนทับหน่วยความจำอื่นที่อาจมีความสำคัญเช่นกัน สำหรับไฟล์และกระบวนการที่เปิดอยู่อาจมีข้อ จำกัด ตามอำเภอใจหรืออาจถูก จำกัด โดยหน่วยความจำที่มีอยู่ ถ้าสิ่งหลังสิ่งเลวร้ายจะเริ่มเกิดขึ้นเมื่อคุณเข้าใกล้ขีด จำกัด และระบบอาจหยุดทำงานดังนั้นจึงเป็นเรื่องดีที่จะมีการ จำกัด การเล่นก่อนที่จะเกิดขึ้น บางครั้งข้อ จำกัด โดยพลการอาจกำหนดเมื่อเริ่มต้นขึ้นอยู่กับหน่วยความจำหรือพื้นที่ดิสก์และมักจะฉลาดพอสมควร

จากนั้นจะมีข้อ จำกัด ที่กำหนดโดยฮาร์ดแวร์เช่นขนาดของจำนวนเต็มหรือตัวอักษร หากคุณมีระบบ 32 บิตจะมีการ จำกัด ตามขนาดสูงสุดของจำนวนเต็ม (4,294,967,295 ถ้าไม่ได้ลงนามหรือครึ่งหนึ่งหากลงชื่อ)


1
ข้อ จำกัด ที่ปรากฏขึ้นโดยพลการอาจเป็นไปตามมาตรฐาน บรรทัดที่อยู่ไปรษณีย์สากลขีด จำกัด มาตรฐานที่ 39 ตัวอักษร ขีด จำกัด ดังกล่าวอาจปรากฏขึ้นโดยพลการ การ จำกัด ที่อยู่ 60 ตัวสำหรับที่อยู่น่าจะเป็นไปตามอำเภอใจ น่าเสียดายที่โปรแกรมเมอร์น้อยเกินไปตรวจสอบมาตรฐานดังนั้นข้อ จำกัด จำนวนมาก (บางครั้งถูกต้อง) จะถูกตัดสินโดยพลการ
BillThor

ฉันเห็นด้วย; เมื่อฉันยังทำงานเป็นโปรแกรมเมอร์ฉันจะใช้เวลามากในการค้นหาข้อ จำกัด ที่ระบุไม่ว่าคุณจะพูดหรือกำหนดไว้ในระบบปฏิบัติการเป็นแมโคร (เช่น max_path ฯลฯ ) แต่ฉันต้องบอกว่าข้อ จำกัด โดยพลการมักจะดีกว่าไม่ จำกัด เลยโดยเฉพาะอย่างยิ่งสำหรับความยาวของฟิลด์ :)
มาร์ตี้ทอด

7

สำหรับกระบวนการ / proc / sys / kernel / pid_max เป็น pid สูงสุดที่อนุญาตดังนั้นนี่คือขีด จำกัด สูงสุดของจำนวนกระบวนการที่สามารถทำงานได้ทันที อย่างไรก็ตามข้อ จำกัด ของหน่วยความจำมักเข้ามาเล่นได้ดีก่อนหน้านั้น

สำหรับขีด จำกัด สูงสุดของไฟล์ที่เปิดอยู่ในเครื่องทั้งหมด / proc / sys / fs / file-max เป็นขีด จำกัด ฮาร์ด นี้ขึ้นอยู่กับปริมาณของหน่วยความจำในเครื่องดังนั้นมันจะแตกต่างกันไป เคอร์เนลตั้งค่าเป็น:

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

ซึ่งใช้งานได้ประมาณ 100 ต่อแรม 1 MB

ข้อ จำกัด ต่อกระบวนการนั้นแตกต่างกัน ulimit จะกำหนดสิ่งเหล่านี้


-5

เรามีข้อ จำกัด เพราะคอมพิวเตอร์มีข้อ จำกัด ฉันมี 4GB of RAM ดังนั้นฉันจึงไม่สามารถรัน 15 เกมตอนนี้ได้ไหม

ฉันมักจะสามารถเรียกใช้ด้วยความล่าช้าบางอย่าง แต่มันจะไม่เป็นมนุษย์มันเป็นข้อ จำกัด ในพีซีของคุณและลินุกซ์ของ Kernal คุณจะต้องมีขนาดเล็กและใหญ่มากของแรมเพื่อให้สามารถเก็บโปรแกรมใด ๆ .

เช่นแล็ปท็อปของฉันเมื่อฉันใช้ Windows 7 ฉันสามารถเล่น Battlefield ได้ แต่ใช้ RAM ถึง 80% ดังนั้นถ้าฉันพยายามเล่น "Need For Speed" ซึ่งใช้เวลา 60% ตามปกติฉันสามารถเปิดได้ทั้งสองอย่าง แต่ระบบทั้งหมดของฉันคือ ช้าลงเนื่องจากฉันใช้งานโปรแกรมหนัก 2 รายการพวกเขากำลังต่อสู้เพื่อ RAM (Random Access Memory)

กล่าวโดยทั่วไปคอมพิวเตอร์ทั่วไปไม่สามารถเรียกใช้โปรแกรมได้มากมายในเวลาเดียวกัน Music, Notepad, เบราว์เซอร์, อีเมล, เกมคุณคิดว่ามันมีจำนวนมากบนคอมพิวเตอร์ แต่นั่นเป็นเพียงเกมอย่าง World of Warcraft ใช้ RAM มากกว่าและ ทำให้คอมพิวเตอร์ของคุณต้องดิ้นรน (เว้นแต่ว่าคุณมี RAM 8-16 GB เหมือนแล็ปท็อปราคาแพง)


ขอบคุณสำหรับข้อมูลเกี่ยวกับกระบวนการที่เรารู้ว่าจะมีโหลดซีพียูสูงหากกระบวนการจำนวนมากทำงานพร้อมกันและการรับส่งข้อมูลบนคอร์ CPU จะสูงมากในการจัดการและด้วยเวลาที่ระบบของคุณจะเข้าสู่สถานะแฮงค์ แบ่งเวลาให้กับกระบวนการใด ๆ เพื่อดำเนินการฉันเดาว่าถ้าฉันไม่ผิด แต่ทำไมขีด จำกัด ของ open files ใน Linux?
aka_learner

ฉันไม่รู้เกี่ยวกับขีด จำกัด ของไฟล์ที่เปิดอยู่ฉันไม่เคยเจอเลยบางทีคอมพิวเตอร์ของคุณอาจมีข้อ จำกัด เมื่อเทียบกับของฉันฉันไม่แน่ใจในเรื่องนั้น ฉันเปิดไฟล์อยู่สองสามไฟล์จากนั้นเปิดเว็บเบราว์เซอร์เครื่องเล่นเพลงและเทอร์มินัล
Ubisoft Terzuz

มักเกิดขึ้นกับฉันเมื่อฐานข้อมูล mysql ของฉันให้ฉันติดตาม "120428 20:30:01 [ข้อผิดพลาด] / usr / sbin / mysqld: ไม่สามารถเปิดไฟล์: './djlabo_open/cart_layout.frm' (errno: 24)" error ในบันทึกข้อผิดพลาดเนื่องจาก linux ไม่อนุญาตให้เปิดไฟล์ฐานข้อมูลนี้
aka_learner

นั่นอาจเป็นสิ่งที่แตกต่างจากการ จำกัด ระบบปฏิบัติการในการเปิดไฟล์
Nanne

1
@ Terzuz มันขึ้นอยู่กับว่าคนคิดว่าคำตอบของแต่ละคนถูกต้องจริงหรือไม่ หลายคน (รวมถึงฉันด้วยโชคไม่ดี) รู้สึกราวกับว่าคำตอบนี้อาจไม่ตรงกับข้อ จำกัด ที่กล่าวถึงในคำถาม แต่เป็นข้อ จำกัด อื่น ๆ
Reinstate Monica - ζ--
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.