Bagaimana cara menyelidiki penggunaan memori tugas kernel tinggi?

131

Saya menggunakan MBP saya (dengan 16GB RAM) seperti biasa dan tiba-tiba saya sudah popup ini bahwa:

Sistem Anda telah kehabisan memori aplikasi.

Untuk menghindari masalah dengan komputer Anda, keluar dari semua aplikasi yang tidak Anda gunakan.

Force Quit Applications - Sistem Anda kehabisan memori aplikasi - tangkapan layar

Saya jelas telah menutup beberapa yang saya bisa, tetapi itu tidak membantu.

Setelah memeriksa memori, tampaknya tugas kernel memakan 7GB dan memori swap 22.36GB digunakan dari total 23GB (yang jelas merupakan kasusnya). Namun saya masih memiliki 20GB ruang kosong di SDD saya.

Memory - iStat Menus - tangkapan layar

Activity Monitor tidak banyak membantu ketika OS X saya menuju kehancuran.

Penjelajah Proses

kernel_task - Memory tab - tangkapan layar kernel_task - Statistik tab - tangkapan layar

Saya topstatistik sebelum membekukan kernel saya:

Processes: 344 total, 2 running, 5 stuck, 337 sleeping, 2580 threads                                                                                                                         19:23:56
Load Avg: 1.56, 1.62, 2.09  CPU usage: 3.51% user, 8.47% sys, 88.1% idle   SharedLibs: 46M resident, 0B data, 6572K linkedit. MemRegions: 757970 total, 2139M resident, 56M private, 907M shared.
PhysMem: 9410M used (6198M wired), 556M unused. VM: 1155G vsize, 1311M framework vsize, 112872658(320) swapins, 122668389(0) swapouts. Networks: packets: 299419263/363G in, 142126838/14G out.
Disks: 58970173/1079G read, 20012389/1120G written.

Pada akhirnya OS X saya membeku dan saya harus melakukan hard reset, memperbaiki SDD saya dalam mode pemulihan dan memperbaiki sesudahnya (memulihkan pekerjaan yang hilang, memperbaiki konflik aplikasi, memeriksa folder yang hilang + ditemukan, tab Chrome / Terminal hilang, sakit kepala, dll. ).

Pertanyaan saya adalah, bagaimana cara memeriksa penggunaan memori yang tinggi dari tugas kernel atau bagaimana menangani dengan benar situasi seperti itu? Saya sudah mencoba mengambil Sampel dengan Activity Monitor, tetapi hasilnya berwarna abu-abu.


Rincian MBR saya: 2.3GHz Intel Core i7 (akhir 2013) dengan RAM 16GB. OS X: 10.9.5

kenorb
sumber
1
@klanomath Biasanya saya punya banyak pembekuan terutama dengan uptime yang lama dan ini hanya membeku kernel untuk alasan yang tidak diketahui (MBR saya cukup baru). Tapi ini yang pertama kali saya lihat bahwa popup saya kehabisan memori (dengan 16GB RAM dan 50GB ruang kosong). Namun pertanyaan utama saya adalah bagaimana saya menyelidiki penggunaan memori dari tugas kernel, jadi jika itu direproduksi seharusnya tidak relevan.
kenorb
5
Gunakan zprint -t(Singa) atau sudo zprint -t(Singa Gunung dan yang lebih baru).
klanomath
1
Anda benar dengan tidak relevannya reproduktifitas terkait pertanyaan Anda dalam judul, tetapi mungkin relevan untuk menyelesaikan masalah Anda.
klanomath
1
Maukah Anda menambahkan output ke pertanyaan Anda (atau menyimpannya ke dokumen Anda)? Hanya untuk referensi di masa mendatang / untuk dapat membandingkannya dengan zprint yang dibuat dalam kondisi sistem yang lebih kritis. IMHO itu kebocoran nasib buruk. Jika Anda mempostingnya, saya mungkin dapat memberi tahu Anda lebih banyak.
klanomath
1
Saya memiliki masalah yang sama tiba-tiba. Saya cukup yakin ini terkait dengan buruh pelabuhan untuk mac atau hyperkit. Segera setelah saya menghentikan buruh pelabuhan untuk mac, kernal_task mulai makan 10GB + memori
Charlie Martin

Jawaban:

176

Ada banyak hal yang salah dengan penggunaan tugas kernel yang tinggi. Biasanya ini terkait dengan proses yang salah atau berat yang menggunakan sumber daya sistem secara berlebihan (seperti penyimpanan indeks, menjalankan VM, terlalu banyak tab di browser web atau beberapa proses latar belakang lainnya).

Berikut adalah beberapa metode yang membantu untuk menyelidiki masalah penggunaan kernel OS X:

Metode dasar

  • Jalankan Console.appdan periksa ' Semua Pesan ' untuk melihat apakah sesuatu yang tidak biasa sedang terjadi.
  • Gunakan Activity Monitor untuk membaca memori sistem dan menentukan berapa banyak CPU, RAM dan Disk yang digunakan.

    Atau jalankan topdi Terminal dan tahan Spaceuntuk menyegarkan - lebih mudah untuk menemukan masalah penyebabnya ( swapins / swapouts / disk ?).

  • Jalankansudo fs_usage di Terminal untuk melaporkan panggilan sistem dan kesalahan halaman yang terkait dengan aktivitas sistem file secara real-time (saya pikir ini adalah pilihan terbaik dari yang lainnya). Lalu tekan Control- Cuntuk menghentikannya.

    Tindakan: Pertimbangkan untuk mematikan aplikasi yang sering muncul dalam daftar, tetapi Anda tidak menggunakannya.

    Pelajari lebih lanjut di: Bagaimana cara men-debug proses "kernel_task" di luar kendali?

  • Jalankansudo syscallbypid.d (atau syscallbyproc.d), tunggu sebentar, tekan Control- C. Sekarang periksa proses mana yang menghasilkan paling banyak panggilan sistem dalam waktu tertentu (kolom terakhir) dan jika Anda mengenalinya, pertimbangkan untuk membunuhnya. Jika tidak, cari di Google dan pelajari lebih lanjut.

Metode lanjutan

  • Gunakan sysdiagnoseperintah (dapat dipicu dengan menekan Shift- Control- - - .(periode) untuk dengan cepat mengumpulkan informasi diagnostik di seluruh sistem yang membantu dalam menyelidiki masalah memori / kinerja sistem (akan muncul di /var/tmp) baik oleh Anda atau orang Apple. Selama analisis, cobalah untuk tidak melakukan apa saja, ketika dilakukan - pertimbangkan untuk mengompresi file yang dihasilkan dan menganalisis log.

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

  • Jalankan footprintuntuk mengumpulkan informasi memori terperinci pada level tipe per-VM-region dan bertukar byte:

    sudo footprint -a
    

    Versi yang lebih lama:

    sudo footprint -all -categories -swapped -collapseSharing
    
  • Gunakan spindumpuntuk profil seluruh sistem, itu akan menghasilkan /tmp/spindump.txtfile (termasuk kernel dan ekstensinya).

  • Gunakan vm_statuntuk menampilkan statistik memori virtual. Misalnya

    vm_stat 1 # to display every second.
    
  • Gunakan zprintuntuk memeriksa informasi tentang penggunaan kernel, dimungkinkan dengan:

    sudo zprint -t -s | head -n20
    

    Ini akan menampilkan zona kernel paling banyak.

  • Gunakan newproc.duntuk mengintip proses baru saat dijalankan, creatbyproc.duntuk file:

    sudo newproc.d
    sudo creatbyproc.d
    

    Catatan: Pada OS X yang lebih baru (10.11 atau lebih tinggi) ini mungkin tidak berfungsi ketika perlindungan integritas diaktifkan (centang oleh csrutil status).

  • sarReporter aktivitas sistem coba yang dapat mengambil sampel dan melaporkan berbagai penghitung statistik kumulatif yang dikelola oleh sistem operasi.

Untuk alat debugging yang lebih berguna, periksa skrip dtrace ( grep dtrace /usr/bin/*). Jika Anda mengetahui proses yang salah yang menyebabkan masalah, Anda dapat menggunakannya dtrussuntuk debug itu.


Tindakan

Berikut adalah beberapa saran yang dapat membantu Anda dengan masalah sistem operasi.

  • Bebaskan beberapa memori tidak aktif. Untuk melakukan ini, Anda harus membersihkan cache terlebih dahulu dan memaksa cache disk dibersihkan:

    sync && sudo purge
    

    sync - memaksa penyelesaian penulisan pending disk (flush cache)

    purge - memaksa cache disk dibersihkan (dibilas dan dikosongkan)

    Fungsinya pada dasarnya untuk menghentikan semua operasi yang tertunda I / O yang menggunakan cache disk dan kemudian untuk membebaskan semua cache disk yang ditempati, sehingga seharusnya membebaskan ruang disk untuk memudahkan paging out dan menukar memori utama. Aman digunakan, karena tidak memengaruhi memori anonim yang telah dialokasikan melalui malloc, vm_allocate, dll.

  • Gunakan beberapa aplikasi pihak ke-3 untuk menghapus beberapa memori yang terlalu sering digunakan seperti iBoostUp , SystemPal , dll.

  • Anda juga dapat menonaktifkan Spotlight sementara:

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist 
    

    Dan pertimbangkan layanan lain dengan:

    sudo launchctl list | grep ^[0-9]
    sudo launchctl bslist | grep ^A
    
  • Tutup browser web Anda dan periksa apakah itu membantu. Misalnya menggunakan Chrome sangat banyak akal, terutama ketika ada beberapa proses front-end yang terjadi di latar belakang (misalnya Javascript) atau animasi seperti iklan yang terus-menerus merender konten.

kenorb
sumber
1
Spotlight terus menerapkan kembali, tapi saya tidak menggunakannya, dan setiap kali saya membunuhnya muncul kembali setelah kedua ... Bagaimana saya harus lakukan saya menyingkirkannya?
ling
1
@ling Saya menyarankan Anda untuk mengajukan pertanyaan lain, karena ini terkait dengan memori tugas kernel tinggi, bukan Spotlight spesifik.
kenorb
2
desah saya punya ram 4 GB di mac saya, dan baru-baru ini tugas kernel naik menjadi 3,1 GB, pada dasarnya membekukan seluruh komputer saya. Tutup tab Google Drive saya, dan turun menjadi 950 MB ...
Zizouz212
3
Tidak cukup spesifik untuk benar-benar menyelesaikan masalah penggunaan kernel_taskmemori & cpu yang tinggi .
hyiltiz
6

Saya memiliki masalah yang sangat mirip setelah mengganti layar LCD saya pada iMac 2012 akhir. Fan berjalan pada RPM tinggi dan memiliki penggunaan CPU Kernel_task yang tinggi. Saya mempersempitnya ke sensor suhu Anda harus pindah dari layar LCD lama ke layar pengganti baru. jika Anda lupa melakukannya, kecepatan CPU dan Kernel_task terpengaruh memperlambat sistem Anda.

pakis10
sumber