Bagaimana cara men-debug proses "kernel_task" di luar kendali?

42

Baru-baru ini saya memperhatikan daya tahan baterai saya mengalami penurunan yang cukup signifikan dan proses "kernel_task" menggunakan cukup banyak CPU (konstan 1-6% pada 2.8GHz dual-core i7, 2010 MBP). Jelas saya pikir penggunaan CPU kernel_task berkontribusi terhadap penurunan baterai dan saya perlu mencari tahu mengapa.

Mencari di Google, tampaknya kernel_task adalah versi Windows X "svchost.exe" dari OS X - proses melakukan segalanya yang terkenal yang tidak dapat Anda debug sepenuhnya, Anda harus secara manual membalik sakelar hingga salah satu di antaranya berfungsi.

Apakah ada cara saya dapat lebih mudah mencapai bagian bawah dari aktivitas kernel_task yang tidak terkendali? Saya belum mencoba reboot karena jika itu "memperbaikinya", itu tidak benar-benar memperbaiki masalah yang mendasarinya.

Activity Monitor menunjukkan penggunaan CPU. Ketika saya menekan Inspect, ini menunjukkan 77 utas, 2 port, jam dan jam waktu CPU, Konteks Beralih naik sekitar 400 per detik, dan Pesan Masuk dan Keluar Mach keduanya naik sekitar 6.000 per detik.

Bagaimana saya bisa memeriksa atau memonitor kernel_taskproses ini dan mencari tahu apa yang sebenarnya menggunakan semua kekuatan ini?

(catatan: tersangka saya saat ini adalah pembaruan 10.6.7 baru-baru ini, pembaruan Firefox dari 4 beta 10 ke RC, atau ScreenResX - ini adalah semua hal yang telah saya lakukan baru-baru ini yang dapat saya pikirkan)

Ricket
sumber
Saya tidak akan menggambarkan kernel_tasksebagai di luar kendali. Activity Monitor mungkin bukan utilitas terbaik untuk diagnosa di area ini. Di Konsol, tambahkan kueri log sistem untuk membantu Anda mengidentifikasi cara-cara di mana tugas kernel digunakan; kemudian perbaiki pertanyaan pembuka menjadi pertanyaan yang mungkin lebih mudah dijawab.
Graham Perrin
1
CPU 200% Konstan terdengar tidak terkendali untuk proses apa pun.
twe4ked

Jawaban:

12

Saya punya pertanyaan serupa tentang cara mengidentifikasi file dan program yang terhubung ke kernal_task menggunakan perintah terminal berikut:

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

Ini akan menampilkan berbagai kex dan memori yang terkait dengannya. Sebagai contoh, 6184960 com.apple.driver.AirPort.Brcm4360adalah babi besar bagi saya, tetapi saya tidak bisa berbuat banyak tentang hal itu jika saya ingin menggunakan wifi.

Salah satu saran yang saya terima adalah untuk mencari semua kex non-Apple yang mengambil memori dengan menyalurkan ke atas grep -v com.apple. Mungkin saja beberapa program non-Apple menggunakan sumber daya Anda. Anda harus dapat menghapusnya tanpa merusak apa pun.

Solusi lama tentu saja adalah me-restart komputer Anda. Terkadang hanya itu yang diperlukan untuk mengatur proses kembali ke tingkat normal penggunaan CPU.

intcreator
sumber
berapakah angka pada kolom pertama?
Anentropic
@Anentropic - coba man kextstat, lihat itu dan awkperintah ambil $4, sepertinya ukuran penggunaan memori kext. Masuk akal mempertimbangkan pertanyaan itu.
rebusB
11

Berikut ini penjelasan yang bagus tentang apa itu kernel_task. Itu bisa driver (kexts), jaringan atau aktivitas disk. Anda tidak bisa hanya menggunakan Instrumen untuk melampirkan ke kernel_taskproses.

Cari tanda-tanda lain, seperti log (Console.app), aktivitas disk (misalnya:), aktivitas iotop fs_usagejaringan (coba putuskan sambungan dari jaringan lokal, matikan perangkat di preferensi jaringan), cobalah untuk menghapus / menghapus dari kextunloaddriver memori ( ), yang berasal dari pihak ketiga - tablet, modem usb 3g, dll. Periksa aplikasi, yang memasang kunci tombol

Pastikan juga sistem file Anda tidak rusak, jika Anda baru saja crash - lakukan pemeriksaan.

mspasov
sumber
1
Saya memiliki ~ 200% penggunaan CPU (2 dari 4 core) hampir selalu, biasanya dimulai setelah boot ketika mentransfer file atau sesuatu yang serupa, tetapi tidak kembali normal setelah itu. Alasannya ternyata karena volume sistem saya perlu diperbaiki. Setelah itu dilakukan, kernel_taskkembali ke tingkat kegiatan yang waras.
Daniel Beck
1
Tautan dalam jawaban sudah mati
Swader
1
@Santa Terima kasih atas pengeditan yang disarankan terkait tautan, tetapi tidak ada gunanya menghapus tautan ketika ada versi di Wayback Machine. Ganti tautan dengan tautan ke Wayback Machine.
GRG
8

Seperti yang disebutkan oleh @Christopher, panas dapat menyebabkan CPU kernel_task lonjakan. Alasannya tercantum dalam posting ini "Memperbaiki" kernel_task Masalah CPU di MacOS Lion 10.7 . Rupanya ketika CPU memanaskan ACPI_SMC_PlatformPlugin.kext akan mengambil siklus CPU dalam upaya untuk mengurangi beban CPU yang sebenarnya.

Jadi salah satu solusinya adalah mendinginkan Mac Anda (mis. Kipas angin) melalui kipas eksternal atau sesuatu seperti SMCFanControl .

Artikel ini memberikan solusi lain yaitu menghapus sub-kext yang memicu perilaku itu. Meskipun saya harus mengakui bahwa saya pribadi tidak yakin tentang seberapa aman mematikan perilaku itu.

Studgeek
sumber
2
Saya akan menebak bahwa ini adalah alasan sebagian besar kernel_task membuat penggunaan CPU yang tinggi dan berkelanjutan. Setiap kali hal itu terjadi pada saya, saya menggunakan mesin saya cukup banyak dan itu akan mulai ketinggalan, tetapi tidak ada proses jelas yang saya gunakan menyebabkan lonjakan, hanya kernel_task. Matikan proses yang berat (video atau game, biasanya) dan akhirnya hilang. Sementara itu, MBP 2011 saya sepertinya akan lepas landas! Membukanya terbuka dan membersihkannya dengan baik, menghilangkan selimut debu di heatsink dan saya kembali berbisnis dengan kipas angin rendah dan tidak ada kernel_task gila.
Joey T
5

Biasanya di kernel_taskluar kendali ketika beberapa proses lain terlalu sering menggunakan panggilan sistem atau sumber daya (memori atau peristiwa I / O disk).

Ketika ini terjadi, Anda dapat menggunakan fs_usageutilitas pelaporan yang akan menunjukkan kepada Anda panggilan sistem dan kesalahan halaman yang terkait dengan aktivitas sistem file secara real-time.

Jadi jalankan perintah ini di Terminal:

sudo fs_usage

kemudian amati proses mana yang sering melakukan beberapa panggilan sistem dan jika Anda tidak menggunakannya, pertimbangkan untuk menutup / membunuh mereka.

Untuk lebih spesifik, silakan periksa kolom TIME INTERVAL yang memberi Anda waktu yang dihabiskan dalam panggilan sistem. Sebuah Wmuncul setelah waktu berlalu menunjukkan proses dijadwalkan keluar aktivitas (dalam hal waktu yang telah berlalu termasuk waktu tunggu).

Jadi untuk memfilter proses yang menggunakan interval waktu terbanyak dalam panggilan sistem, jalankan:

sudo fs_usage | grep -v 0.0000

yang akan menunjukkan kepada Anda di kolom terakhir proses paling lapar (dalam hal waktu kernel). Anda dapat menyesuaikan jumlah nol untuk presisi (lebih sedikit nol yang ditampilkan, lebih banyak waktu yang dihabiskan).

Untuk lebih banyak ide, periksa juga: Bagaimana cara menyelidiki penggunaan memori tugas kernel tinggi?


Berikut adalah masalah yang paling umum:

kenorb
sumber
2
Bagus arus keluaran yang masuk akal setelah memfilter iTerm2 dan grepsendiri:sudo fs_usage | grep -v -e '0.0000' -e 'iTerm2' -e 'grep'
Joel Purra
4

Saya mengalami lonjakan besar dalam penggunaan CPU kernel_task, dan ternyata kipas CPU saya dicabut sebagian. Kernel_task ada hubungannya dengan pelambatan CPU ketika terlalu panas. Dalam kasus Anda, mungkin kipas Anda hanya dilarutkan dengan sampah dan debu dan perlu dibersihkan.

Christopher
sumber
Itu gila! Apakah Anda pernah memeriksa log Anda ketika men-debug ini? Bagaimana Anda sampai pada solusi itu?
Ricket
3

Saya memiliki masalah yang sama di Yosemite tetapi berkat jiwa yang baik ini berdasarkan orang baik lain saya bisa menyelesaikannya. Saya masih tidak dapat memahami apa yang terjadi, tetapi setelah kehilangan seluruh akhir pekan mencoba menyelesaikannya, saya hanya menyerah dan secara membuta mengikuti instruksinya. Lihatlah keputusasaan saya dalam memantau aktivitas:

Semua cpu Anda adalah milik kami

Hati-hati, selalu lakukan pencadangan dulu dan baca tautan yang disediakan untuk penjelasan. Saya tidak bertanggung jawab atas kerusakan yang disebabkan. Anda sudah diperingatkan.

Temukan modelnya

$ system_profiler -detailLevel mini | grep "Pengidentifikasi Model:"

Pengidentifikasi Model: MacBookPro8,2

Pindahkan dan buat cadangan file

$ mkdir -p ~ / backup

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

$ sudo mv MacBookPro8_2.plist ~ / backup /

Seseorang masih menggunakan Anda MS-DOS
sumber
1
Solusi ini berhasil untuk saya. Saya memiliki versi MacBookPro yang sama. Sayangnya itu melibatkan menonaktifkan fungsi yang dirancang untuk meningkatkan umur panjang alat berat. Saya telah memeriksa fungsi suhu dan kipas CPU dan sepertinya normal, jadi saya berasumsi bahwa ada bug dalam fungsi ini, namun saya masih belum dapat memahami mengapa pendinginan pendingin CPU gagal dipicu (kadang-kadang dari sebelum masuk, tanpa akhir).
errant.info
@ errant.info karena suatu alasan El Captain menyelesaikannya. Mac saya dengan baterai yang salah juga, dan saya berubah dengan El Captain, jadi tidak tahu tindakan mana yang benar-benar diperbaiki. Semoga beruntung dengan mac Anda!
Seseorang masih menggunakan Anda MS-DOS
2

Saya menggunakan OSX Lion dengan macbook pro baru 2011, dan saya baru-baru ini menjalankan kernel_task sekitar 25-30% dari CPU dan kipas saya berputar maksimal selama berjam-jam. Saya mencoba satu hal pada satu waktu dan yang berhasil menyelesaikannya adalah ... menutup 5 atau 6 jendela di aplikasi Finder. Tidak bisa mengatakan saya mengerti mengapa, tapi jelas itu.

Jameson Quinn
sumber
2
Apakah Anda memiliki ekstensi untuk Finder diinstal? Misalnya, program yang menambahkan sesuatu ke bilah alat atau menu klik kanan (konteks)?
Ricket
1
Ini karena satu atau lebih dari jendela Anda mengaktifkan kotak centang "tampilkan semua ukuran" di konfigurasi 'Lihat-> Tampilkan Pilihan. Matikan itu, kemudian tetapkan sebagai default untuk semua folder dan akan berhenti.
Brian Topping
2

Di Mac saya, penggunaan CPU dari kernel_task sebanding dengan bandwidth internet yang saya gunakan, mulai dari sekitar 0% hingga 50%. Mungkin disebabkan oleh driver untuk modem 3G Huawei saya (HuaweiDataCardDriver.kext).

Anda dapat mencoba menonaktifkan ekstensi kernel. Tidak perlu menggunakan kextunload: aman untuk memindahkan bundel kext dari / System / Library / Extensions / ke beberapa folder lain dan restart. Anda dapat menggunakan Canary Konsultan atau kextstat | grep -v com.appleuntuk mendaftar ekstensi kernel yang tidak datang dengan OS X.

Lri
sumber
1

Untuk memecahkan masalah kernel_task yang tidak terkontrol secara khusus, berikut adalah beberapa perintah yang berguna:

  • Profil seluruh sistem, dengan fokus pada proses kernel (PID: 0), jalankan:

    sudo spindump 0 -reveal
    

    Untuk proses tertentu (seperti launchd), gunakan sample, misalnya sudo sample launchdatau dengan PID.

  • Untuk mengumpulkan konsumsi memori berdasarkan tugas kernel, gunakan (diurutkan berdasarkan kotor secara default):

    sudo footprint 0
    

    Catatan: Gunakan -auntuk menargetkan semua proses.

  • Untuk mengumpulkan seluruh sistem informasi diagnostik dari beberapa util, jalankan: sudo sysdiagnose.

    Ini juga bisa dipicu dengan menekan Shift- Control- - -. (periode).

    Anda akan melihat layar berkedip ketika dimulai, lalu tunggu beberapa menit hingga file terungkap di Finder .

    Lihat: Bagaimana Anda mendapatkan file diagnostik sistem dari OS X?

    Kemudian uncompress dan memeriksa file seperti footprint*.txt, spindump.txt, taskinfo.txt, bc_stats.txtdan lainnya.

  • Periksa vm.swapusagedalam kondisi kernel, mis sysctl -a | grep ^vm.swapusage.

    Pada dasarnya, lebih banyak swap yang Anda gunakan (periksa file swap /private/var/vmyang dikelola oleh dynamic_pager, lihat :)man dynamic_pager , semakin banyak kernel yang kesulitan dengan kinerja karena operasi Swapins / Swapouts (lihat dan ). Untuk menguji, jalankan:man vm_statman fs_usage

    vm_stat 1
    sudo fs_usage | grep -w kernel_task
    

    Catatan: Tekan Control- Cuntuk berhenti.

kenorb
sumber
0

Bagi saya, saya punya satu proses (Netbeans dalam kasus ini, yang membaca file seperti 20GB) dan itu akan menggunakan seperti cpu 80% untuk netbeans, 20% cpu untuk kernel_task (sangat mencurigakan). Ini menyebabkan seluruh sistem saya berjalan seperti tar.

Juga mencurigakan adalah bahwa "menumeters" akan melaporkan banyak waktu "sys", per cpu. Anda dapat melihat ini di perintah "atas" juga, sepertiCPU usage: 21.40% user, 23.74% sys

Kemudian, itu mungkin netbeans 120% cpu, kernel_task 65%, tetapi bagaimanapun mereka berdua "cpu tinggi pada saat yang sama"

sudo fs_usage menunjukkan banyak hal ini:

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

Teori saya adalah bahwa netbeans "membaca sangat banyak" sehingga menyebabkan kesalahan halaman untuk menjalankan programnya sendiri (yaitu mengirim untuk menukar programnya sendiri), sehingga mendapatkan antrian di belakang sistem kesalahan halaman. Dan mungkin menukar "program lain" untuk bertukar juga, menyebabkan seluruh sistem menjadi lemah.

Dengan menggunakan top, kolom FAULT meningkat sebesar 70 K / detik, juga.

rogerdpack
sumber
0

Macbook Pro saya hampir tidak dapat digunakan karena CPU_tinggi kernel_task selama berminggu-minggu. Pada saat yang sama baterai meningkat jadi saya akhirnya memutuskan untuk menggunakan Apple Center di Roma untuk menggantinya ... bahkan jika di luar garansi Apple telah mengganti baterai saya (dan keyboard juga) untuk biaya 0 €. Bahkan lebih baik ... masalah kernel_task tiba-tiba menghilang !!! jadi saya cukup yakin itu karena baterai, langsung atau tidak langsung

Luca Rocchi
sumber