จะหยุดระบบปฏิบัติการไม่ให้ จำกัด การใช้งาน CPU / RAM ได้อย่างไร


1

ฉันมีโปรแกรมไพ ธ อนที่ใช้multiprocessing.Poolซึ่งหมายความว่ามันจะวางไข่หลายกระบวนการ โปรแกรมรับไฟล์ข้อความขนาด 70k ทำการประมวลผลและบันทึกลงในไดเรกทอรีอื่น ฉันต้องการที่จะทำให้การใช้งานของแกน CPU ของฉันเมื่อทำงานเช่นนี้

และในขณะที่ฉันสามารถ โปรแกรมของฉันใช้เวลา ~ 10 วินาทีในการทำงานทุกครั้งซึ่งก็ดี

real    0m12.430s
user    0m13.072s
sys     0m9.704s

แต่ในช่วงไม่กี่วันที่ผ่านมามันไม่สอดคล้องกัน บางครั้งมันใช้ CPU 100% สำหรับคอร์ทั้งหมด บางครั้งไม่มีเหตุผลโปรแกรมจะใช้ 0-1 เปอร์เซ็นต์เท่านั้นและใช้เวลานานถึง 5 นาทีในการเรียกใช้

real    5m6.186s
user    0m4.844s
sys     0m4.968s

โปรดสังเกตว่า >> user + sys ที่แท้จริงแม้ว่าฉันจะไม่รู้ว่ามันหมายถึงอะไร โปรดทราบว่าฉันไม่ได้เปลี่ยนพารามิเตอร์ของรหัสหรือการตั้งค่าอื่น ๆ ระหว่างการทำงาน ในกรณีนี้ฉันสังเกตเห็นว่าการใช้ RAM ของแต่ละกระบวนการไม่เกิน 10 MB ซึ่งอาจส่งผลต่อการใช้งาน CPU

คำถามของฉันคือฉันจะเริ่มวินิจฉัยปัญหานี้ได้อย่างไร สมมติฐานบางข้อของฉันคือ:

  1. ระบบปฏิบัติการตรวจพบแล็ปท็อปของฉันอายุ 2 ปีและพยายามยืดอายุการใช้งาน CPU / RAM
  2. บางที OS อาจควบคุมการใช้ CPU / RAM ของกระบวนการหากใช้ไปนานมาก
  3. มีคนเข้าถึงแล็ปท็อปของฉันจากระยะไกลและหลอกฉัน

ฉันใช้ Linux Mint 17.3 บนแล็ปท็อปที่ใช้ Intel (R) Core (TM) i3-4005U CPU @ 1.70GHz, 4 คอร์, RAM 8 GB, HDD

ขอบคุณล่วงหน้า.

แก้ไข: นี่คือ vmstat เอาท์พุทในขณะที่โปรแกรมกำลังทำงาน

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  1      0 2773588 242912 2522744    0    0   114    54  229  812 11  2 83  5  0

ความคิดแรกของฉันคือกระบวนการของคุณกลายเป็น I / O ที่ถูกผูกไว้ ในการตรวจสอบกระบวนการของคุณกระบวนการใด ๆ ที่อยู่ในสถานะรอดิสก์ (หรือว่าดิสก์หลับ)?
xenoid

ฉันวิ่งwatch -n 1 "(ps aux | awk '\$8 ~ /D/ { print \$0 }')"และพอแน่นอนกระบวนการย่อยหลามทั้งหมดอยู่ในสถานะ D + 90% ของเวลาไม่มีกระบวนการอื่นใดที่อยู่ในสถานะนั้น ฉันเดาว่าสิ่งนี้จะไม่เกิดขึ้นเมื่อใดก็ตามที่หน่วยประมวลผลย่อยใช้ CPU 100%
Carl Araya

รัน vmstat และตรวจสอบคอลัมน์ iowait เปอร์เซ็นต์ที่สูงหมายความว่ากำลังรอ IO (การฟาดดิสก์) ลองโพสต์ผลลัพธ์ vmstat มูลค่า 10 บรรทัดในคำถามของคุณ HDD หรือ SSD ตรวจสอบคอลัมน์ bi (bytes in) ซึ่งอยู่ในหน่วย kB ซึ่งจะแสดงว่ากำลังอ่านไฟล์ของคุณหรือไม่ si / so (swapin / swapout) แสดงว่ามันเป็นการแลกเปลี่ยน
peufeu

หมายเหตุเอาต์พุต "time" แรกแสดง user + sys = 22.7s และ real = 12.4s ดังนั้นมันจึงใช้ 2 คอร์ แต่ไม่มาก (ไม่ทราบว่าคุณมีจำนวนเท่าใด)
peufeu

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