วิธีตรวจสอบการใช้ ulimit


29

มีวิธีการตรวจสอบการใช้ ulimits สำหรับผู้ใช้ที่กำหนดหรือไม่? ฉันรู้ว่าคุณสามารถเปลี่ยน ulimits สำหรับกระบวนการเดียวเมื่อคุณเริ่มต้นขึ้นหรือสำหรับเชลล์เดี่ยวเมื่อทำงาน แต่ฉันต้องการที่จะสามารถ "ตรวจสอบ" ว่าผู้ใช้ปิดการ จำกัด ขีด จำกัด ของพวกเขาได้อย่างไร ฉันกำลังวางแผนในการเขียนbashสคริปต์ที่จะรายงานกลับไปที่ statsd เปอร์เซ็นต์การใช้งานปัจจุบัน โดยเฉพาะฉันต้องการติดตาม:

  1. เปิดไฟล์ ( ulimit -n)
  2. กระบวนการของผู้ใช้สูงสุด ( ulimit -u)
  3. สัญญาณที่รอดำเนินการ ( ulimit -i)

สิ่งที่ฉันต้องการคือเปอร์เซ็นต์ของการใช้งาน (0-100)


หากคุณเปิดใช้งานบัญชีกระบวนการในเคอร์เนลคุณสามารถรวบรวมสถิติการใช้งานโดยละเอียดเกี่ยวกับผู้ใช้ของคุณ
casey

คุณจะเปิดการบัญชีกระบวนการได้อย่างไร
hazmat

และมันเพิ่มค่าใช้จ่ายเท่าไหร่?
hazmat

คำตอบ:


22

บางทีนี่อาจช่วยได้สำหรับคำถามแรก:

หากคุณทราบ ID กระบวนการ (PID) ของผู้ใช้ที่ระบุคุณสามารถรับข้อ จำกัด สำหรับแต่ละกระบวนการด้วย:

cat /proc/<PID>/limits

คุณสามารถรับจำนวนไฟล์ที่เปิดสำหรับแต่ละ PID ด้วย:

ls -1 /proc/<PID>/fd | wc -l

จากนั้นก็เปรียบเทียบค่าMax open filesกับจำนวนตัวอธิบายไฟล์แบบเปิดจากคำสั่งที่สองเพื่อรับเปอร์เซ็นต์


8

ส่งออกร้อยละของผู้ใช้ปัจจุบันของไฟล์ที่เปิด, proc และสัญญาณที่รอดำเนินการโดยวิธีการที่ไม่สะดวกหลายอย่างและเครื่องมือมาตรฐาน:

paste <(grep 'open files\|processes\|pending signals' /proc/self/limits | 
        cut -c27-38) \
      <(i=`whoami` ; lsof -u $i | tail -n +2 | awk {'print $9'} | wc -l; 
                     ps --no-headers -U $i -u $i u | wc -l ; 
                     ps -u $i -o pid= | xargs printf "/proc/%s/status\n" |
                                        xargs grep -s 'SigPnd' |
                                        sed 's/.*\t//' | paste -sd+ | bc ; ) |
while read a b ; do echo $((${b}00/a))%; done

เอาท์พุทในระบบของฉัน:

59%
9%
0%

สมมติว่าตัวเลขเหล่านั้นดีคำตอบนี้แสดงให้เห็นว่าสามารถทำได้ในเชลล์ แต่อาจไม่ควรยกเว้นว่ามีวิธีเชลล์ที่ดีกว่ามาก แต่นี้ Q จะทำได้ดีขึ้นด้วยgccหรือpython, ฯลฯ


-4

Ulimits เป็นคุณสมบัติของกระบวนการและสืบทอดไปยังกระบวนการลูก

คุณไม่สามารถรับข้อ จำกัด สำหรับกระบวนการอื่นได้


2
เรื่องไร้สาระ man lsof,, man ps
Gilles 'หยุดความชั่วร้าย'

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

2
นั่นเป็นอาการปวดหัวสำหรับผู้lsofดูแลแน่นอน แต่ไม่เกี่ยวข้องกับผู้ใช้ปลายทาง ยังไม่ถูกต้องในบริบทของคำถามนี้เนื่องจากมีการถามเฉพาะเกี่ยวกับ Linux ซึ่งมีเอกสารอินเตอร์เฟส ( man proc)
Gilles 'หยุดความชั่วร้าย'

คุณกำลังพูดถึงอินเทอร์เฟซที่ไม่มีเอกสารซึ่งอาจมีการเปลี่ยนแปลงโดยไม่ต้องแจ้งให้ทราบในกรณีนี้
schily

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