ฉันจะดีบักกระบวนการ“ kernel_task” ที่ไม่อยู่ในการควบคุมได้อย่างไร


42

เมื่อเร็ว ๆ นี้ฉันสังเกตเห็นว่าอายุการใช้งานแบตเตอรี่ของฉันลดลงอย่างมีนัยสำคัญและกระบวนการ "kernel_task" ใช้ซีพียูสักเล็กน้อย (ค่าคงที่ 1-6% สำหรับ 2.8ghz dual-core i7, 2010 MBP) เห็นได้ชัดว่าฉันคิดว่าการใช้งาน CPU ของ kernel_task มีส่วนทำให้แบตเตอรี่ตกและฉันต้องการทราบสาเหตุ

การค้นหา Google ดูเหมือนว่า kernel_task เป็นรุ่น "svchost.exe" ของ Windows OS ซึ่งเป็นกระบวนการทำทุกอย่างที่มีชื่อเสียงที่คุณไม่สามารถแก้ไขข้อบกพร่องได้อย่างแท้จริงคุณจะต้องสลับสวิตช์ด้วยตนเองจนกว่าจะทำงานอย่างใดอย่างหนึ่ง

มีวิธีใดบ้างที่ฉันจะสามารถเข้าถึงกิจกรรม kernel_task ที่อยู่นอกการควบคุมได้ง่ายกว่าหรือไม่ ฉันยังไม่ได้ลองรีบูตเพราะถ้าหาก "แก้ไข" มันไม่ได้แก้ไขปัญหาพื้นฐาน

การตรวจสอบกิจกรรมแสดงการใช้งาน CPU เมื่อฉันกดตรวจสอบจะแสดง 77 เธรด 2 พอร์ตชั่วโมงและชั่วโมงของเวลา CPU สวิตช์บริบทจะเพิ่มขึ้นประมาณ 400 ต่อวินาทีและ Mach Messages In and Out ทั้งสองขึ้นไปที่ 6,000 ต่อวินาที

ฉันจะตรวจสอบหรือติดตามkernel_taskกระบวนการนี้ได้อย่างไรและหาว่าอะไรที่ใช้พลังงานทั้งหมดนี้จริง ๆ

(หมายเหตุ: ผู้ต้องสงสัยในปัจจุบันของฉันคือการอัปเดตล่าสุด 10.6.7, Firefox อัปเดตจาก 4 เบต้า 10 เป็น RC หรือ ScreenResX - นี่คือทุกสิ่งที่ฉันทำเมื่อเร็ว ๆ นี้ที่ฉันนึกถึง)


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

1
ซีพียูคงที่ 200% ฟังก์ชั่นการควบคุมค่อนข้างดี
twe4ked

คำตอบ:


12

ฉันมีคำถามคล้ายกันเกี่ยวกับวิธีระบุไฟล์และโปรแกรมที่เชื่อมต่อกับ kernal_task โดยใช้คำสั่งเทอร์มินัลต่อไปนี้:

kextstat -l -k | awk '{n = sprintf("%d", $4); print n, $6}' | sort -n

นี่จะแสดง kexts ต่างๆและหน่วยความจำที่เกี่ยวข้อง ตัวอย่างเช่น6184960 com.apple.driver.AirPort.Brcm4360เป็นหมูตัวใหญ่สำหรับฉัน แต่ฉันไม่สามารถทำอะไรได้มากถ้าฉันต้องการใช้ wifi

หนึ่งในข้อเสนอแนะที่ฉันได้รับคือการมองขึ้นทั้งหมดไม่ใช่แอปเปิ้ล kexts grep -v com.appleมีการขึ้นหน่วยความจำโดยท่อด้านบนเพื่อ เป็นไปได้ว่าบางโปรแกรมที่ไม่ใช่ของ Apple กำลังใช้ทรัพยากรของคุณจนหมด คุณควรจะลบออกโดยไม่ทำลายอะไรเลย

วิธีแก้ปัญหาอายุแบบเก่าคือการรีสตาร์ทคอมพิวเตอร์ของคุณ บางครั้งนั่นคือทั้งหมดที่ใช้เพื่อตั้งค่ากระบวนการกลับสู่ระดับปกติของการใช้งาน CPU


หมายเลขในคอลัมน์แรกคืออะไร
Anentropic

@Anentropic - ลองman kextstatดูที่awkคำสั่งและการจับคำสั่ง$4จะดูเหมือนว่าขนาดของการใช้หน่วยความจำ kext ทำให้รู้สึกพิจารณาคำถาม
rebusB

11

นี่คือคำอธิบายที่ดีว่า kernel_task คืออะไร อาจเป็นไดรเวอร์ (kexts) เครือข่ายหรือกิจกรรมดิสก์ คุณไม่สามารถใช้เครื่องมือเพื่อแนบกับkernel_taskกระบวนการได้

ค้นหาสัญญาณอื่น ๆ เช่นล็อก (Console.app) กิจกรรมดิสก์ (ตัวอย่างเช่นiotop fs_usage:) กิจกรรมเครือข่าย (ลองยกเลิกการเชื่อมต่อจากเครือข่ายท้องถิ่นปิดอุปกรณ์ในการตั้งค่าเครือข่าย) ลองถอนการติดตั้ง / ลบจากkextunloadไดรเวอร์หน่วยความจำ ( ) มาจากบุคคลที่สาม - แท็บเล็ตโมเด็ม usb 3g และอื่น ๆ ตรวจสอบแอปพลิเคชันที่กำลังติดตั้ง kexts

ตรวจสอบให้แน่ใจด้วยว่าระบบไฟล์ของคุณไม่เสียหายหากคุณเพิ่งเกิดข้อขัดข้องเมื่อเร็ว ๆ นี้ให้ทำการตรวจสอบ


1
ฉันมีการใช้งาน CPU ประมาณ 200% (2 ใน 4 คอร์) เกือบตลอดเวลาโดยปกติจะเริ่มหลังจากบูตเมื่อทำการถ่ายโอนไฟล์หรือสิ่งอื่นที่คล้ายกัน แต่ไม่กลับมาเป็นปกติหลังจากนั้น เหตุผลกลับกลายเป็นว่าปริมาณระบบของฉันต้องการการซ่อมแซม เมื่อทำเสร็จแล้วkernel_taskก็กลับสู่ระดับสติปัญญาของกิจกรรม
Daniel Beck

1
ลิงก์ในคำตอบตอนนี้ตายแล้ว
Swader

1
@Santa ขอบคุณสำหรับการแก้ไขที่แนะนำเกี่ยวกับลิงค์ แต่ไม่มีจุดที่จะลบลิงค์เมื่อมีเวอร์ชันอยู่บนเครื่อง Wayback แทนที่ลิงค์ด้วยลิงค์ไปยังเครื่อง Wayback
grg

8

ตามที่ระบุไว้โดย @Christopher ความร้อนสามารถทำให้ kernel_task CPU ขัดขวางได้ เหตุผลก็คือการระบุไว้ในโพสต์นี้“แก้ไข” ปัญหา kernel_task CPU ใน MacOS 10.7 เห็นได้ชัดว่าเมื่อ CPU ร้อน ACPI_SMC_PlatformPlugin.kext จะใช้รอบของ CPU ในความพยายามที่จะลดภาระของ CPU ที่แท้จริง

ดังนั้นหนึ่งในการแก้ปัญหาคือจะเย็นลง Mac ของคุณ (เช่นพัดลม) ผ่านแฟนภายนอกหรือสิ่งที่ต้องการSMCFanControl

บทความให้วิธีแก้ไขปัญหาอื่นซึ่งเป็นการลบ sub-kext ที่ทริกเกอร์ลักษณะการทำงานนั้น แม้ว่าฉันจะต้องยอมรับว่าส่วนตัวแล้วฉันไม่แน่ใจเกี่ยวกับความปลอดภัยที่จะปิดพฤติกรรมนั้น


2
ฉันจะเสี่ยงต่อการเดาว่านี่คือเหตุผลส่วนใหญ่ของ kernel_task ทำให้การใช้งาน CPU สูงอย่างต่อเนื่อง ทุกครั้งที่มันเกิดขึ้นกับฉันฉันกำลังใช้เครื่องของฉันค่อนข้างหนักและมันจะเริ่มล้าหลัง แต่ไม่มีกระบวนการใดที่ชัดเจนที่ฉันใช้กำลังก่อให้เกิดความเสียหาย แต่ kernel_task ปิดกระบวนการที่หนัก (วิดีโอหรือเกมโดยทั่วไป) และในที่สุดมันก็จะหายไป ในขณะเดียวกัน 2011 MBP ของฉันฟังดูเหมือนกำลังจะถูกยกเลิก! แตกมันเปิดและให้มันสะอาดดีลบผ้าห่มฝุ่นบนฮีทซิงค์และฉันกลับมาทำธุรกิจกับแฟนน้อยและไม่มี kernel_task บ้า
Joey T

5

โดยปกติแล้วจะkernel_taskอยู่นอกการควบคุมเมื่อบางกระบวนการอื่นใช้การเรียกระบบหรือทรัพยากรมากเกินไป (หน่วยความจำหรือเหตุการณ์ I / O ดิสก์)

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

ดังนั้นให้เรียกใช้คำสั่งนี้ใน Terminal:

sudo fs_usage

จากนั้นให้สังเกตว่ากระบวนการใดบ้างที่ใช้ทำการเรียกระบบบางครั้งและหากคุณไม่ได้ใช้งานให้ลองปิด / ปิดมัน

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

ดังนั้นเพื่อกรองกระบวนการที่ใช้ช่วงเวลาส่วนใหญ่ในการเรียกระบบให้เรียกใช้:

sudo fs_usage | grep -v 0.0000

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

สำหรับแนวคิดเพิ่มเติมให้ตรวจสอบ: วิธีการตรวจสอบการใช้งานหน่วยความจำเคอร์เนลสูง


นี่คือปัญหาที่พบบ่อยที่สุด:


2
ดีสตรีมเอาต์พุตที่สมเหตุสมผลหลังจากกรองiTerm2และgrepตัวเอง:sudo fs_usage | grep -v -e '0.0000' -e 'iTerm2' -e 'grep'
Joel Purra

4

ฉันมีขนาดใหญ่มากในการใช้งาน CPU_ kernel และมันกลับกลายเป็นว่าแฟน CPU ของฉันไม่ได้เสียบปลั๊กบางส่วน kernel_task มีส่วนเกี่ยวข้องกับการควบคุมปริมาณของซีพียูเมื่อมันร้อนเกินไป ในกรณีของคุณแฟนของคุณอาจถูกขยะและฝุ่นและต้องทำความสะอาด


มันบ้ามาก! คุณเคยตรวจสอบบันทึกของคุณเมื่อทำการดีบักหรือไม่ คุณมาถึงวิธีการแก้ปัญหานั้นได้อย่างไร?
Ricket

3

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

ซีพียูทั้งหมดของคุณเป็นของเรา

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

ค้นหาแบบจำลอง

$ system_profiler -detailLevel mini | grep "ตัวระบุรุ่น:"

ตัวระบุรุ่น: MacBookPro8,2

ย้ายและสำรองไฟล์

$ mkdir -p ~ / backup

$ cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources

$ sudo mv MacBookPro8_2.plist ~ / backup /


1
วิธีนี้ใช้ได้ผลสำหรับฉัน ฉันมี MacBookPro รุ่นเดียวกัน น่าเสียดายที่มันเกี่ยวข้องกับการปิดการใช้งานฟังก์ชั่นที่ออกแบบมาเพื่อเพิ่มอายุการใช้งานของเครื่อง ฉันได้ตรวจสอบการทำงานของ CPU และพัดลมและดูเหมือนว่าเป็นเรื่องปกติดังนั้นฉันจึงสันนิษฐานว่ามีข้อผิดพลาดในการทำงานนี้ แต่ฉันยังไม่สามารถไปถึงจุดต่ำสุดได้ว่าเหตุใดการระบายความร้อนของ CPU ที่ไม่ปลอดภัยเกิดขึ้น ก่อนเข้าสู่ระบบไม่มีสิ้นสุด)
errant.info

@ errant.info ด้วยเหตุผลบางอย่าง El Captain แก้ไขได้ แม็คของฉันใช้แบตเตอรี่ที่มีข้อบกพร่องเช่นกันและฉันเปลี่ยนเป็น El Captain ดังนั้นไม่ทราบว่าการแก้ไขใดที่แก้ไขจริง ขอให้โชคดีกับ mac ของคุณ!
บางคนยังใช้ MS-DOS เมื่อ

2

ฉันใช้ OSX Lion พร้อม macbook pro 2011 ใหม่และเมื่อเร็ว ๆ นี้ฉันมี kernel_task ทำงานประมาณ 25-30% ของซีพียูและแฟน ๆ ของฉันหมุนได้สูงสุดเป็นเวลาหลายชั่วโมง ฉันลองครั้งละหนึ่งครั้งและสิ่งที่แก้ไขได้คือ ... ปิดหน้าต่าง 5 หรือ 6 หน้าต่างในแอป Finder ไม่สามารถพูดว่าฉันเข้าใจว่าทำไม แต่เห็นได้ชัดว่า


2
คุณมีส่วนขยายใด ๆ สำหรับ Finder ติดตั้งอยู่หรือไม่ ตัวอย่างเช่นโปรแกรมที่เพิ่มบางอย่างลงในแถบเครื่องมือหรือเมนูคลิกขวา (บริบท)
Ricket

1
นี่เป็นเพราะหน้าต่างของคุณอย่างน้อยหนึ่งตัวมีการเปิดใช้งานช่องทำเครื่องหมาย "แสดงทุกขนาด" ในการกำหนดค่า 'ดู -> แสดงตัวเลือกมุมมอง "ปิดนั้นจากนั้นตั้งเป็นค่าเริ่มต้นสำหรับโฟลเดอร์ทั้งหมดและจะหยุดทำงาน
Brian Topping

2

ใน Mac ของฉันการใช้ CPU ของ kernel_task เป็นสัดส่วนกับแบนด์วิดท์อินเทอร์เน็ตที่ฉันใช้อยู่ตั้งแต่ประมาณ 0% ถึง 50% อาจเกิดจากไดรเวอร์สำหรับโมเด็ม Huawei 3G ของฉัน (HuaweiDataCardDriver.kext)

คุณสามารถลองปิดการใช้งานส่วนขยายเคอร์เนล ไม่จำเป็นต้องใช้ kextunload: ปลอดภัยที่จะย้ายบันเดิล kext จาก / System / Library / Extensions / ไปยังโฟลเดอร์อื่นแล้วรีสตาร์ท คุณสามารถใช้Canary's Consultantหรือkextstat | grep -v com.appleเพื่อแสดงรายการส่วนขยายเคอร์เนลที่ไม่ได้มาพร้อมกับ OS X


1

ในการแก้ปัญหาkernel_task ที่ไม่อยู่ในการควบคุมโดยเฉพาะนี่คือคำสั่งที่มีประโยชน์:

  • ทำโปรไฟล์ทั้งระบบโดยมุ่งเน้นที่กระบวนการเคอร์เนล (PID: 0) ให้รัน

    sudo spindump 0 -reveal
    

    สำหรับกระบวนการเฉพาะ (เช่นlaunchd) ให้ใช้sampleเช่นsudo sample launchdหรือโดย PID

  • ในการรวบรวมการใช้หน่วยความจำโดยงานเคอร์เนลให้ใช้ (เรียงลำดับโดยสกปรกตามค่าเริ่มต้น):

    sudo footprint 0
    

    หมายเหตุ: ใช้-aเพื่อกำหนดเป้าหมายกระบวนการทั้งหมด

  • เพื่อรวบรวมข้อมูลการวินิจฉัยทั้งระบบจาก utils sudo sysdiagnoseหลายทำงาน:

    สิ่งนี้สามารถถูกเรียกใช้โดยการกดปุ่มShift- Control- - -. (จุด)

    คุณจะเห็นหน้าจอประกายเมื่อเริ่มต้นแล้วรอไม่กี่นาทีจนกว่าไฟล์จะถูกเปิดเผยในFinder

    ดู: คุณจะรับไฟล์วินิจฉัยระบบจาก OS X ได้อย่างไร

    แล้วยกเลิกการบีบอัดและการตรวจสอบไฟล์เช่นfootprint*.txt, spindump.txt, taskinfo.txt, bc_stats.txtและอื่น ๆ

  • ตรวจสอบในรัฐเคอร์เนลเช่นvm.swapusagesysctl -a | grep ^vm.swapusage

    โดยทั่วไปยิ่งคุณใช้ swap มากขึ้น (ตรวจสอบไฟล์สลับ/private/var/vmที่จัดการโดยdynamic_pagerดูที่:)man dynamic_pagerยิ่งเคอร์เนลดิ้นรนกับประสิทธิภาพมากขึ้นเนื่องจากการทำงานของSwapins / Swapouts (ดูman vm_statและman fs_usage) ในการทดสอบให้เรียกใช้:

    vm_stat 1
    sudo fs_usage | grep -w kernel_task
    

    หมายเหตุ: กดControl- Cเพื่อหยุด


0

สำหรับฉันฉันมีหนึ่งกระบวนการ (Netbeans ในกรณีนี้ซึ่งกำลังอ่านไฟล์เช่น 20GB) และมันจะใช้เช่น 80% cpu สำหรับ netbeans, 20% cpu สำหรับ kernel_task (น่าสงสัยมาก) นี่ทำให้ระบบทั้งหมดของฉันทำงานเหมือนกลาสีเรือ

ที่น่าสงสัยก็คือ "menumeters" จะรายงานเวลา "sys" จำนวนมากต่อซีพียู คุณสามารถเห็นสิ่งนี้ได้ในคำสั่ง "top" เช่นกันCPU usage: 21.40% user, 23.74% sys

ต่อมามันอาจจะเป็นเน็ตบุ๊ก 120% cpu, kernel_task 65% แต่อย่างไรก็ตามทั้งคู่ก็เป็น "ซีพียูสูงในเวลาเดียวกัน"

sudo fs_usage พบสิ่งนี้มากมาย:

12:46:34.446367  PAGE_IN_FILE      A=0x093a5bb000       0.000001   java.453214

ทฤษฎีของฉันคือ netbeans "อ่านมาก" ว่ามันทำให้เกิดความผิดพลาดของหน้าเพื่อเรียกใช้โปรแกรมของตัวเอง (เช่นการส่งออกเพื่อแลกเปลี่ยนโปรแกรมของตัวเอง) ดังนั้นรับคิวหลังระบบความผิดหน้า และอาจสลับ "โปรแกรมอื่น" ออกเพื่อสลับเช่นกันทำให้ทั้งระบบเลื่อนลง

การใช้topคอลัมน์ FAULT ก็เพิ่มขึ้น 70K / วินาทีเช่นกัน


0

macbook Pro ของฉันเกือบจะใช้ไม่ได้เพราะ kernel_task CPU สูงเป็นเวลาหลายสัปดาห์ในเวลาเดียวกันแบตเตอรี่ก็สูงขึ้นดังนั้นในที่สุดฉันก็ตัดสินใจไปที่ Apple Center ในกรุงโรมเพื่อแทนที่ ... แม้ว่าการรับประกัน Apple จะเปลี่ยนแบตเตอรี่ของฉันแล้ว (และ แป้นพิมพ์เช่นกัน) สำหรับค่าใช้จ่าย 0 € ยิ่งกว่านั้น ... ปัญหา kernel_task ก็หายไปทันที !!! ดังนั้นฉันค่อนข้างแน่ใจว่าเป็นเพราะแบตเตอรี่ไม่ว่าทางตรงหรือทางอ้อม

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