Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Mức sử dụng bộ nhớ hồ bơi không phân trang cao (Rò rỉ) trong Windows

Máy tính và máy chủ Windows có thể gặp sự cố tràn bộ nhớ do rò rỉ một trình điều khiển hệ thống nhất định lưu trữ dữ liệu của nó trong nhóm bộ nhớ không phân trang của hệ thống. Poo bộ nhớ không phân trang l là dữ liệu trong RAM của máy tính được sử dụng bởi nhân và trình điều khiển của hệ điều hành. Nhóm không được phân trang không bao giờ được hoán đổi sang đĩa (sang tệp hoán trang), nó luôn chỉ được lưu trữ trong bộ nhớ vật lý.

Bạn có thể xem kích thước hiện tại của bộ nhớ không phân trang trong Bộ nhớ phần Hiệu suất trong Trình quản lý tác vụ. Ảnh chụp màn hình bên dưới cho thấy rằng hầu như tất cả bộ nhớ của máy chủ đang bận và hầu hết bộ nhớ của nó bị chiếm bởi nhóm 4,2GB không phân trang. Thông thường, kích thước của nhóm không phân trang hiếm khi vượt quá 200-400 MB. Kích thước nhóm lớn không phân trang thường cho thấy rằng có một bộ nhớ bị rò rỉ trong một số thành phần hệ thống hoặc trình điều khiển thiết bị.

Mức sử dụng bộ nhớ hồ bơi không phân trang cao (Rò rỉ) trong Windows

Nếu có rò rỉ bộ nhớ trong nhóm không phân trang trên máy chủ, các sự kiện sau sẽ xuất hiện trong Nhật ký sự kiện hệ thống:

ID sự kiện:2019
Nguồn:Srv
Mô tả:The server was unable to allocate from the system nonpaged pool because the pool was empty

Trong hầu hết các trường hợp, lý do rò rỉ bộ nhớ được mô tả ở trên là do một số vấn đề với trình điều khiển của bên thứ ba được cài đặt trong Windows. Theo quy định, đây là các trình điều khiển mạng. Vui lòng chú ý đến hoạt động của nhóm khi tải xuống các tệp lớn (rất có thể, nó phát triển nhanh chóng).

Kích thước nhóm không phân trang tối đa trên Windows:

  • Windows x64 lên đến 128 Gb và không quá 75% bộ nhớ vật lý
  • Windows x86 lên đến 2 Gb và RAM không quá 75%

Chỉ khởi động lại Windows mới giúp làm sạch nhóm không phân trang. Nó có thể được chấp nhận đối với thiết bị gia đình, nhưng bạn nên tìm giải pháp tốt hơn cho máy chủ hoạt động 24/7.

Nội dung:

  • Tắt Trình điều khiển Giám sát Sử dụng Dữ liệu Mạng
  • Sử dụng PoolMon để tìm lỗ hổng bộ nhớ ở chế độ hạt nhân
  • Cài đặt các phiên bản mới nhất của trình điều khiển bộ điều hợp mạng
  • Tắt vai trò Hyper-V

Tắt Trình điều khiển Giám sát Sử dụng Dữ liệu Mạng

Thông thường, lý do rò rỉ bộ nhớ trong nhóm không phân trang là do trình điều khiển giám sát hoạt động mạng không tương thích ( Sử dụng dữ liệu mạng - NDU, %WinDir%\system32\drivers\Ndu.sys ) với trình điều khiển bộ điều hợp mạng. Thông thường, trình điều khiển card mạng của Killer Network và MSI xung đột với trình điều khiển NDU. Dịch vụ này có thể bị vô hiệu hóa mà không làm mất nhiều chức năng của Windows.

Dừng dịch vụ NDU bằng lệnh:

sc config NDU start= disabled

Mức sử dụng bộ nhớ hồ bơi không phân trang cao (Rò rỉ) trong Windows

Hoặc thông qua sổ đăng ký:

  1. Mở Trình chỉnh sửa sổ đăng ký ( regedit.exe );
  2. Đi tới khoá đăng ký HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ Ndu \ ;
  3. Thay đổi giá trị của Bắt đầu tham số thành 4.

Mức sử dụng bộ nhớ hồ bơi không phân trang cao (Rò rỉ) trong Windows

Sau khi thực hiện các thay đổi, bạn cần khởi động lại máy tính của mình.

Sử dụng PoolMon để Tìm lỗ hổng bộ nhớ ở chế độ hạt nhân

Bạn có thể cố gắng xác định trình điều khiển gây ra rò rỉ bộ nhớ trong nhóm không phân trang. Để thực hiện việc này, chúng tôi cần Poolmoon.exe công cụ bảng điều khiển có trong Bộ trình điều khiển Windows (WDK). Tải xuống và cài đặt WDK cho phiên bản Windows của bạn từ Microsoft. Sau đó khởi động Poolmon.exe (trong trường hợp WDK dành cho Windows 10, công cụ này nằm trong C:\Program Files (x86)\Windows Kits\10\Tools\ thư mục).

Sau khi bạn đã khởi động công cụ, nhấn P . Cột thứ hai sẽ hiển thị các thẻ của các quy trình sử dụng bộ nhớ không phân trang (thuộc tính Nonp). Sau đó nhấn B để sắp xếp danh sách trình điều khiển theo cột Byte.

Mức sử dụng bộ nhớ hồ bơi không phân trang cao (Rò rỉ) trong Windows

Cột bên trái liệt kê các thẻ trình điều khiển. Nhiệm vụ của bạn là xác định tệp trình điều khiển bằng thẻ này. Trong ví dụ của chúng tôi, bạn có thể thấy rằng hầu hết RAM trong nhóm không phân trang được sử dụng bởi trình điều khiển có thẻ Nr22 , ConT smNp .

Bạn nên kiểm tra trình điều khiển cho các thẻ được tìm thấy bằng cách sử dụng strings.exe công cụ (từ Sysinternals), sử dụng findstr tích hợp sẵn hoặc sử dụng PowerShell.

Sử dụng các lệnh sau để tìm các tệp trình điều khiển được liên kết với các thẻ bạn đã tìm thấy:

findstr /m /l /s Nr22 %Systemroot%\System32\drivers\*.sys
findstr /m /l /s ConT %Systemroot%\System32\drivers\*.sys
findstr /m /l /s smNp %Systemroot%\System32\drivers\*.sys

Hoặc, bạn cũng có thể sử dụng PowerShell:

Set-Location "C:\Windows\System32\drivers"
Select-String -Path *.sys -Pattern "Nr22" -CaseSensitive | Select-Object FileName -Unique
Select-String -Path *.sys -Pattern "Py28" -CaseSensitive | Select-Object FileName -Unique
Select-String -Path *.sys -Pattern "Ne40" -CaseSensitive | Select-Object FileName –Unique

Bạn có thể ánh xạ các tệp trình điều khiển cho các thẻ trực tiếp trong poolmon.exe. Để thực hiện việc này, hãy đảm bảo pooltag.txt tệp nằm trong thư mục công cụ. Bạn có thể sao chép pooltag.txt từ thư mục cài đặt WDK hoặc tải xuống từ GitHub. Chạy poolmon như sau:

poolmon /g

Mức sử dụng bộ nhớ hồ bơi không phân trang cao (Rò rỉ) trong Windows

Lưu ý rằng tên trình điều khiển hiện được hiển thị trong Mapped_driver cột.

Vì vậy, chúng tôi đã có danh sách các tệp trình điều khiển có thể gây ra sự cố. Bây giờ bạn phải xác định trình điều khiển và thành phần hệ thống mà các tệp này tham chiếu đến bằng tên của chúng. Để làm điều đó, bạn có thể sử dụng dấu hiệu công cụ từ Sysinternals.

sigcheck C:\Windows\System32\drivers\rdyboost.sys

Công cụ này trả về tên, mô tả và phiên bản của trình điều khiển hoặc thành phần Windows.

Mức sử dụng bộ nhớ hồ bơi không phân trang cao (Rò rỉ) trong Windows

Bây giờ, bạn có thể thử gỡ cài đặt / cập nhật / cài đặt lại trình điều khiển hoặc dịch vụ có vấn đề.

Nếu rò rỉ bộ nhớ dẫn đến BSOD, bạn có thể xác định trình điều khiển có vấn đề trong tệp kết xuất bộ nhớ.

  1. Tải kết xuất bộ nhớ vào trình gỡ lỗi Windbg;
  2. Chạy lệnh:!vm
  3. Nếu Sử dụng NonPagedPool giá trị lớn hơn NonPagedPool Max , điều đó có nghĩa là nhóm không phân trang đã cạn kiệt;
  4. Kiểm tra nội dung của nhóm bằng lệnh (kết quả sẽ được sắp xếp theo cách sử dụng nhóm không phân trang):!poolused 2
  5. Sau khi nhận được thẻ trình điều khiển, hãy tìm tệp trình điều khiển bằng cách sử dụng findstr hoặc strings.exe như đã mô tả ở trên.

Cài đặt phiên bản mới nhất của trình điều khiển bộ điều hợp mạng

Cố gắng tải xuống và cài đặt các phiên bản trình điều khiển mới nhất cho bộ điều hợp mạng của bạn từ trang web của nhà cung cấp.

Nếu cập nhật trình điều khiển tự động được bật trong Windows, hãy kiểm tra xem sự cố có bắt đầu sau khi cài đặt trình điều khiển mới hay không. Hãy thử quay lại phiên bản trình điều khiển trước đó và xem sự cố có tiếp diễn hay không. Nếu sự cố được giải quyết, hãy tắt cập nhật trình điều khiển tự động.

Tắt vai trò Hyper-V

Trong một số trường hợp, vai trò Hyper-V được cài đặt đang gây ra rò rỉ bộ nhớ cho nhóm không phân trang. Nếu bạn không cần vai trò này, chúng tôi khuyên bạn nên vô hiệu hóa nó.

Trên Windows Server, bạn có thể vô hiệu hóa vai trò Hyper-V bằng lệnh PowerShell:

Remove-WindowsFeature -Name Hyper-V

Lệnh dành cho Windows 10:

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

Nếu tìm kiếm của bạn không trả về bất kỳ kết quả nào, hãy kiểm tra xem rò rỉ bộ nhớ có phải do quy trình ở chế độ người dùng gây ra hay không. Mở Trình quản lý tác vụ, đi tới Chi tiết , thêm Nhóm NP và tìm kiếm các quy trình có kích thước bộ nhớ lớn trong nhóm không phân trang.

Mức sử dụng bộ nhớ hồ bơi không phân trang cao (Rò rỉ) trong Windows

Hướng dẫn này có thể áp dụng cho cả Windows Server 2019/2016 / 2012R và máy tính để bàn Windows 10 / 8.1.