จำกัด จำนวนของตัวให้คำอธิบายไฟล์


34

ฉันกำลังพยายามติดตั้ง389-dsและมันทำให้ฉันได้รับคำเตือนนี้:

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

ฉันเข้าใจเกี่ยวกับตัวอธิบายไฟล์ แต่ฉันไม่เข้าใจเกี่ยวกับข้อ จำกัด ที่อ่อนและแข็ง

เมื่อผมทำงานผมได้รับกลับมาcat /proc/sys/fs/file-max 590432นี่แปลว่าฉันสามารถเปิดไฟล์ได้สูงสุด 590432 ไฟล์ (เช่นมีตัวอธิบายไฟล์สูงสุด 590432

แต่เมื่อฉันวิ่งulimitมันให้ผลลัพธ์ที่แตกต่าง:

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

แต่อะไรคือข้อ จำกัด ฮาร์ด / ซอฟต์จากulimitและพวกเขาเกี่ยวข้องกับจำนวนที่เก็บไว้ที่/proc/sys/fs/file-max?

คำตอบ:


39

ตามเอกสาร kernel , /proc/sys/file-maxเป็นจำนวนสูงสุดทั้งหมดจำนวนโลกของไฟล์อธิบายเคอร์เนลจะจัดสรรก่อนที่จะสำลัก นี่เป็นขีด จำกัด ของเคอร์เนลไม่ใช่ผู้ใช้ปัจจุบันของคุณ ดังนั้นคุณสามารถเปิด 590432 ได้หากคุณอยู่คนเดียวในระบบว่าง (โหมดผู้ใช้คนเดียวไม่มี daemons ที่ทำงานอยู่)

โปรดทราบว่าเอกสารนั้นล้าสมัยแล้วไฟล์ดังกล่าวมีมาproc/sys/fs/file-maxเป็นเวลานาน ขอบคุณ Martin Jambon ที่ชี้เรื่องนี้ออกมา

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

โปรดทราบว่าหากคุณพยายามลดขีด จำกัด ฮาร์ดลงต่ำกว่าขีด จำกัด ซอฟต์ (และคุณไม่ใช่ superuser) คุณจะได้รับEINVALกลับคืน (อาร์กิวเมนต์ไม่ถูกต้อง)

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

ภาวนาอื่น ๆ ของคุณulimit -Hnรายงานเกี่ยวกับ-nการ จำกัด (จำนวนสูงสุดของการอธิบายไฟล์เปิด), ไม่-fขีด จำกัด ซึ่งเป็นเหตุผลที่ขีด จำกัด นุ่มดูเหมือนว่าสูงกว่าวงเงินยาก หากคุณป้อนulimit -Hfคุณจะได้รับ 'ไม่ จำกัด '


14
บน Linux 4.4.0 /proc/sys/fs/file-maxเส้นทางไฟล์สูงสุดคือ
Martin Jambon

กรุณา จำกัดulimit -Hn เป้าหมายยากขีด จำกัดมากของระบบเพื่อความสามารถในการอธิบายไฟล์ที่จัดสรร?
Webwoman

2
@ Webman: ไม่มันไม่ได้ ulimitส่งผลกระทบต่อข้อ จำกัด สำหรับกระบวนการปัจจุบันเท่านั้น ขีด จำกัด ของกระบวนการปัจจุบันถูกยกให้กับกระบวนการลูกด้วยเช่นกัน แต่แต่ละกระบวนการมีจำนวนแยกต่างหาก เช่นเดียวกับulimit -Hn 10คุณสามารถเปิดไฟล์อธิบายได้เพียง 10 ตัวในเวลาเดียว กระบวนการลูกแต่ละรายการที่คุณสร้างสามารถมีตัวอธิบายไฟล์ได้สูงสุด 10 ตัวเช่นกัน เฉพาะ superuser เท่านั้นที่สามารถเพิ่มขีด จำกัด ได้เมื่อตั้งค่าแล้ว หากคุณตั้งค่าไว้ต่ำเกินไปตัวเลือกเดียวของคุณคือฆ่ากระบวนการเชลล์และเริ่มกระบวนการใหม่
Alexios

0

การเรียกใช้ระบบ "เลือก" เป็นหนึ่งในการตัดสินใจเกี่ยวกับระบบปฏิบัติการยูนิกซ์ที่น่ากลัวมาก ๆ ซึ่งทำให้แม้แต่ windows95 ก็ยังดูดีมากเมื่อเปรียบเทียบ

มันควรถูกแบนเมื่อ 20 ปีที่แล้วและตอนนี้เราอาจมีความสามารถในการจัดการไฟล์ได้ไม่ จำกัด โดยไม่มีปัญหา

คุณสามารถเพิ่มจำนวนตัวอธิบายไฟล์ได้อย่างง่ายดายด้วยการกำหนดค่าเคอร์เนลและ ulimit แต่โปรดจำไว้ว่าหากมีไลบรารีใด ๆ ที่ใช้ระบบ "select" การเรียกใช้โปรแกรมของคุณจะไม่เสถียร (หน่วยความจำเสียหาย) และล้มเหลว

เลือกสามารถจัดการไฟล์ descriptors จาก 0 ถึง 1023 เท่านั้นและถ้าคุณป้อนค่าที่มีค่าสูงกว่ามันจะโผล่ในหน่วยความจำของคุณแบบสุ่มและการเลือกจะไม่ทำซ้ำ descriptor ว่าทำงานได้หรือไม่ น่าเสียดายที่ห้องสมุดหลายแห่งเลือกใช้


ความคิดเห็นของคุณเป็นคำเตือนที่มีประโยชน์ แต่แทนการพูดจาโผงผางเสียงก็จะได้รับการไกลมีประโยชน์มากขึ้นที่จะมีการยกfd_set(3)หน้าคนและขีด จำกัด FD_SETSIZEมาจาก และที่ดีที่สุดคือคำแนะนำของการโทรทดแทนเช่นเดียวpoll(3)กับในคำตอบ
Davor Cubranic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.