ในการวัดการใช้ทรัพยากร UNIX เราจำเป็นต้องใช้โมดูลทรัพยากรในโปรแกรมของเรา โมดูลนี้ยังสามารถควบคุมการใช้ทรัพยากรได้
ในการใช้โมดูลนี้ เราควรนำเข้าโดยใช้ −
import resource
ขีดจำกัดของทรัพยากร
ในโมดูลนี้ เราสามารถใช้ setrlimit() เพื่อจำกัดการใช้ทรัพยากร มีสองพารามิเตอร์เพื่อจำกัดทรัพยากร พารามิเตอร์เหล่านี้เป็นขีดจำกัดซอฟต์และขีดจำกัดฮาร์ด ขีดจำกัดซอฟต์นั้นเป็นขีดจำกัดปัจจุบัน โดยพื้นฐานแล้ว สามารถเปลี่ยนผ่านกระบวนการได้ แต่จะไม่เกินขีดจำกัดฮาร์ด ค่าฮาร์ดจำกัดสามารถลดลงเป็นค่าใดๆ ที่เกินขีดจำกัดซอฟต์ได้ แต่เพิ่มไม่ได้
มีบางวิธีและค่าคงที่ที่เกี่ยวข้องกับการจำกัดทรัพยากร เหล่านี้คือ.
วิธีการresource.getrlimit(ทรัพยากร)
วิธีนี้ใช้เพื่อคืนค่าขีดจำกัดซอฟต์และฮาร์ดเป็นทูเพิล หากทรัพยากรที่ระบุไม่ถูกต้อง จะเพิ่ม ValueError
วิธีการresource.setrlimit(ทรัพยากร ขีดจำกัด)
วิธีนี้ใช้เพื่อกำหนดขีดจำกัดของทรัพยากร ขีดจำกัดสามารถกำหนดเป็นทูเพิลของขีดจำกัดแบบอ่อนและแบบแข็งได้ นอกจากนี้เรายังสามารถใช้ RLIM_INFINITY เพื่อสร้างทรัพยากรได้ไม่จำกัด
วิธีการresource.prlimit(pid, ทรัพยากร[, limit])
เมธอดนี้เป็นการรวมกันของเมธอด setrlimit() และ getrlimit() สามารถรับและกำหนดขีดจำกัดของทรัพยากรพร้อมกันสำหรับกระบวนการใดก็ได้ เมื่อ pid เป็น 0 มันจะทำงานในกระบวนการปัจจุบัน
ค่าคงที่ที่เกี่ยวข้องกับขีดจำกัดทรัพยากร -
ซีเนียร์ | ค่าคงที่ &คำอธิบาย |
---|---|
1 | RLIM_INFINITY จำกัดทรัพยากรไม่จำกัด |
2 | RLIMIT_CORE ขนาดสูงสุดของไฟล์หลักที่สร้างโดยกระบวนการปัจจุบัน |
3 | RLIMIT_CPU เวลาตัวประมวลผลสูงสุดของโปรเซสเซอร์ เมื่อเกินขีดจำกัด สัญญาณ SIGXCCPU จะถูกส่งไปยังกระบวนการ |
4 | RLIMIT_DATA ขนาดสูงสุดของฮีปของโปรเซสเซอร์ |
5 | RLIMIT_STACK ขนาดสูงสุดของ call stack มันใช้สแต็กของเธรดหลักสำหรับกระบวนการแบบมัลติเธรด |
6 | RLIMIT_NOFILE จำนวนสูงสุดของ Open file descriptor สำหรับกระบวนการปัจจุบัน |
7 | RLIMIT_MEMLOCK พื้นที่ที่อยู่สูงสุดสำหรับหน่วยความจำที่ถูกล็อก |
8 | RLIMIT_NICE เพดานของระดับที่ดีของกระบวนการ |
9 | RLIMIT_SWAP ขนาดสูงสุดของพื้นที่สว็อป |
10 | RLIMIT_NTPS จำนวนเทอร์มินัลหลอกสูงสุดในระบบ |
การใช้ทรัพยากร
มีวิธีการและค่าคงที่ที่เกี่ยวข้องกับการใช้ทรัพยากร
วิธีการทรัพยากร.getrusage(ใคร)
เมธอดนี้ใช้เพื่อส่งคืนอ็อบเจ็กต์ที่ใช้โดยโปรเซสปัจจุบันหรือโปรเซสลูกของมัน ส่งคืนฟิลด์ต่างๆ จากฟิลด์ค่าส่งคืน เราสามารถรับข้อมูลเกี่ยวกับวิธีการใช้ทรัพยากร
วิธีการทรัพยากร.getpagesize()
วิธีนี้ใช้เพื่อส่งคืนจำนวนไบต์ในหน้าระบบ อาจไม่เหมือนกับขนาดหน้าจริง
ค่าคงที่บางอย่างที่เกี่ยวข้องกับการใช้ทรัพยากร
ซีเนียร์ | ค่าคงที่ &คำอธิบาย |
---|---|
1 | RUSAGE_SELF ช่วยในการขอทรัพยากรที่ใช้โดยกระบวนการโทร เป็นผลรวมของทรัพยากรทั้งหมดของเธรดต่างๆ |
2 | RUSAGE_CHILDREN ช่วยขอทรัพยากรที่ใช้โดยกระบวนการลูก |
3 | RUSAGE_BOTH ช่วยขอทรัพยากรที่ใช้โดยกระบวนการเรียกและกระบวนการลูก ไม่สามารถใช้ได้กับทุกระบบ |
4 | RUSAGE_THREAD การใช้ทรัพยากรโดยเธรดปัจจุบัน ไม่สามารถใช้ได้กับทุกระบบ |
โค้ดตัวอย่าง
import resource res_limits = resource.getrusage(resource.RUSAGE_SELF) print(res_limits) print('Page Size: ' + str(resource.getpagesize())) resource.setrlimit(resource.RLIMIT_CPU, (1, 2)) print('Resouce Limits: ' + str(resource.getrlimit(resource.RLIMIT_CPU))) for a in range(1000): for b in range(1000): for c in range(1000): pass
ผลลัพธ์
$ python3 example.py resource.struct_rusage(ru_utime=0.035801, ru_stime=0.01074, ru_maxrss=9356, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=1147, ru_majflt=0, ru_nswap=0, ru_inblock=0, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=0, ru_nivcsw=17) Page Size: 4096 Resouce Limits: (1, 2) CPU time limit exceeded (core dumped)