มีกี่คอร์ที่ฉันใช้บนเซิร์ฟเวอร์ Linux


30

ฉันแค่สงสัยว่าฉันจะรู้ได้อย่างไรว่าทุบตีจำนวนคอร์ CPU ที่ผู้ใช้ใช้บน Linux Server ตอนนี้?

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

ขอบคุณและขอแสดงความนับถือ!

คำตอบ:


39

เพื่อให้ได้ จำนวนซีพียู แกน ต่อซีพียู:

grep "^core id" /proc/cpuinfo | sort -u | wc -l

หรือเพื่อให้ได้ จำนวน กายภาพ ซีพียู :

grep "^physical id" /proc/cpuinfo | sort -u | wc -l

25

ฉันไม่รู้ว่ามันช่วย แต่คุณสามารถใช้ mpstat ยูทิลิตี้เพื่อรับรายละเอียดการใช้งาน CPU โดยโปรเซสเซอร์แต่ละตัว (หรือแกนประมวลผล) ตัวอย่างเช่น:

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

ในตัวอย่างนี้คุณจะเห็นซีพียูนั้น 0, 1และ 6 กำลังทำงานมากกว่าที่เหลืออยู่ บางครั้งคุณจะเห็นว่า CPU ตัวเดียวใกล้ (หรือที่) 100% ขณะที่คนอื่น ๆ อยู่ที่ศูนย์ นี่สามารถเป็นตัวบ่งชี้ของโปรแกรม (หรือส่วนของโปรแกรม) ที่เป็นเธรดเดี่ยวและสามารถใช้ CPU เดี่ยวในแต่ละครั้งเท่านั้น

ติดตั้ง mpstat บนระบบ Fedora, RHEL หรือ CentOS ให้ใช้ yum install sysstat.


ขอบคุณล้านที่ให้คำตอบนี้! เพื่อนร่วมงานของฉันกำลังใช้คำสั่ง "top" และทำการสรุปข้อผิดพลาดทั้งหมดเกี่ยวกับการใช้ตัวประมวลผลจนกว่าฉันจะแสดงคำสั่ง mpstat
Nav

ไม่สามารถใช้งานได้บน Ubuntu: # aptitude search mpstat #.
Alix Axel

2
@AlixAxel ลอง aptitude search systat แทน.
Matt Solnit

@MattSolnit: ยังไม่มีโชค
Alix Axel

mpstat ให้บริการโดยแพคเกจ sysstat บน Debian และ บน Ubuntu . ฉันคาดหวังว่าการกระจาย Debian ส่วนใหญ่จะใช้ชื่อแพ็คเกจเดียวกัน บนการแจกแจงแบบ Debian เริ่มต้นด้วย apt-cache search --full mpstat.
a CVn

2

ยกเว้นว่าได้กำหนดค่าไว้อย่างชัดเจนไม่ให้ (เช่นการปักหมุดกระบวนการกับ CPU ที่ระบุ) คอร์ทั้งหมดสามารถใช้งานได้ตลอดเวลา ตัวกำหนดตารางเวลาจะจัดสรรกระบวนการสำหรับแกนที่มีอยู่ถัดไป ในกรณีที่ "การตรวจสอบระบบ" (ส่วนหนึ่งของ GNOME) แสดงการโหลดของฉันเกือบจะเหมือนกันในทั้ง 4 คอร์ของเครื่องของฉัน


ฉันกำลังส่งงานแบ็คกราวน์จำนวนพอสมควรไปยังเซิร์ฟเวอร์ดังนั้นฉันชอบเขียน bash script เพื่อตรวจสอบก่อนที่ฉันจะส่งงานถ้างานที่กำลังรัน (กระบวนการ) ส่งโดยฉันมากเกินไปเพราะฉันต้องให้ผู้ใช้รายอื่นมี แกนเพียงพอที่จะใช้สำหรับงานของพวกเขา ดังนั้นฉันชอบที่จะรู้ว่าคำสั่ง bash สามารถบอกฉันได้ว่ามีกี่คอร์ที่ใช้งานของฉันตอนนี้
Tim

3
ฉันไม่คิดว่าคุณเข้าใจคำตอบของฉัน จำนวนคอร์ที่ใช้งานอยู่คือจำนวนคอร์ทั้งหมดที่มีอยู่เสมอ ใช้การโหลดระบบโดยรวมเป็นปัจจัยในการพิจารณาว่าการส่งงานของคุณควรจะควบคุมปริมาณหรือไม่
EmmEff

ขอบคุณ! ฉันจะตรวจสอบโหลดระบบโดยรวม ฉันได้รับการบอกเล่าจากหนึ่งในเพื่อนร่วมงานของฉันว่าฉันไม่สามารถใช้งานคอร์ทั้งหมดได้เพราะใครจะรู้ว่าคนอื่นจะทำงานของพวกเขาในไม่ช้าและงานของฉันจะอยู่ได้ไม่นาน คุณคิดว่าฉันต้อง จำกัด จำนวนคอร์ที่ใช้หรือไม่?
Tim

2

ดังนั้นคุณจะเห็นว่ามีการตอบสนองที่นี่ซึ่งจะบอกคุณว่าแกนของคุณถูกใช้งานอย่างไร

อย่างไรก็ตาม - สิ่งนี้ไม่ได้เป็นการบริการของคุณจริงๆ คุณได้ตั้งสมมติฐานขั้นพื้นฐานที่ไม่ได้เก็บไว้ - งานของคุณจะมีแนวโน้มที่จะจัดกลุ่มตัวเองลงบนชุดย่อยของแกน

แต่งานของคุณจะถูกกระจายออกไปทั่วทุกคอร์เว้นแต่คุณจะใช้บางสิ่งที่ทำให้พวกเขา "เขียนด้วย" อย่างใด (หมายเหตุ: ฉันไม่แนะนำให้ทำเพียงแค่พูดว่า "เว้นแต่")

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

ด้วยวิธีนี้โซลูชันจะเป็นคอร์นับจำนวนอิสระพกพาได้ยืดหยุ่นกว่าและ "บิด" ได้ง่ายขึ้นเช่นกัน


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

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

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

2

หากคุณต้องการทำสิ่งนี้เพื่อให้สามารถใช้งานได้กับ linux และ OS X คุณสามารถทำได้:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

1

คุณสามารถรับประมาณการคร่าวๆโดยการเรียกใช้ topกดปุ่ม ' U 'และระบุชื่อผู้ใช้ของคุณแล้วเพิ่มการใช้ประโยชน์ CPU ของกระบวนการไม่กี่ขั้นตอนแรกของคุณ


ฉันต้องการทราบคำสั่ง bash ที่สามารถบอกหมายเลขได้เนื่องจากฉันต้องการใช้ในสคริปต์ทุบตี
Tim

@ Tim top สามารถทำงานในโหมดแบตช์ด้วยสวิตช์ -b รวมกับสวิตช์ -n เพื่อรับจำนวนการวนซ้ำที่คุณต้องการ
nagul

1
คุณสามารถให้ตัวอย่างของรหัสสำหรับการรับจำนวนแกนที่ใช้โดยงานทั้งหมด (กระบวนการ) ส่งโดยผู้ใช้หรือไม่
Tim

@Tim ไม่ออกค้างคาว ฉันอาจจะต้องเขียนสคริปต์เช่นโดยการแยกวิเคราะห์ top เอาท์พุทหรือ google เพื่อดูว่ามีใครทำไปแล้ว อย่างไรก็ตามฉันไม่เชื่อว่ามันคุ้มค่ากับความพยายามเพราะฉันคิดว่าฉันจะได้ผลลัพธ์ที่แตกต่างกันสำหรับการวิ่งทุกครั้งเนื่องจากความเร็วที่การสลับบริบทเกิดขึ้น ระบบโหลดตัวบ่งชี้ไม่ดีพอหรือไม่? อย่างมีประสิทธิภาพจะบอกคุณว่าต้องใช้แกนประมวลผลเสมือนจำนวนเท่าใดในการจัดการคิวกระบวนการ (กระบวนการที่รออยู่บน CPU)
nagul

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