Làm cách nào để chẩn đoán sử dụng kernel_task và bộ nhớ có dây OS X?


18

Tôi có một vấn đề rất lạ, đó là tôi đang gặp khó khăn trong việc chẩn đoán nguyên nhân gốc rễ.

Tôi có Mac Pro (2008, 8 lõi 2.8 GHz, 8800GT) với 14 GB RAM (gần đây đã được nâng cấp vì vấn đề này!).

Khi tôi khởi động hệ thống của mình và đăng nhập, vm_stat / top / Activity Monitor sẽ hiển thị rằng kernel_task có khoảng 150 MB được phân bổ và máy có khoảng 800 MB bộ nhớ có dây được phân bổ.

Ngay cả ban đầu, 800 MB có vẻ như rất nhiều bộ nhớ có dây được phân bổ mà không có ứng dụng nào chạy - nhưng, nó còn tệ hơn. (NB: Có dây bị khóa, bộ nhớ không thể tải được)

Sau một thời gian rất ngắn, đôi khi được kích hoạt bởi một thứ đơn giản như khởi chạy một thiết bị đầu cuối, kernel_task sẽ tăng tốc lên 8-900 MB Real Mem (RSIZE) và Bộ nhớ có dây sẽ tăng tốc lên 1.6 GB (ngụ ý rằng tất cả các yêu cầu bộ nhớ bổ sung đều dành cho RAM có dây trong kernel).

Nếu tôi thoát mọi thứ (IE: không có ứng dụng đang chạy, bỏ qua trình theo dõi hoạt động hoặc thiết bị đầu cuối để xem trên cùng), sẽ không có sự giảm đáng kể nào trong việc sử dụng kernel_task RSIZE hoặc sử dụng Bộ nhớ có dây. Đi ngược lại và tải hệ thống với các tác vụ cũng cho thấy bộ nhớ có dây không bị giảm - và điều quan trọng là nó không bị giảm sự ưu tiên đối với trao đổi nặng.

Nếu tôi đăng xuất và đăng nhập lại, nó sẽ giảm một chút (450 MB kernel_task, 1,28 GB có dây), nhưng không quay lại từ đầu.

Tôi không chạy bất kỳ kext s nào - và hơn nữa, kextstat cho thấy không có sự phân bổ bộ nhớ lớn ở đó; lớn nhất là com.apple.nvidia.nv50hal với khoảng 4 MB Bộ nhớ.

Máy cảm thấy chậm chạp hơn khi điều này xảy ra - không có gì đáng ngạc nhiên vì một lượng RAM khổng lồ như vậy đã được đánh dấu là không thể phân trang.

Vì vậy, tôi có một vài câu hỏi:

1) Có cách nào tốt để chẩn đoán những gì đã phân bổ tất cả bộ nhớ có dây này không? Nó thường lớn hơn 2 lần kích thước kernel_task, không chạy ứng dụng. Tổng bộ nhớ thực dường như không tăng lên - dường như có một loạt RAM không được tính ở bất cứ đâu.

2) Điều gì đang xảy ra khiến kernel đột nhiên cần bộ nhớ gấp 6 lần?


1
Có khả năng liên quan đến này code.google.com/p/chromium/issues/detail?id=345664
jackkav

Câu trả lời:


5

Để điều tra lý do tại sao kernel sử dụng nhiều bộ nhớ hơn bình thường, bạn có thể sử dụng các công cụ khác nhau.

  1. Chạy Activity Monitor để kiểm tra quá trình nào sử dụng hầu hết bộ nhớ, do đó kernel_task, đó không phải là bất kỳ tác vụ nào khác sử dụng nhiều bộ nhớ hơn bình thường (sau đó xem xét việc tiêu diệt nó).
  2. Chạy trong Terminal vm_stat 1để xem số liệu thống kê bộ nhớ thời gian thực và nếu bộ nhớ của bạn thực sự tăng lên mỗi giây.
  3. Chạy fs_usagecông cụ (như root) để theo dõi các cuộc gọi hệ thống và lỗi trang trong thời gian thực.
  4. Để kiểm tra tổng phân bổ bẩn / ẩn danh của nhiều quy trình chạy trong Terminal:

    sudo footprint -all -categories -swapped -collapseSharing
    

    Nó sẽ thu thập thông tin bộ nhớ như nó đã được hoán đổi bao nhiêu (trên mỗi người dùng hoặc bộ nhớ kernel).

  5. Hơn nữa, nếu bạn nghĩ rằng đó là kernel đang sử dụng hầu hết bộ nhớ, hãy thử zprintcông cụ:

    sudo zprint -t -s | head -n20
    

    Nó sẽ hiển thị thông tin về các vùng kernel

Nếu bạn muốn buộc xóa bộ nhớ cache của đĩa (để giải phóng bộ nhớ), bạn có thể thử:

sync && sudo purge

Xem thêm: Làm thế nào để điều tra việc sử dụng bộ nhớ kernel cao? tại AD SE


3

Các phần mở rộng kernel chỉ là một trong rất nhiều, rất nhiều đoạn mã có thể được hệ điều hành thực thi mà bạn không biết. Tôi có một tiện ích dựa trên Python nhỏ gọi là Canary Consulting sẽ giúp bạn tìm thấy một vài trong số chúng:

Nếu điều đó không xuất hiện bất kỳ thủ phạm tiềm năng nào, thì tôi sẽ nói khởi động từ một bản cài đặt sạch và xem liệu bạn có thể tái tạo vấn đề ở đó không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.