คำตอบ:
คุณยังสามารถทำได้ในอันดับต้นๆ ในขณะที่ด้านบนกำลังทำงานให้กด '1' บนแป้นพิมพ์ของคุณจากนั้นจะแสดงการใช้งาน CPU ต่อคอร์
จำกัด กระบวนการที่แสดงโดยให้กระบวนการเฉพาะนั้นทำงานภายใต้บัญชีผู้ใช้เฉพาะและใช้ประเภท 'u' เพื่อ จำกัด เฉพาะผู้ใช้นั้น
top
อย่างไรman
เพจบอกtop -1
แต่บ่น! จะเป็นการดีที่จะได้top -1 -n 1
รับการทำซ้ำเพียงครั้งเดียวtop
แต่มีการแสดงการใช้งาน CPU แยกต่างหาก
คุณสามารถใช้ได้:
mpstat -P ALL 1
มันแสดงให้เห็นว่าแต่ละคอร์ยุ่งมากแค่ไหนและจะอัปเดตอัตโนมัติในแต่ละวินาที ผลลัพธ์จะเป็นแบบนี้ (บนโปรเซสเซอร์ Quad-Core):
10:54:41 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
10:54:42 PM all 8.20 0.12 0.75 0.00 0.00 0.00 0.00 0.00 90.93
10:54:42 PM 0 24.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 74.00
10:54:42 PM 1 22.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 76.00
10:54:42 PM 2 2.02 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97
10:54:42 PM 3 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
10:54:42 PM 4 14.15 0.00 1.89 0.00 0.00 0.00 0.00 0.00 83.96
10:54:42 PM 5 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
10:54:42 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10:54:42 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
คำสั่งนี้ไม่ตอบคำถามเดิมแม้ว่าจะไม่แสดงการใช้งาน CPU core สำหรับกระบวนการเฉพาะ
คุณสามารถใช้ps
.
เช่นมีกระบวนการ python ที่มีเธรดไม่ว่างสองเธรดบน CPU ดูอัลคอร์:
$ ps -p 29492 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
29492 29492 1 0.0
29492 29493 1 48.7
29492 29494 1 51.9
(PSR คือรหัส CPU ที่เธรดถูกกำหนดให้ในปัจจุบัน)
คุณจะเห็นว่าเธรดกำลังทำงานบนแกน cpu เดียวกัน (เพราะ GIL)
เรียกใช้สคริปต์ python เดียวกันใน jython เราเห็นว่าสคริปต์ใช้ทั้งสองคอร์ (และมีบริการอื่น ๆ อีกมากมายหรือเธรดใด ๆ ซึ่งเกือบจะไม่ได้ใช้งาน):
$ ps -p 28671 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
28671 28671 1 0.0
28671 28672 0 4.4
28671 28673 0 0.6
28671 28674 0 0.5
28671 28675 0 2.3
28671 28676 0 0.0
28671 28677 1 0.0
28671 28678 1 0.0
28671 28679 0 4.6
28671 28680 0 4.4
28671 28681 1 0.0
28671 28682 1 0.0
28671 28721 1 0.0
28671 28729 0 88.6
28671 28730 1 88.5
คุณสามารถประมวลผลเอาต์พุตและคำนวณ CPU ทั้งหมดสำหรับแกน CPU แต่ละตัว
น่าเสียดายที่วิธีนี้ดูเหมือนจะไม่น่าเชื่อถือ 100% บางครั้งฉันเห็นว่าในกรณีแรกเธรดการทำงานสองเธรดถูกรายงานว่าแยกจากกันไปยังคอร์ CPU แต่ละคอร์หรือในกรณีหลังมีรายงานว่าเธรดสองเธรดเปิดอยู่ แก่นเดียวกัน ..
htop
ให้ภาพรวมที่ดีของการใช้งานหลักของแต่ละบุคคล
การps
แก้ปัญหาเกือบจะเป็นสิ่งที่ฉันต้องการและด้วยการทุบตีบางอย่างก็ทำตามที่คำถามเดิมถาม: เพื่อดูการใช้งานต่อคอร์ของกระบวนการเฉพาะ
นี่แสดงการใช้งานต่อคอร์ของกระบวนการมัลติเธรดด้วย
ใช้เช่น: cpustat `pgrep processname`` pgrep otherprocessname` ...
#!/bin/bash
pids=()
while [ $# != 0 ]; do
pids=("${pids[@]}" "$1")
shift
done
if [ -z "${pids[0]}" ]; then
echo "Usage: $0 <pid1> [pid2] ..."
exit 1
fi
for pid in "${pids[@]}"; do
if [ ! -e /proc/$pid ]; then
echo "Error: pid $pid doesn't exist"
exit 1
fi
done
while [ true ]; do
echo -e "\033[H\033[J"
for pid in "${pids[@]}"; do
ps -p $pid -L -o pid,tid,psr,pcpu,comm=
done
sleep 1
done
หมายเหตุ: สถิติเหล่านี้ขึ้นอยู่กับอายุการใช้งานของกระบวนการไม่ใช่Xวินาทีสุดท้ายดังนั้นคุณจะต้องเริ่มกระบวนการใหม่เพื่อรีเซ็ตตัวนับ
dstat -C 0,1,2,3
จะให้การใช้งาน CPU ของ 4 คอร์แรกด้วย แน่นอนถ้าคุณมี 32 คอร์คำสั่งนี้จะยาวขึ้นเล็กน้อย แต่มีประโยชน์ถ้าคุณสนใจแค่ไม่กี่คอร์
ตัวอย่างเช่นหากคุณสนใจเฉพาะแกน 3 และ 7 คุณสามารถทำได้
dstat -C 3,7
ฉันมีเพียงปัญหานี้และผมพบคำตอบที่คล้ายกันที่นี่
วิธีการคือตั้งค่าtop
ในแบบที่คุณต้องการจากนั้นกดW
(ตัวพิมพ์ใหญ่ W) ซึ่งจะบันทึกtop
เค้าโครงปัจจุบันของไฟล์การกำหนดค่าใน $ HOME / .toprc
แม้ว่าสิ่งนี้อาจไม่ได้ผลหากคุณต้องการเรียกใช้หลายรายการtop
ด้วยการกำหนดค่าที่แตกต่างกัน
ดังนั้นด้วยสิ่งที่ฉันพิจารณาวิธีแก้ปัญหาคุณสามารถเขียนไปยังไฟล์กำหนดค่าต่างๆ / ใช้ไฟล์กำหนดค่าที่แตกต่างกันโดยทำอย่างใดอย่างหนึ่งต่อไปนี้ ...
1) เปลี่ยนชื่อไบนารี
ln -s /usr/bin/top top2
./top2
ตอนนี้.top2rc
กำลังจะเขียนถึง $ HOME ของคุณ
2) ตั้งค่า $ HOME เป็นเส้นทางอื่นเนื่องจากจะเขียนไฟล์ config ไปยังไฟล์ $ HOME / .binary-name.rc
HOME=./
top
ตอนนี้ .toprc
กำลังจะเขียนไปยังโฟลเดอร์ปัจจุบัน
ด้วยการใช้ความคิดเห็นของคนอื่น ๆ เพื่อเพิ่มการบัญชีการใช้งานต่างๆที่ด้านบนคุณสามารถสร้างเอาต์พุตแบทช์สำหรับข้อมูลนั้นและรวบรวมข้อมูลผ่านสคริปต์ อาจจะไม่ง่ายเหมือนสคริปต์ของคุณ แต่ฉันพบว่าด้านบนให้กระบวนการทั้งหมดแก่ฉันเพื่อที่ในภายหลังฉันจะสามารถสรุปและจับภาพสถานะในระยะยาวที่ฉันอาจพลาดเป็นอย่างอื่น (การใช้งาน CPU อย่างกะทันหันโดยไม่ได้อธิบายเนื่องจากกระบวนการหลงทาง)
ฉันคิด perf stat
เป็นสิ่งที่คุณต้องการ
แสดงการใช้งานเฉพาะของกระบวนการเมื่อคุณระบุ--cpu=list
ตัวเลือก นี่คือตัวอย่างของการตรวจสอบการใช้ cpu ในการสร้างโครงการโดยใช้perf stat --cpu=0-7 --no-aggr -- make all -j
คำสั่ง ผลลัพธ์คือ:
CPU0 119254.719293 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU1 119254.724776 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU2 119254.724179 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU3 119254.720833 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU4 119254.714109 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU5 119254.727721 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU6 119254.723447 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU7 119254.722418 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU0 8,108 context-switches # 0.068 K/sec (100.00%)
CPU1 26,494 context-switches (100.00%)
CPU2 10,193 context-switches (100.00%)
CPU3 12,298 context-switches (100.00%)
CPU4 16,179 context-switches (100.00%)
CPU5 57,389 context-switches (100.00%)
CPU6 8,485 context-switches (100.00%)
CPU7 10,845 context-switches (100.00%)
CPU0 167 cpu-migrations # 0.001 K/sec (100.00%)
CPU1 80 cpu-migrations (100.00%)
CPU2 165 cpu-migrations (100.00%)
CPU3 139 cpu-migrations (100.00%)
CPU4 136 cpu-migrations (100.00%)
CPU5 175 cpu-migrations (100.00%)
CPU6 256 cpu-migrations (100.00%)
CPU7 195 cpu-migrations (100.00%)
คอลัมน์ด้านซ้ายคือดัชนี CPU เฉพาะและคอลัมน์ด้านขวาสุดคือการใช้งาน CPU หากคุณไม่ระบุ--no-aggr
ตัวเลือกผลลัพธ์จะรวมเข้าด้วยกัน --pid=pid
ตัวเลือกที่จะช่วยถ้าคุณต้องการที่จะตรวจสอบขั้นตอนการทำงาน
ลอง-a --per-core
หรือ-a perf-socket
เกินไปซึ่งจะนำเสนอข้อมูลเพิ่มเติม
เพิ่มเติมเกี่ยวกับการใช้งานของperf stat
สามารถเห็นได้ในการกวดวิชานี้: perf สถิติซีพียูยังperf help stat
จะช่วยให้ความหมายของตัวเลือก
I
เพื่อสลับโหมด Irix (ซึ่งตรงข้ามกับโหมด Solaris ) เมื่อon
ร้อยละที่ปรากฏในรายการกระบวนการนี้เทียบกับด้าย CPU เมื่อoff
เปอร์เซ็นต์ดังกล่าวแสดงค่อนข้างตรงกับความจุโดยรวมของ CPU (เช่นเธรดทั้งหมด - หรือที่เรียกว่าคอร์ทั้งหมด)