จะตรวจสอบการใช้งานหน่วยความจำเคอร์เนลสูงได้อย่างไร


131

ฉันใช้ MBP ของฉัน (พร้อม RAM 16 GB) ตามปกติและเป็นสีน้ำเงินฉันเป็นป๊อปอัปที่:

ระบบของคุณมีหน่วยความจำแอปพลิเคชันไม่เพียงพอ

เพื่อหลีกเลี่ยงปัญหาเกี่ยวกับคอมพิวเตอร์ของคุณให้ออกจากแอปพลิเคชันที่คุณไม่ได้ใช้

บังคับให้ออกจากแอปพลิเคชัน - ระบบของคุณมีหน่วยความจำแอปพลิเคชันหมด - ภาพหน้าจอ

เห็นได้ชัดว่าฉันปิดบางอย่างที่ทำได้ แต่ก็ไม่ได้ช่วยอะไร

หลังจากตรวจสอบหน่วยความจำแล้วดูเหมือนว่างานเคอร์เนลจะใช้หน่วยความจำ swap ขนาด 7GB และ 22.36GB ซึ่งมีทั้งหมด 23GB (ซึ่งเห็นได้ชัดว่าเป็นกรณี) อย่างไรก็ตามฉันยังมีพื้นที่ว่าง 20GB ใน SDD ของฉัน

Memory - iStat Menus - สกรีนช็อต

การตรวจสอบกิจกรรมไม่ได้ช่วยอะไรมากในขณะที่ OS X ของฉันกำลังมุ่งหน้าไปสู่การทำลายล้าง

Process Explorer

kernel_task - แท็บหน่วยความจำ - สกรีนช็อต kernel_task - แท็บสถิติ - ภาพหน้าจอ

ฉันtopสถิติก่อนที่จะแช่แข็งเคอร์เนลของฉัน:

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.

ในตอนท้าย OS X ของฉันหยุดนิ่งและฉันต้องทำการฮาร์ดรีเซ็ตซ่อมแซม SDD ของฉันในโหมดการกู้คืนและแก้ไขหลังจากนั้น (การกู้คืนงานที่ขาดหายไปการแก้ไขข้อขัดแย้งของแอปพลิเคชันตรวจสอบโฟลเดอร์ที่หายไป + พบแท็บ Chrome / Terminal )

คำถามของฉันคือฉันจะตรวจสอบการใช้งานหน่วยความจำขั้นสูงของเคอร์เนลได้อย่างไรหรือจะจัดการกับสถานการณ์แบบนั้นได้อย่างไร? ฉันได้ลองใช้ตัวอย่างด้วยการตรวจสอบกิจกรรม แต่มันเป็นสีเทา


รายละเอียด MBR ของฉัน: 2.3GHz Intel Core i7 (ปลายปี 2013) พร้อม RAM 16GB OS X: 10.9.5


1
@ klanomath โดยปกติฉันมักจะค้างมากโดยเฉพาะอย่างยิ่งกับช่วงเวลาที่ยาวนานและสิ่งเหล่านี้เป็นเพียงเคอร์เนลค้างด้วยเหตุผลที่ไม่รู้จัก (MBR ของฉันค่อนข้างใหม่) แต่นี่เป็นครั้งแรกที่ฉันได้เห็นป๊อปอัพที่ฉันออกจากหน่วยความจำ (พร้อม RAM 16GB และพื้นที่ว่าง 50GB) อย่างไรก็ตามคำถามหลักของฉันคือฉันจะตรวจสอบการใช้งานหน่วยความจำของงานเคอร์เนลได้อย่างไรหากการทำซ้ำนั้นไม่ควรเกี่ยวข้อง
kenorb

5
ใช้zprint -t(Lion) หรือsudo zprint -t(Mountain Lion และใหม่กว่า)
klanomath

1
คุณมีความเกี่ยวข้องกับคำถามที่ไม่เกี่ยวข้องกับการทำซ้ำของคุณในชื่อเรื่อง แต่อาจเกี่ยวข้องกับการแก้ปัญหาของคุณ
klanomath

1
คุณจะช่วยเพิ่มเอาท์พุทคำถามของคุณ (หรือบันทึกลงในเอกสารของคุณ)? สำหรับการอ้างอิงในอนาคต / เพื่อให้สามารถเปรียบเทียบกับ zprint ที่เกิดขึ้นในสถานะของระบบที่สำคัญยิ่งขึ้น IMHO มันคือโชคร้ายรั่วไหล หากคุณโพสต์ไว้ฉันอาจจะบอกคุณมากกว่านี้
klanomath

1
ฉันมีปัญหาเดียวกันทั้งหมดในทันที ฉันค่อนข้างแน่ใจว่าเกี่ยวข้องกับนักเทียบท่าสำหรับ mac หรือไฮเปอร์คิต ทันทีที่ฉันหยุดนักเทียบท่าสำหรับ mac, kernal_task เริ่มกินหน่วยความจำ 10GB +
Charlie Martin

คำตอบ:


176

มีหลายสิ่งที่ผิดปกติกับการใช้งานเคอร์เนลสูง โดยปกติจะเกี่ยวข้องกับความผิดพลาดหรือกระบวนการที่หนักซึ่งใช้ทรัพยากรของระบบมากเกินไป (เช่นการจัดเก็บดัชนีการเรียกใช้ VMs แท็บจำนวนมากเกินไปในเว็บเบราว์เซอร์หรือกระบวนการพื้นหลังอื่น ๆ )

นี่คือวิธีการบางอย่างที่ช่วยในการตรวจสอบปัญหาการใช้เคอร์เนล OS X:

วิธีการขั้นพื้นฐาน

  • เรียกใช้Console.appและตรวจสอบ ' ข้อความทั้งหมด ' เพื่อดูว่ามีอะไรผิดปกติเกิดขึ้นหรือไม่
  • ใช้การตรวจสอบกิจกรรมเพื่ออ่านหน่วยความจำของระบบและพิจารณาจำนวน CPU, RAM และดิสก์ที่ใช้

    หรือเรียกใช้topในเทอร์มินัลค้างไว้Spaceเพื่อรีเฟรช - ง่ายต่อการค้นหาปัญหาสาเหตุ ( สลับ / swapouts / ดิสก์ ?)

  • เรียกใช้sudo fs_usageในTerminalเพื่อรายงานการเรียกใช้ระบบและข้อบกพร่องของหน้าเว็บที่เกี่ยวข้องกับกิจกรรมของระบบไฟล์แบบเรียลไทม์ (ฉันคิดว่านี่เป็นตัวเลือกที่ดีที่สุดจากทั้งหมด) จากนั้นกดControl- Cเพื่อหยุด

    การดำเนินการ: พิจารณาฆ่าแอปที่ปรากฏบ่อยในรายการ แต่คุณไม่ได้ใช้

    เรียนรู้เพิ่มเติมที่: ฉันจะดีบักกระบวนการ“ kernel_task” ที่ไม่อยู่ในการควบคุมได้อย่างไร

  • Runsudo syscallbypid.d (หรือsyscallbyproc.d) รอสักครู่ตี-Control Cตอนนี้ตรวจสอบว่ากระบวนการใดที่สร้างการเรียกใช้ระบบมากที่สุดในเวลาที่กำหนด (คอลัมน์สุดท้าย) และหากคุณจำได้ให้ลองฆ่ามัน ถ้าไม่เป็นเช่นนั้น Google มันและเรียนรู้เพิ่มเติมเกี่ยวกับมัน

วิธีการขั้นสูง

  • ใช้sysdiagnoseคำสั่ง (สามารถเรียกใช้โดยการกดปุ่มShift- Control- - - .(จุด) เพื่อรวบรวมข้อมูลการวินิจฉัยทั่วทั้งระบบอย่างรวดเร็วซึ่งเป็นประโยชน์ในการตรวจสอบปัญหาหน่วยความจำ / ประสิทธิภาพของระบบ (จะปรากฏใน/var/tmp) โดยคุณหรือพวก Apple เมื่อเสร็จแล้วให้พิจารณาการคลายการบีบอัดไฟล์ที่สร้างขึ้นและวิเคราะห์บันทึก

    ดู: คุณจะรับไฟล์วินิจฉัยระบบจาก OS X ได้อย่างไร

  • รันfootprintเพื่อรวบรวมข้อมูลหน่วยความจำโดยละเอียดเกี่ยวกับระดับประเภทภูมิภาคต่อ VM และสลับเปลี่ยนไบต์:

    sudo footprint -a
    

    รุ่นเก่ากว่า:

    sudo footprint -all -categories -swapped -collapseSharing
    
  • ใช้spindumpสำหรับทำโปรไฟล์ระบบทั้งหมดมันจะสร้าง/tmp/spindump.txtไฟล์ (รวมถึงเคอร์เนลและส่วนขยาย)

  • ใช้vm_statเพื่อแสดงสถิติหน่วยความจำเสมือน เช่น

    vm_stat 1 # to display every second.
    
  • ใช้zprintเพื่อตรวจสอบข้อมูลเกี่ยวกับการใช้เคอร์เนลเป็นไปได้โดย:

    sudo zprint -t -s | head -n20
    

    มันจะแสดงโซนเคอร์เนลที่สิ้นเปลืองมากที่สุด

  • ใช้newproc.dเพื่อสอดแนมกระบวนการใหม่ตามที่ได้รับการดำเนินการcreatbyproc.dสำหรับไฟล์:

    sudo newproc.d
    sudo creatbyproc.d
    

    หมายเหตุ: สำหรับ OS X ที่ใหม่กว่า (10.11 ขึ้นไป) สิ่งนี้อาจไม่ทำงานเมื่อเปิดใช้งานการป้องกันความสมบูรณ์ (ตรวจสอบโดยcsrutil status)

  • sarผู้รายงานกิจกรรมของระบบลองซึ่งสามารถสุ่มตัวอย่างและรายงานเคาน์เตอร์สถิติสะสมต่าง ๆ ที่ดูแลโดยระบบปฏิบัติการ

สำหรับเครื่องมือการดีบักที่มีประโยชน์เพิ่มเติมให้ตรวจสอบสคริปต์ dtrace ( grep dtrace /usr/bin/*) หากคุณทราบถึงกระบวนการที่ผิดพลาดซึ่งเป็นสาเหตุของปัญหาคุณอาจใช้dtrussเพื่อแก้ไขข้อบกพร่อง


การปฏิบัติ

นี่คือคำแนะนำบางส่วนที่สามารถช่วยคุณแก้ปัญหาระบบปฏิบัติการได้

  • เพิ่มหน่วยความจำที่ไม่ได้ใช้งานอยู่ ในการทำเช่นนี้คุณต้องล้างแคชก่อนและบังคับให้ล้างแคชดิสก์:

    sync && sudo purge
    

    sync - บังคับให้เสร็จสิ้นการเขียนดิสก์ที่ค้างอยู่ (ล้างแคช)

    purge - บังคับให้ล้างแคชดิสก์ (ล้างและล้างข้อมูล)

    ฟังก์ชั่นนั้นใช้เพื่อยกเลิกการดำเนินการ I / O ที่ค้างอยู่ทั้งหมดซึ่งใช้ดิสก์แคชและปล่อยดิสก์แคชที่ถูกครอบครองทั้งหมดดังนั้นจึงควรเพิ่มพื้นที่ว่างในดิสก์เพื่อให้สามารถแยกหน้าออกจากหน่วยความจำหลักได้ง่าย มีความปลอดภัยในการใช้เนื่องจากไม่มีผลต่อหน่วยความจำนิรนามที่จัดสรรผ่าน malloc, vm_allocate เป็นต้น

  • ใช้แอพของบุคคลที่สามเพื่อล้างค่าหน่วยความจำที่ใช้มากเกินไปเช่นiBoostUp , SystemPalฯลฯ

  • คุณสามารถปิดการใช้งาน Spotlight ชั่วคราว:

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

    และพิจารณาบริการอื่น ๆ โดย:

    sudo launchctl list | grep ^[0-9]
    sudo launchctl bslist | grep ^A
    
  • ออกจากเว็บเบราว์เซอร์ของคุณและตรวจสอบว่ามีประโยชน์หรือไม่ ตัวอย่างเช่นการใช้ Chrome มีความเชี่ยวชาญเป็นอย่างมากโดยเฉพาะอย่างยิ่งเมื่อมีการประมวลผลส่วนหน้าเกิดขึ้นในพื้นหลัง (เช่น Javascript) หรือภาพเคลื่อนไหวที่คล้ายโฆษณาเพื่อแสดงเนื้อหาอย่างต่อเนื่อง


1
สปอตไลท์ยังคงปรากฏขึ้นอีกครั้ง แต่ฉันไม่ได้ใช้งานและทุกครั้งที่ฉันฆ่ามันจะปรากฏขึ้นอีกครั้งหลังจากนั้น ... ฉันจะกำจัดมันได้อย่างไร
ling

1
@ ต่ำฉันอยากจะแนะนำให้คุณถามคำถามอื่นด้วยเนื่องจากนี่เกี่ยวข้องกับหน่วยความจำงานเคอร์เนลสูงไม่ใช่เฉพาะ Spotlight
kenorb

2
ถอนหายใจฉันมี RAM ขนาด 4 GB บนเครื่อง mac และเมื่อเร็ว ๆ นี้งานเคอร์เนลขึ้นไปที่ 3.1 GB โดยทั่วไปแล้วการแช่แข็งคอมพิวเตอร์ทั้งหมดของฉัน ปิดแท็บ Google Drive ของฉันและลงไปที่ 950 MB ...
Zizouz212

3
ไม่เจาะจงพอที่จะแก้ปัญหาการใช้งานkernel_taskหน่วยความจำสูง& cpu ได้จริง
hyiltiz

6

ฉันมีปัญหาที่คล้ายกันมากหลังจากเปลี่ยนหน้าจอ LCD เป็น iMac ปลายปี 2012 พัดลมทำงานที่ RPM สูงและมีการใช้งาน CPU Kernel_task สูง ฉัน จำกัด ให้แคบลงไปเป็นเซ็นเซอร์วัดอุณหภูมิคุณต้องย้ายจากหน้าจอ LCD เก่าไปยังหน้าจอเปลี่ยนใหม่ หากคุณลืมที่จะทำความเร็วของ CPU และ Kernel_task จะทำให้ระบบของคุณช้าลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.