Bagaimana cara mendiagnosis penggunaan ballooning OS X kernel_task dan memori berkabel?

18

Saya memiliki masalah yang sangat aneh, yang saya mengalami kesulitan dalam mendiagnosis akar masalahnya.

Saya memiliki Mac Pro (2008, 8-core 2.8 GHz, 8800GT) dengan 14 GB RAM (baru-baru ini ditingkatkan karena masalah ini!).

Ketika saya mem-boot sistem saya dan masuk, vm_stat / top / Activity Monitor akan menunjukkan bahwa kernel_task memiliki sekitar 150 MB yang dialokasikan, dan mesin memiliki sekitar 800 MB memori Berkabel yang dialokasikan.

Bahkan pada awalnya, 800 MB tampaknya banyak sekali memori kabel yang harus dialokasikan tanpa aplikasi yang berjalan - tetapi, semakin buruk. (NB: Wired dikunci, memori tidak bisa diganti )

Setelah waktu yang sangat singkat, kadang-kadang dipicu oleh sesuatu yang sederhana seperti meluncurkan terminal, kernel_task akan menggelembung ke 8-900 MB Real Mem (RSIZE), dan Wired Memory akan mempercepat ke 1,6 GB (menyiratkan bahwa semua permintaan memori tambahan untuk RAM kabel dalam kernel).

Jika saya menghentikan semuanya (IE: tidak ada aplikasi yang sedang berjalan, batasi monitor aktivitas atau terminal untuk melihat atas), tidak ada pengurangan yang cukup baik dalam kernel_task RSIZE, atau penggunaan Memori Kabel. Sebaliknya, dan memuat sistem dengan tugas juga menunjukkan bahwa memori berkabel tidak berkurang - dan yang penting tidak berkurang dalam preferensi untuk swapping berat.

Jika saya keluar dan masuk kembali, itu mengurangi sedikit (450 MB kernel_task, 1.28 GB Wired), tetapi tidak kembali ke awal.

Saya tidak menjalankan s kext aneh - dan lebih jauh, kextstat tidak menunjukkan alokasi memori besar di sana; yang terbesar adalah com.apple.nvidia.nv50hal sekitar 4 MB Memory.

Mesin secara keseluruhan terasa lebih lamban ketika ini terjadi - tidak mengherankan karena sejumlah besar RAM telah ditandai sebagai non-pageable.

Jadi saya punya beberapa pertanyaan:

1) Apakah ada cara yang baik untuk mendiagnosis apa yang telah mengalokasikan semua memori berkabel ini? Ini sering lebih dari 2 kali ukuran kernel_task, tidak menjalankan aplikasi. Total memori sebenarnya tampaknya tidak bertambah - tampaknya ada banyak RAM yang tidak diperhitungkan di mana pun.

2) Apa yang terjadi yang menyebabkan kernel tiba-tiba membutuhkan memori 6 kali lebih banyak?

kenorb
sumber
1
Mungkin berhubungan dengan ini code.google.com/p/chromium/issues/detail?id=345664
jackkav

Jawaban:

5

Untuk menyelidiki mengapa kernel menggunakan lebih banyak memori dari biasanya, Anda dapat menggunakan alat yang berbeda.

  1. Jalankan Activity Monitor untuk memeriksa proses mana yang menggunakan sebagian besar memori, jadi itu adalah a kernel_task, bukan tugas lain yang menggunakan lebih banyak memori dari biasanya (kemudian pertimbangkan untuk mematikannya).
  2. Jalankan di Terminal vm_stat 1untuk melihat statistik memori real-time dan jika memori Anda benar-benar meningkat setiap detik.
  3. Jalankan fs_usage(sebagai root) alat untuk memonitor panggilan sistem dan kesalahan halaman secara real-time.
  4. Untuk memeriksa jumlah alokasi kotor / anonim dari banyak proses yang dijalankan di Terminal:

    sudo footprint -all -categories -swapped -collapseSharing
    

    Itu akan mengumpulkan informasi memori seperti berapa banyak itu ditukar (per pengguna atau memori kernel).

  5. Lebih jauh lagi, jika Anda pikir itu kernel yang menggunakan sebagian besar memori, coba zprintalat:

    sudo zprint -t -s | head -n20
    

    Ini akan menampilkan informasi tentang zona kernel

Jika Anda ingin memaksa cache disk dibersihkan (untuk membebaskan sebagian memori), Anda dapat mencoba:

sync && sudo purge

Lihat juga: Bagaimana menyelidiki penggunaan memori tugas kernel tinggi? di AD SE

kenorb
sumber
3

Ekstensi kernel hanyalah salah satu dari banyak, banyak, banyak fragmen kode yang dapat dieksekusi oleh sistem operasi tanpa sepengetahuan Anda. Saya memiliki utilitas berbasis Python kecil yang disebut Canary Konsultan yang akan membantu Anda menemukan beberapa di antaranya:

Jika itu tidak muncul penyebab potensial, maka saya akan mengatakan boot dari instalasi bersih dan lihat apakah Anda dapat mereproduksi masalah di sana.

Hasaan Chop
sumber