Làm cách nào để gỡ lỗi một quy trình kernel_task ra ngoài tầm kiểm soát?


42

Gần đây tôi nhận thấy tuổi thọ pin của tôi giảm đáng kể và quá trình "kernel_task" sử dụng khá nhiều CPU (không đổi 1-6% trên i7 lõi ​​kép 2,87z của tôi, 2010 MBP). Rõ ràng tôi nghĩ rằng việc sử dụng CPU của kernel_task đang góp phần làm giảm pin và tôi cần tìm hiểu lý do tại sao.

Tìm kiếm trên Google, có vẻ như kernel_task là phiên bản "svchost.exe" của OS X - quy trình làm mọi thứ khét tiếng mà bạn không thể gỡ lỗi thực sự, bạn phải lật công tắc cho đến khi một trong số chúng hoạt động.

Có cách nào tôi có thể dễ dàng đi đến tận cùng của hoạt động kernel_task ngoài tầm kiểm soát không? Tôi đã không thử khởi động lại bởi vì nếu nó "khắc phục" nó, thì nó không thực sự khắc phục được vấn đề tiềm ẩn.

Giám sát hoạt động cho thấy việc sử dụng CPU. Khi tôi nhấn Inspect, nó hiển thị 77 luồng, 2 cổng, giờ và giờ CPU, Chuyển mạch ngữ cảnh tăng khoảng 400 mỗi giây và Mach Message In và Out đều tăng khoảng 6.000 mỗi giây.

Làm thế nào tôi có thể bằng cách nào đó kiểm tra hoặc giám sát kernel_taskquá trình này và tìm ra những gì thực sự sử dụng tất cả sức mạnh này?

(lưu ý: các nghi phạm hiện tại của tôi là bản cập nhật 10.6.7 gần đây, bản cập nhật Firefox từ 4 beta 10 lên RC hoặc ScreenResX - đây là tất cả những điều tôi đã làm gần đây mà tôi có thể nghĩ ra)


Tôi sẽ không mô tả kernel_tasklà ngoài tầm kiểm soát. Giám sát hoạt động có thể không phải là tiện ích tốt nhất để chẩn đoán trong lĩnh vực này. Trong Bảng điều khiển, thêm các truy vấn nhật ký hệ thống để giúp bạn xác định các cách thức sử dụng tác vụ kernel; sau đó tinh chỉnh câu hỏi mở cho câu hỏi có thể dễ trả lời hơn.
Graham Perrin

1
CPU 200% không đổi có vẻ ngoài tầm kiểm soát cho mọi quá trình.
twe4ked

Câu trả lời:


12

Tôi đã có một câu hỏi tương tự về cách xác định các tệp và chương trình được kết nối với kernal_task bằng lệnh terminal sau:

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

Điều này sẽ hiển thị các kexts khác nhau và bộ nhớ liên quan đến chúng. Ví dụ, 6184960 com.apple.driver.AirPort.Brcm4360là một con heo lớn đối với tôi, nhưng tôi không thể làm gì nhiều nếu tôi muốn sử dụng wifi.

Một trong những gợi ý tôi nhận được là tìm kiếm tất cả các kexts không phải của Apple đang chiếm bộ nhớ bằng cách chuyển các mục trên sang grep -v com.apple. Có thể một số chương trình không phải của Apple đang sử dụng hết tài nguyên của bạn. Bạn sẽ có thể loại bỏ chúng mà không phá vỡ bất cứ điều gì.

Giải pháp cũ tất nhiên là khởi động lại máy tính của bạn. Đôi khi, đó là tất cả những gì cần thiết để thiết lập các quy trình trở lại mức sử dụng CPU thông thường.


số trong cột đầu tiên là gì?
Anentropic

@Anentropic - hãy thử man kextstat, nhìn vào đó và awklấy lệnh $4, nó trông giống như kích thước của việc sử dụng bộ nhớ kext. Làm cho ý nghĩa khi xem xét câu hỏi.
rebusB

11

Đây là một lời giải thích tuyệt vời về kernel_task là gì. Nó có thể là trình điều khiển (kexts), hoạt động mạng hoặc đĩa. Bạn không thể đơn giản sử dụng Dụng cụ để đính kèm vào kernel_taskquy trình.

Tìm các dấu hiệu khác, như nhật ký (Console.app), hoạt động của đĩa (ví dụ iotop fs_usage:), hoạt động mạng (thử ngắt kết nối với mạng cục bộ, tắt thiết bị trong tùy chọn mạng), thử gỡ cài đặt / xóa khỏi kextunloadtrình điều khiển bộ nhớ ( ) là từ bên thứ ba - máy tính bảng, modem usb 3g, v.v. Kiểm tra các ứng dụng đang cài đặt kexts

Ngoài ra, hãy đảm bảo rằng hệ thống tệp của bạn không bị hỏng, nếu bạn có bất kỳ sự cố nào gần đây - hãy kiểm tra.


1
Tôi đã sử dụng ~ 200% CPU (2 trong số 4 lõi) gần như liên tục, thường bắt đầu sau khi khởi động khi truyền tệp hoặc một cái gì đó tương tự, nhưng không trở lại bình thường sau đó. Lý do hóa ra là khối lượng hệ thống của tôi cần sửa chữa. Một khi điều đó đã được thực hiện, kernel_taskđã trở lại mức độ hoạt động lành mạnh.
Daniel Beck

1
Liên kết trong câu trả lời hiện đã chết
Swader

1
@Santa Cảm ơn bạn đã chỉnh sửa liên quan đến liên kết, nhưng không có điểm nào xóa liên kết khi có phiên bản trên Wayback Machine. Thay thế liên kết bằng liên kết đến Wayback Machine.
grg

8

Như @Christopher đã đề cập, nhiệt có thể khiến CPU kernel_task tăng đột biến. Lý do được liệt kê trong bài đăng này Khắc phục sự cố CPU kernel_task trong MacOS Lion 10.7 . Rõ ràng khi CPU làm nóng ACPI_SMC_Pl platformPlugin.kext sẽ chiếm chu kỳ CPU trong nỗ lực giảm tải CPU thực tế.

Vì vậy, một giải pháp là làm mát máy Mac của bạn (ví dụ: quạt) thông qua một quạt bên ngoài hoặc một cái gì đó như SMCFanControl .

Bài viết đưa ra một giải pháp khác là loại bỏ kext phụ kích hoạt hành vi đó. Mặc dù tôi phải thừa nhận cá nhân tôi không chắc chắn về việc tắt hành vi đó an toàn đến mức nào.


2
Tôi sẽ mạo hiểm đoán rằng đây là lý do cho phần lớn kernel_task khiến việc sử dụng CPU được duy trì cao. Mỗi lần nó xảy ra với tôi, tôi đang sử dụng máy của mình khá nhiều và nó sẽ bắt đầu bị lag, nhưng không có quá trình rõ ràng nào tôi đang sử dụng gây ra đột biến, chỉ là kernel_task. Tắt các quá trình nặng (video hoặc trò chơi, thường) và cuối cùng nó biến mất. Trong khi đó MBP 2011 của tôi có vẻ như sẽ giảm! Mở nó ra và làm cho nó sạch sẽ, loại bỏ chăn bụi trên các tản nhiệt và tôi đã trở lại làm việc với quạt thấp và không có kernel_task điên.
Joey T

5

Thường kernel_taskmất kiểm soát khi một số quy trình khác đang lạm dụng các cuộc gọi hoặc tài nguyên của hệ thống (các sự kiện I / O của bộ nhớ hoặc đĩa).

Khi điều này xảy ra, bạn có thể sử dụng fs_usagetiện ích báo cáo sẽ hiển thị cho bạn các cuộc gọi hệ thống và lỗi trang liên quan đến hoạt động của hệ thống tệp trong thời gian thực.

Vì vậy, chạy lệnh này trong Terminal:

sudo fs_usage

sau đó quan sát quá trình nào thường xuyên thực hiện một số cuộc gọi hệ thống và nếu bạn không sử dụng chúng, hãy cân nhắc việc đóng / tắt chúng.

Để cụ thể hơn, vui lòng kiểm tra cột TIME INTERVAL cung cấp cho bạn thời gian đã sử dụng trong cuộc gọi hệ thống. Một Wxuất hiện sau thời gian trôi qua chỉ ra quá trình này đã lên kế hoạch ra hoạt động (trong trường hợp đó thời gian trôi qua bao gồm thời gian chờ đợi).

Vì vậy, để lọc các quy trình đang sử dụng khoảng thời gian nhất trong các cuộc gọi hệ thống, hãy chạy:

sudo fs_usage | grep -v 0.0000

trong đó sẽ cho bạn thấy trong cột cuối cùng các quy trình đói nhất (về thời gian hạt nhân). Bạn có thể điều chỉnh số lượng không cho chính xác (hiển thị ít số không hơn, tốn nhiều thời gian hơn).

Để biết thêm ý tưởng, hãy kiểm tra: Làm thế nào để điều tra việc sử dụng bộ nhớ tác vụ kernel cao?


Dưới đây là những vấn đề phổ biến nhất:


2
Tốt một luồng đầu ra hợp lý sau khi lọc ra iTerm2grepchính nó:sudo fs_usage | grep -v -e '0.0000' -e 'iTerm2' -e 'grep'
Joel Purra

4

Tôi đã tăng đột biến trong việc sử dụng CPU kernel_task, và hóa ra quạt CPU của tôi đã được rút một phần. kernel_task có liên quan đến việc điều chỉnh CPU khi nó quá nóng. Trong trường hợp của bạn, có thể quạt của bạn chỉ bị dính rác và bụi và cần được dọn sạch.


Thật điên rồ! Bạn đã bao giờ kiểm tra nhật ký của bạn khi gỡ lỗi này? Làm thế nào bạn đi đến giải pháp đó?
Ricket

3

Tôi đã có cùng một vấn đề ở Yosemite nhưng nhờ có linh hồn tốt này dựa trên một người bạn tốt khác mà tôi có thể giải quyết nó. Tôi vẫn không thể hiểu chuyện gì đã xảy ra, nhưng sau khi mất cả một ngày cuối tuần để cố gắng giải quyết, tôi chỉ bỏ cuộc và mù quáng làm theo chỉ dẫn của anh ấy. Nhìn vào sự tuyệt vọng của tôi trong giám sát hoạt động:

Tất cả cpu của bạn thuộc về chúng tôi

Hãy cẩn thận, luôn luôn sao lưu trước và đọc các liên kết được cung cấp để giải thích. Tôi không chịu trách nhiệm cho bất kỳ thiệt hại gây ra. Mày đã được cảnh báo.

Tìm mô hình

$ system_profiler -detailLevel mini | grep "Định danh mô hình:"

Định danh mẫu: MacBookPro8,2

Di chuyển và sao lưu tập tin

$ mkdir -p ~ / sao lưu

$ cd / System / L Library / Extensions / IOl platformPluginF Family.kext / Content / PlPlIns / ACPI_SMC_Pl platformPlugin.kext / Content / Resource

$ sudo mv MacBookPro8_2.plist ~ / backup /


1
Giải pháp này đã làm việc cho tôi. Tôi có cùng phiên bản MacBookPro. Thật không may, nó liên quan đến việc vô hiệu hóa chức năng được thiết kế để tăng tuổi thọ của máy. Tôi đã kiểm tra chức năng quạt và nhiệt độ của CPU và nó có vẻ bình thường, vì vậy tôi cho rằng có một lỗi trong chức năng này, tuy nhiên tôi vẫn chưa thể hiểu được lý do tại sao việc làm mát CPU không được kích hoạt (đôi khi từ trước khi đăng nhập, không có kết thúc).
errant.info

@ errant.info vì một số lý do El Captain đã giải quyết nó. Máy mac của tôi cũng bị lỗi pin và tôi đã thay đổi với El Captain, vì vậy không biết hành động nào thực sự được khắc phục. Chúc may mắn với máy mac của bạn!
Ai đó vẫn sử dụng bạn MS-DOS

2

Tôi đang dùng OSX Lion với macbook pro 2011 mới và gần đây tôi có kernel_task chạy khoảng 25-30% CPU và quạt của tôi quay tối đa trong nhiều giờ. Tôi đã thử một điều tại một thời điểm và điều đã giải quyết nó là ... đóng 5 hoặc 6 cửa sổ trong ứng dụng Finder. Không thể nói tôi hiểu tại sao, nhưng rõ ràng là như vậy.


2
Bạn đã cài đặt phần mở rộng nào cho Finder chưa? Ví dụ, các chương trình thêm một cái gì đó vào thanh công cụ hoặc menu chuột phải (ngữ cảnh)?
Ricket

1
Điều này là do một hoặc nhiều cửa sổ của bạn có "hiển thị tất cả các kích cỡ" hộp kiểm cho phép trong các 'View-> Show View Options" cấu hình Tắt đó, sau đó thiết lập như là mặc định cho tất cả các thư mục và nó sẽ dừng lại..
Brian Topping

2

Trên máy Mac của tôi, việc sử dụng CPU của kernel_task tỷ lệ thuận với băng thông internet tôi sử dụng, dao động từ khoảng 0% đến 50%. Điều này có thể do trình điều khiển cho modem Huawei 3G của tôi (HuaweiDataCardDriver.kext).

Bạn có thể thử vô hiệu hóa phần mở rộng kernel. Không cần sử dụng kextunload: an toàn khi chỉ cần di chuyển các gói kext từ / System / Library / Tiện ích mở rộng / sang một số thư mục khác và khởi động lại. Bạn có thể sử dụng Canary của Tư vấn hoặc kextstat | grep -v com.appleliệt kê các phần mở rộng kernel không đi kèm với OS X.


1

Để khắc phục sự cố kernel_task ngoài tầm kiểm soát một cách cụ thể, đây là một số lệnh hữu ích:

  • Cấu hình toàn bộ hệ thống, tập trung vào quá trình kernel (PID: 0), chạy:

    sudo spindump 0 -reveal
    

    Đối với quy trình cụ thể (như launchd), sử dụng sample, ví dụ sudo sample launchdhoặc bằng PID.

  • Để thu thập mức tiêu thụ bộ nhớ theo tác vụ kernel, hãy sử dụng (được sắp xếp theo bẩn theo mặc định):

    sudo footprint 0
    

    Lưu ý: Sử dụng -ađể nhắm mục tiêu tất cả các quy trình.

  • Để thu thập thông tin chẩn đoán trên toàn hệ thống từ nhiều tiện ích, hãy chạy : sudo sysdiagnose.

    Điều này cũng có thể được kích hoạt bằng cách nhấn Shift- Control- - -. (dấu chấm).

    Bạn sẽ thấy màn hình nhấp nháy khi bắt đầu, sau đó đợi vài phút cho đến khi tệp được tiết lộ trong Finder .

    Xem: Làm thế nào để bạn có được các tệp chẩn đoán hệ thống từ OS X?

    Sau đó giải nén và kiểm tra các tập tin như footprint*.txt, spindump.txt, taskinfo.txt, bc_stats.txtvà khác.

  • Kiểm tra vm.swapusagetrạng thái hạt nhân, ví dụ sysctl -a | grep ^vm.swapusage.

    Về cơ bản, nhiều swap bạn sử dụng (kiểm tra các tập tin trao đổi trong /private/var/vmđó được quản lý bởi dynamic_pager, xem: man dynamic_pager), càng có nhiều hạt nhân đang gặp khó khăn với việc thực hiện do Swapins / Swapouts hoạt động (xem man vm_statman fs_usage). Để kiểm tra, hãy chạy:

    vm_stat 1
    sudo fs_usage | grep -w kernel_task
    

    Lưu ý: Lượt Control- Cdừng lại.


0

Đối với tôi, tôi đã có một quy trình (Netbeans trong trường hợp này, đang đọc một tệp như 20GB) và nó sẽ sử dụng như 80% cpu cho netbeans, 20% cpu cho kernel_task (rất đáng ngờ). Điều này khiến toàn bộ hệ thống của tôi chạy như tar.

Cũng đáng ngờ là "số đo" sẽ báo cáo rất nhiều thời gian "sys" trên mỗi cpu. Bạn cũng có thể thấy điều này trong lệnh "top", nhưCPU usage: 21.40% user, 23.74% sys

Sau đó, nó có thể là netbeans 120% cpu, kernel_task 65%, nhưng dù sao thì cả hai đều là "cpu cao cùng một lúc"

sudo fs_usage cho thấy rất nhiều điều này:

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

Giả thuyết của tôi là netbeans đã "đọc quá nhiều" đến nỗi nó đã gây ra lỗi trang thậm chí chạy chương trình của chính nó (tức là gửi đi để trao đổi chương trình của chính nó), do đó, việc xếp hàng phía sau hệ thống lỗi trang. Và có lẽ hoán đổi "các chương trình khác" để trao đổi, khiến cho toàn bộ hệ thống đi xuống.

Sử dụng top, cột FAULT cũng tăng 70K / giây.


0

Macbook Pro của tôi gần như không sử dụng được vì CPU_t CPU cao trong nhiều tuần Đồng thời pin bị phồng lên nên cuối cùng tôi đã quyết định đến Trung tâm Apple ở Rome để thay thế ... ngay cả khi hết bảo hành, Apple đã thay pin của tôi (và bàn phím là tốt) với chi phí 0 €. Thậm chí tốt hơn ... vấn đề kernel_task đột nhiên biến mất !!! Vì vậy, tôi khá chắc chắn rằng đó là vì pin, trực tiếp hoặc gián tiếp

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.