ฉันมีโปรแกรมไพ ธ อนที่ใช้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
คำถามของฉันคือฉันจะเริ่มวินิจฉัยปัญหานี้ได้อย่างไร สมมติฐานบางข้อของฉันคือ:
- ระบบปฏิบัติการตรวจพบแล็ปท็อปของฉันอายุ 2 ปีและพยายามยืดอายุการใช้งาน CPU / RAM
- บางที OS อาจควบคุมการใช้ CPU / RAM ของกระบวนการหากใช้ไปนานมาก
- มีคนเข้าถึงแล็ปท็อปของฉันจากระยะไกลและหลอกฉัน
ฉันใช้ 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
watch -n 1 "(ps aux | awk '\$8 ~ /D/ { print \$0 }')"
และพอแน่นอนกระบวนการย่อยหลามทั้งหมดอยู่ในสถานะ D + 90% ของเวลาไม่มีกระบวนการอื่นใดที่อยู่ในสถานะนั้น ฉันเดาว่าสิ่งนี้จะไม่เกิดขึ้นเมื่อใดก็ตามที่หน่วยประมวลผลย่อยใช้ CPU 100%