เหตุใดจึงไม่สามารถรับ 4096 max open files สำหรับผู้ใช้ที่ไม่ใช่รูทได้


13

ฉันไม่สามารถเพิ่มnofileขีด จำกัด สำหรับผู้ใช้ที่ไม่ใช่รูทบน Ubuntu 14.04 แม้ว่าจะทำตามคำตอบทั้งหมดของ StackExchange ที่เกี่ยวข้องกับปัญหานี้ จนถึงตอนนี้ฉันมี:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

$ cat /proc/sys/fs/file-max
101232

รีบูตเข้าสู่ระบบและ:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted

มียังคงอย่างใดน่าจะเป็นขีด จำกัด ของ 4096 สูงสุดสำหรับผู้ใช้ที่ไม่ใช่ราก


ฉันมีปัญหาเดียวกันกับ Ubuntu 16.10 บนเดสก์ท็อป ไม่ว่าฉันจะพยายามอะไรขีด จำกัด คือ 1024 หรือ 4096
NathanAldenSr

คำตอบ:


13

ใช้ Ubuntu 14.04 ฉันได้รับขีด จำกัด ที่อธิบาย:

user@notebook:~$ ulimit -Hn 4096  

ฉันสามารถลดมันด้วย ulimit แต่ไม่สามารถเพิ่มได้เช่นเดียวกับคำถามที่อธิบาย ตามที่คู่มือของ ulimit อธิบาย:

เฉพาะ root เท่านั้นที่สามารถเพิ่มขีด จำกัด ฮาร์ดได้

ดังนั้นฉันจึงพยายามกำหนดขีด จำกัด ที่สูงขึ้น/etc/security/limits.confเช่นนี้:

user hard nofile 9999 

และการเข้าสู่ระบบใหม่เช่นssh localhost -l userให้วงเงินใหม่กับฉัน:

user@notebook:~$ ulimit -Hn 9999

หวังว่านี่จะเหมาะกับคุณเช่นกัน


ขอบคุณ TomTomTom ฉันมีการเปลี่ยนแปลงใน /etc/security/limits.d/custom.conf อยู่แล้ว ฉันลองวางลงใน /etc/security/limits.conf โดยตรงตามที่คุณแนะนำและฉันยังได้รับ "bash: ulimit: open files: ไม่สามารถแก้ไขข้อ จำกัด : ไม่อนุญาตการดำเนินการ"
คาเฟอีนโคม่า

ฉันแค่เดา ​​- หนึ่งในสองเหตุผลทำไมมันไม่ได้ผลสำหรับคุณ:
TomTomTom

1
ใช้เวลานานเกินไปในการแก้ไขความคิดเห็นที่ไม่สมบูรณ์ ที่นี่เราจะไป: ฉัน - เพียงเดา - หนึ่งในสองเหตุผลทำไมมันไม่ทำงานสำหรับคุณ: 1. /etc/security/limits*ไม่ได้รับการอ่านโดยกลไกการเข้าสู่ระบบของคุณ - ด้วยเหตุผลที่ไม่รู้จัก 2. ขีด จำกัด ฮาร์ดของคุณได้รับการตั้งค่าเป็น 4096 ที่อื่นและ "เฉพาะรากเท่านั้นที่สามารถเพิ่ม ... " คุณอาจตรวจสอบโปรไฟล์ของคุณเช่น.bashrc(ขึ้นอยู่กับเปลือกของคุณ) หรือคุณอาจตรวจสอบ/etcสถานที่อื่น ๆ ที่อาจจะมีข้อ จำกัด find /etc | grep -e ulimit -e 4096 -e nofileการตั้งค่าเช่น BTW: คุณลอง ssh ไหม? และ: คุณเปลี่ยน /etc/ssh/sshd.confเพื่อหลีกเลี่ยง PAM ด้วยเหตุผลบางอย่างหรือไม่?
TomTomTom

ใช่เข้าสู่ระบบทั้งหมดผ่าน ssh ฉันได้ปิดการใช้งาน UsePAM- คู่มือหลายคนแนะนำนี้เป็นส่วนหนึ่งของการอนุญาตให้เข้าสู่ระบบตาม ssh-key ฉันจะลองเปิดเครื่องชั่วคราวเพื่อดูว่าเป็นปัญหาหรือไม่ ขอบคุณ!
คาเฟอีน Coma

Afaik, PAM เป็นสิ่งที่ควรอ่าน/etc/security/limits*- คุณอาจลองเปิดใช้งาน PAM เพื่อตรวจสอบสิ่งนี้ ฉันจะลองปิดการใช้งาน PAM เพื่อดูว่ามีความแตกต่างอะไรและจะรายงานผลลัพธ์ --- ใช่! แค่นั้นแหละ! ด้วยการปิดการใช้งาน PAM ขีด จำกัด ของฉันคือ 4096 ก็เช่นกันได้แม้ว่าชุดถึง 9999 /etc/security/limits.confใน
TomTomTom

4

นี้บทความผมคิดว่าอยู่กับปัญหาของคุณ

โดยทั่วไปคุณควรใช้คำสั่ง ulimit เพื่อเพิ่มทรัพยากรที่มีอยู่

ตัวอย่างเช่น:

ใช้คำสั่งคำสั่งต่อไปนี้เพื่อแสดงจำนวนตัวอธิบายไฟล์ที่เปิดสูงสุด:

cat /proc/sys/fs/file-max

หากต้องการดูค่าฮาร์ดและซอฟต์ให้ใช้คำสั่งดังต่อไปนี้:

# ulimit -Hn
# ulimit -Sn

หากต้องการดูค่าฮาร์ดและซอฟต์สำหรับผู้ใช้ httpd หรือ oracle ให้ใช้คำสั่งดังต่อไปนี้:

# su - username

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

# sysctl -w fs.file-max=100000

คำสั่งด้านบนจะบังคับให้มีจำนวนไฟล์ไม่เกิน 100,000 ไฟล์ คุณต้องแก้ไข/etc/sysctl.confไฟล์และใส่บรรทัดต่อไปนี้เพื่อให้หลังจากรีบูตการตั้งค่าจะยังคงเหมือนเดิม ในการทำเช่นนั้นผนวกคำสั่ง config ดังต่อไปนี้:

fs.file-max = 100000

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

# sysctl -p

ตรวจสอบการตั้งค่าของคุณด้วยคำสั่ง:

# cat /proc/sys/fs/file-max

หรือ:

# sysctl fs.file-max

ขั้นตอนข้างต้นตั้งค่าขีด จำกัด ตัวอธิบายไฟล์ทั่วทั้งระบบ (FD) อย่างไรก็ตามคุณสามารถ จำกัดhttpdผู้ใช้ (หรือผู้ใช้รายอื่น) ให้เป็นข้อ จำกัด เฉพาะโดยการแก้ไข/etc/security/limits.confไฟล์โดยแก้ไข/etc/security/limits.confและกำหนดขีด จำกัด ดังต่อไปนี้:

httpd soft nofile 4096
httpd hard nofile 10240

จากนั้นตรวจสอบพวกเขาโดย:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

หากคุณมีปัญหาเกี่ยวกับลีนุกซ์รุ่นอื่นให้ตรวจสอบ/etc/pam.d/loginและดูให้แน่ใจว่าคุณpam_limits.soเปิดใช้งานแล้วเช่น

session required pam_limits.so

2
สวัสดีบรู๊ค น่าเสียดายที่ฉันได้ลองคำแนะนำจากบทความนั้นแล้ว แม้ว่า 'ulimit -Hn' นั้นใหม่สำหรับฉัน มันพิมพ์ 4096 ขีด จำกัด ที่ฉันชนเข้าไว้
คาเฟอีน Coma

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.