ทำไมเคอร์เนลและสุนัขเฝ้าบ้านใช้ซีพียูทั้งหมด?


3

ฉันใช้กระบวนการพื้นที่ผู้ใช้จำนวนมากบนเครื่อง Xeon อันทรงพลัง (ตัวประมวลผลเสมือน 32 ตัวตาม / proc / cpuinfo) โดยปกติโหลด CPU จะอยู่ที่ประมาณ 30 และเครื่องรู้สึกตอบสนอง แต่ต่อมาในกระบวนการพื้นที่ผู้ใช้อีกไม่กี่กระบวนการจะถูกแยกออกและพวกเขาจะจัดสรรหน่วยความจำจำนวนมากและทำการคำนวณอย่างเข้มข้นของ CPU ในเวลานั้นการโหลดจะเพิ่มขึ้นเป็นประมาณ 60-150 และเครื่องอยู่บนหัวเข่าของมัน

แต่เมื่อสิ่งนั้นเกิดขึ้น CPU ดูเหมือนว่าจะไม่ได้ถูกบริโภคโดยกระบวนการพื้นที่ของผู้ใช้ของฉันอีกต่อไป ดูผลลัพธ์จากด้านบนด้านล่าง

คำถาม:

สิ่งที่ทำให้สุนัขเฝ้าบ้านใช้ CPU มาก?

เป็นไปได้ไหมที่จะเดาว่าทำไมระบบถึงใช้ CPU ถึง 93.1% แทนที่จะประมวลผลพื้นที่ผู้ใช้ของฉัน

top - 13:58:49 up 44 days,  6:32, 11 users,  load average: 137.97, 64.80, 30.74
Tasks: 403 total,  48 running, 355 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.4%us, 93.1%sy,  0.0%ni,  0.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    258441M total,   257793M used,      647M free,     3243M buffers
Swap:    16383M total,        0M used,    16383M free,   239114M cached

  PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND
53921 me        20   0 1380m  88m  10m S    333  0.0   0:59.21 java
   40 root      RT   0     0    0    0 S     97  0.0  34:43.65 watchdog/8
   68 root      RT   0     0    0    0 S     93  0.0  27:57.92 watchdog/15
   52 root      RT   0     0    0    0 S     92  0.0  27:49.83 watchdog/11
   88 root      RT   0     0    0    0 S     82  0.0  37:38.22 watchdog/20
54041 me        20   0 1317m  82m  10m S     78  0.0   1:00.55 java
   24 root      RT   0     0    0    0 S     67  0.0  30:50.30 watchdog/4
 3460 root      20   0     0    0    0 S     55  0.0   4:44.01 afs_rxevent
  128 root      RT   0     0    0    0 S     53  0.0  38:39.29 watchdog/30
45245 root      20   0     0    0    0 R     53  0.0   1:25.40 kworker/2:0
  124 root      RT   0     0    0    0 S     50  0.0  36:14.85 watchdog/29
42623 root      20   0     0    0    0 R     49  0.0   3:24.94 kworker/1:0
55884 foo       20   0 34640  20m 7796 R     49  0.0   0:05.64 program1
53312 me        20   0 1388m 191m  10m S     48  0.1   1:25.89 java
44111 root      20   0     0    0    0 R     47  0.0   5:12.84 kworker/24:0
   86 root      20   0     0    0    0 R     43  0.0  26:00.48 kworker/20:0
55968 foo       20   0 34660  20m 7800 R     38  0.0   0:03.16 program1
55562 foo       20   0  193m  14m 5264 S     38  0.0   0:02.45 program2
   26 root      20   0     0    0    0 R     37  0.0  35:39.29 kworker/5:0
  344 root      20   0     0    0    0 R     33  0.0  32:38.50 kworker/29:1

> uname -a
Linux machine5 3.0.13-0.27-default #1 SMP Wed Feb 15 13:33:49 UTC 2012 (d73692b) x86_64 x86_64 x86_64 GNU/Linux

กระบวนการในคำถาม (java) กำลังถูกดำเนินการโดยคุณ เหตุใดจึงไม่เป็นพื้นที่ผู้ใช้
terdon

คำตอบ:


1

เมื่อแอปพลิเคชันของคุณออกการเรียกของระบบ [เช่นอ่าน (2)] เวลาที่ใช้โดยการเรียกระบบจะถูกคิดเป็น% sy ไม่ใช่พื้นที่ของผู้ใช้ แปลกที่คุณไม่มีพื้นที่สว็อปเลย คุณปิดใช้งานหรือไม่ พฤติกรรมที่คุณอธิบายสอดคล้องกับการกระจายตัวของหน่วยความจำเคอร์เนลซึ่งทำให้เคอร์เนลทำงานหนักขึ้นและหนักขึ้นเพื่อทำการจัดสรรหน่วยความจำแบบไดนามิกที่ใช้งานค่อนข้างหนัก

อย่าพึ่งพาเอาต์พุต (1) ด้านบน เมื่อสิ่งนี้เกิดขึ้นให้มองหา / proc / meminfo เพื่อค้นหาความจริง หาก Committed_AS เข้าใกล้หรือเกิน MemTotal คุณได้มีหน่วยความจำที่มีอยู่ในระบบและจำเป็นต้องเริ่มทำการแลกเปลี่ยน หาก Committed_AS เกินกว่า CommitLimit คุณได้ใช้พื้นที่หน่วยความจำกายภาพและพื้นที่สว็อปหมดแล้ว อย่างไรก็ตามก่อนที่คุณจะมาถึงจุดนี้การแสดงจะลดลงจากหน้าผาเช่นที่คุณอธิบายไว้

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