ฉันจะตรวจสอบ ulimit สำหรับผู้ใช้รายอื่นและเปลี่ยนไฟล์ที่เปิดอยู่ได้อย่างไร?


18

ฉันมีกระบวนการที่ทำงานเป็นผู้ใช้เกียร์และฉันต้องการเปลี่ยนopen filesเพื่อหลีกเลี่ยงข้อผิดพลาดที่น่ารังเกียจนี้:

ข้อผิดพลาด 2014-09-12 17: 49: 14.000000 [หลัก] ยอมรับ (ไฟล์เปิดมากเกินไป) -> libgearman-server / gearmand.cc: 788

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

su gearman --shell /bin/bash --command "ulimit -n"

ตามที่แนะนำที่นี่แต่ไม่มีอะไรออกรับ:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$

คำตอบ:


25

มาที่นี่อีกครั้งเพราะฉันสะดุดในระหว่างการค้นหาของ Google และพบว่าความคิดเห็นของTonyมีประโยชน์: แม้ว่าจะเป็นความจริงที่ว่าข้อ จำกัด จะถูกวางไว้ที่ระดับกระบวนการวิธีที่คุณจะกำหนดขีด จำกัด สำหรับผู้ใช้นั้น proc/${id}/limitsหากระบวนการที่พวกเขาได้เริ่มต้นแล้วตรวจสอบ

โดยเฉพาะ:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID

2
นี่ควรเป็นคำตอบที่ยอมรับใช้เพื่อค้นหา ulimit ปัจจุบันสำหรับผู้ใช้ redis บน Debian
tholu

6

เมื่อคุณรันulimitคำสั่งคำสั่งนั้นจะมีผลกับกระบวนการที่รันอยู่ulimit(เชลล์) และกระบวนการย่อยทั้งหมด ดังนั้นเมื่อคุณรันbash --command "ulimit -n"มันจะมีผลกับจำนวนไฟล์ที่เปิดสำหรับอินสแตนซ์ของ bash นั้นจากนั้น bash จะออกดังนั้นกระบวนการในอนาคตจะไม่ได้รับผลกระทบ

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

ดูตัวอย่าง limits.conf อื่น ๆ หรือนี่


นั่นคือสิ่งที่ฉันพบ แต่ฉันชอบที่จะตรวจสอบว่า "มีผล" หรือไม่ ฉันไม่ได้รับปัญหาที่ฉันมีอีกต่อไปดังนั้นฉันแน่ใจว่ามันทำ
โทนี่

10
นี่คือวิธีที่คุณตรวจสอบmore /proc/<proc_id>/limits ... อาจคุ้มค่าที่จะตอบ
โทนี่

5
ควรพูดถึงตำแหน่งของ limit.conf ด้วย:/etc/security/limits.conf
UpTheCreek

1

ลองใช้su - <USERNAME> -c ulimit' -Hn'ดู ฉันเพิ่งทดสอบกับ CEntOS 7 และใช้งานได้


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