Tìm và sửa lỗi Rò rỉ bộ nhớ trong Windows 11/10

Rò rỉ bộ nhớ(Memory Leak) là sự thất lạc tài nguyên trong chương trình máy tính do cấp phát bộ nhớ bị lỗi. Nó xảy ra khi vị trí RAM không được sử dụng vẫn chưa được giải phóng. Không được nhầm lẫn với rò rỉ bộ nhớ với rò rỉ dung lượng, đề cập đến một chương trình sử dụng nhiều RAM hơn mức cần thiết. Rò rỉ bộ nhớ trên hệ thống Windows 11/10/8/7 được cho là đã xảy ra khi bộ nhớ không thể truy cập được mặc dù không được sử dụng.

Rò rỉ bộ nhớ trong Windows 11/10

Trước khi bắt đầu, bạn nên biết rằng Rò rỉ bộ nhớ là một vấn đề phần mềm cần gỡ lỗi - ví dụ: trong (Memory)Java , JavaScript , C / C ++, Windows , v.v. Về mặt vật lý, việc thay thế RAM hoặc đĩa cứng là không cần thiết.

Rò rỉ bộ nhớ trong Windows 10

Tại sao nó tệ

Rò rỉ bộ nhớ rõ ràng là xấu bởi vì nó là một lỗi, một lỗ hổng trong hệ thống. Nhưng chúng ta hãy tìm hiểu chính xác nó ảnh hưởng đến hệ thống như thế nào:

  1. Vì bộ nhớ không được giải phóng ngay cả khi không sử dụng, dẫn đến cạn kiệt bộ nhớ.
  2. Bộ nhớ cạn kiệt dẫn đến lão hóa phần mềm.
  3. Bộ nhớ khả dụng giảm dẫn đến tăng thời gian phản hồi và hệ thống hoạt động kém.
  4. Rò rỉ bộ nhớ không được kiểm soát cuối cùng có thể dẫn đến sự cố ứng dụng.

Để xác định rò rỉ bộ nhớ, lập trình viên cần có quyền truy cập vào mã nguồn của chương trình.

Xác định vị trí rò rỉ

Để giải quyết một vấn đề, trước hết chúng ta cần xác định nó. Các bước cơ bản để xác định vị trí rò rỉ bộ nhớ là:

  1. Khẳng định(Affirmation) : Xác định xem có rò rỉ xảy ra hay không.
  2. Tìm rò rỉ bộ nhớ chế độ hạt nhân(Finding Kernel-mode memory leak) : Định vị rò rỉ do thành phần trình điều khiển chế độ hạt nhân gây ra.
  3. Tìm rò rỉ bộ nhớ ở chế độ(Finding User-mode memory leak) người dùng: Định vị rò rỉ do ứng dụng hoặc trình điều khiển chế độ người dùng gây ra.

Cấp phát bộ nhớ

Có các chế độ khác nhau trong đó các ứng dụng phân bổ RAM . Nếu không gian không được giải phóng sau khi sử dụng, rò rỉ bộ nhớ sẽ xảy ra bất kể chế độ cấp phát. Một số mẫu phân bổ phổ biến là:

  1. Hàm HealAlloc(HealAlloc) để cấp phát bộ nhớ heap. Thời gian chạy C / C ++ tương đương là sai và mới.
  2. Chức năng VirtualAlloc(VirtualAlloc) để cấp phát trực tiếp từ hệ điều hành.
  3. Kernel32 API(Kernel32 APIs) để giữ bộ nhớ nhân cho ứng dụng. Ví dụ(Example) , CreateFile , CreateThread .
  4. API người dùng32 và API Gdi32.

Ngăn chặn rò rỉ bộ nhớ trong Windows

Tất cả chúng ta đều biết phòng bệnh hơn chữa bệnh, vì vậy đây là một số cách để ngăn ngừa rò rỉ bộ nhớ.

Theo dõi thói quen

Rò rỉ bộ nhớ trong Windows 10

Bạn cần chú ý đến việc sử dụng RAM bất thường của các chương trình và ứng dụng riêng lẻ. Bạn có thể đi tới Trình quản lý tác vụ của Windows(Windows Task Manager) bằng cách nhấn CTRL+SHIFT+ESC và thêm các cột như Xử lý(Handles) , Đối tượng người dùng, Đối tượng(User Objects) GDI ,(GDI Objects) v.v.

Điều này sẽ giúp bạn dễ dàng theo dõi việc sử dụng tài nguyên.

Đọc(Read) : Các loại bộ nhớ trong máy tính là gì?(What are the Types of Memory in a computer?)

Các công cụ của Microsoft(Microsoft) để chẩn đoán rò rỉ bộ nhớ

Các công cụ khác nhau chẩn đoán rò rỉ bộ nhớ cho các chế độ cấp phát khác nhau:

  1. Trình xác minh ứng dụng(Application Verifier) chẩn đoán rò rỉ đống.
  2. UMDH (một thành phần của Windows Debugging Tools ) chẩn đoán rò rỉ cho các quy trình riêng lẻ bằng cách giám sát phân bổ bộ nhớ heap.
  3. Trace Capture để phân tích kỹ lưỡng việc sử dụng RAM .
  4. Xperf cũng theo dõi các mẫu phân bổ heap.
  5. CRT Debug Heap không chỉ theo dõi phân bổ heap mà còn cho phép thực hành mã hóa để giảm thiểu rò rỉ.
  6. JavaScript Memory Leak Detector gỡ lỗi rò rỉ bộ nhớ trong mã.

Mẹo sử dụng

  1. Sử dụng kernel HANDLE và các con trỏ thông minh khác cho tài nguyên Win32 và phân bổ heap.
  2. Nhận(Get) các lớp để quản lý tài nguyên tự động cho việc cấp phát hạt nhân từ thư viện ATL . Chuẩn C ++ có auto_ptr để phân bổ heap.
  3. Đóng gói các con trỏ giao diện COM(Encapsulate COM) trong “con trỏ thông minh” với sự trợ giúp của _com_ptr_t hoặc _bstr_t hoặc _variant_t .
  4. Theo dõi(Monitor).NET để sử dụng bộ nhớ bất thường.
  5. Tránh(Avoid) nhiều lối thoát cho các hàm để giải phóng các phân bổ khỏi các biến trong hầu hết các khối khi kết thúc một hàm.
  6. Chỉ sử dụng(Use) các ngoại lệ gốc sau khi giải phóng tất cả các phân bổ trong khối _finally(_finally) . Gói(Wrap) tất cả phân bổ heap và xử lý vào con trỏ thông minh để sử dụng các ngoại lệ C ++.
  7. Luôn gọi hàm PropVariantClear trước khi khởi động lại hoặc loại bỏ đối tượng PROPVARIANT .

Khắc phục sự cố(Troubleshoot) rò rỉ bộ nhớ trong Windows

Cũng giống như các cách khác nhau để ngăn chặn rò rỉ bộ nhớ, có nhiều cách khác nhau để ngăn chặn rò rỉ bộ nhớ. Nhưng trước khi bắt đầu, hãy nhớ tạo điểm khôi phục hệ thống trước .

1] Đóng các quy trình và khởi động lại.

Nếu bạn thấy một quy trình không cần thiết đang chiếm quá nhiều RAM , bạn có thể kết thúc quy trình trong Trình quản lý tác vụ(Task Manager) . Bạn sẽ cần khởi động lại thiết bị để không gian giải phóng có sẵn để sử dụng cho các quy trình khác. Nếu không có sự cố rò rỉ bộ nhớ Khởi động lại sẽ không được giải quyết. (Restart)Một quy trình cụ thể có lỗi làm chậm PC là Runtime Broker . Hãy thử nếu vô hiệu hóa nó một mình hoạt động.

2] Công cụ chẩn đoán bộ nhớ

Chẩn đoán bộ nhớ Windows

Để truy cập Công cụ chẩn đoán bộ nhớ(Memory Diagnostic Tool) có sẵn dành cho Windows:

  1. Lưu tất cả công việc quan trọng của bạn.
  2. Nhấn Win + R để mở cửa sổ Run .
  3. Gõ lệnh mdsched.exe trong cửa sổ Run .
  4. Khởi động lại PC.
  5. Sau khi khởi động lại, hãy thực hiện quét cơ bản hoặc tìm các tùy chọn ' Nâng cao(Advanced) ' như ' Kết hợp kiểm tra(Test mix) ' hoặc ' Số lần vượt qua(Pass count) '.
  6. Nhấn F10 để bắt đầu kiểm tra.

Đây vẫn là những bản sửa lỗi tạm thời.

3] Kiểm tra các bản cập nhật trình điều khiển

Cập nhật phần mềm trình điều khiển

Trình điều khiển lỗi thời gây rò rỉ bộ nhớ. Luôn cập nhật tất cả các trình điều khiển :

  1. Nhấn Win + R và mở cửa sổ Run . Nhập devmgmt.msc và nhấn Enter . Nó sẽ đưa bạn đến Trình quản lý thiết bị(Device Manager) .
  2. Kiểm tra(Check) các trình điều khiển đã lỗi thời và cập nhật tất cả.
  3. Đối với các bản cập nhật, bạn có thể đã bỏ lỡ, hãy kiểm tra trong Windows Update .

Điều này thật đơn giản.

4] Tối ưu hóa hiệu suất

Điều chỉnh để có hiệu suất tốt nhất

Việc điều chỉnh Windows cho hiệu suất sẽ quản lý mọi thứ bao gồm lập lịch bộ xử lý và sử dụng bộ nhớ để ngăn chặn rò rỉ bộ nhớ. Làm theo các bước sau:

  1. Nhấp chuột phải vào ' Máy tính này(This PC) ' và chọn cài đặt ' Nâng cao(Advanced) ' ở khung bên trái.
  2. Trong tab ' Nâng cao(Advanced) ', chuyển đến ' Hiệu suất(Performance) ', tiếp theo là ' Cài đặt(Settings) '.
  3. Chọn ' Điều chỉnh để có hiệu suất tốt nhất(Adjust for best performance) ' và nhấp vào OK .
  4. Khởi động lại(Restart) và kiểm tra xem sự cố đã được giải quyết chưa.

Nếu giải pháp đơn giản này không hoạt động, hãy thử giải pháp tiếp theo.

5] Tắt các chương trình(Programs) đang chạy khi khởi động(Startup)

Các chương trình khởi động

Vô hiệu hóa các chương trình rắc rối là cách duy nhất để giải quyết vấn đề rò rỉ bộ nhớ. Đi tới Trình quản lý tác vụ(Task Manager) và tắt chương trình xử lý sự cố. Nếu bạn không biết chương trình nào đang tạo ra sự cố, hãy làm như sau:

  1. Đi tới ' Trình quản lý tác vụ(Task Manager) '.
  2. Đi tới ' Khởi động(Startup) '.
  3. Tắt các chương trình khởi động(Disable the startup programs) bạn không cần chạy theo mặc định.

6] Chống phân mảnh ổ cứng

Chống phân mảnh ổ đĩa

Mặc dù Windows 10 tự động thực hiện việc này cho bạn, nhưng thỉnh thoảng bạn có thể cần thực hiện chống phân mảnh ổ cứng để tối ưu hóa hiệu suất:

  1. Đi tới ' Máy tính này(This PC) ' hoặc ' Máy tính của tôi(My Computer) '.
  2. Nhấp chuột phải vào(Right-Click) ổ cứng hệ thống (thường là ổ C:).
  3. Đi tới ' Công cụ(Tools) ' trong ' Thuộc tính(Properties) ' và chọn ' Tối ưu hóa(Optimize) '.
  4. Chọn ổ đĩa để chống phân mảnh và chọn ' Phân tích(Analyze) '.

Khởi động lại máy tính của bạn sau khi phân mảnh mới.

7] Tệp ClearPage khi tắt máy

Bây giờ nó đang trở nên phức tạp - nhưng đừng lo lắng. Đây là cách xóa Tệp Trang mỗi khi tắt máy(clear the Page File at every shutdown) :

  • Nhập regedit vào Tìm kiếm(Search) để khởi chạy Trình chỉnh sửa sổ đăng ký(Registry Editor) .
  • Nhập đường dẫn này:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  • Thay đổi giá trị của ClearPageFileAtShutDown thành '1'.( ClearPageFileAtShutDown to ‘1’.)
  • Lưu các thay đổi và Khởi động lại(Restart) thiết bị.

Điều này nên làm điều đó. Hãy nhớ rằng quá trình tắt máy của bạn sẽ mất nhiều thời gian hơn một chút.

9] Tắt Superfetch

Dịch vụ Windows(Windows Service) này tối ưu hóa hiệu suất bằng cách giảm thiểu thời gian khởi động. Nó cho phép Windows quản lý việc sử dụng RAM . Cuộc sống(Life) sau khi vô hiệu hóa Superfetch không thuận tiện nhưng hãy làm điều đó nếu bạn phải. Ít nhất hãy thử điều này một mình để cô lập vấn đề:

  1. Tìm kiếm services.msc và đi tới Trình quản lý dịch vụ.
  2. Tìm kiếm ' Superfetch ' và nhấp chuột phải vào nó để chuyển đến ' Thuộc tính(Properties) '.
  3. Chọn ' Dừng(Stop) '.
  4. Đồng thời ' Vô hiệu hóa(Disable) ' dịch vụ từ menu thả xuống.
  5. Khởi động lại PC và kiểm tra xem hiệu suất đã được cải thiện chưa.

Bật Superfetch nếu cái này không hoạt động.

10] Kiểm tra phần mềm độc hại

Sử dụng phần mềm chống vi-rút của bên thứ ba hoặc Bộ bảo vệ Windows(Windows Defender) nội bộ của Windows 10 để quét và loại bỏ phần mềm độc hại. Đảm(Make) bảo rằng chương trình chống vi-rút được cập nhật để hỗ trợ hệ điều hành của bạn để nó không trở thành lý do gây rò rỉ bộ nhớ.

Mọi giải pháp bạn có thể cần để tìm hoặc ngăn chặn rò rỉ bộ nhớ đều có ở đây. Bạn có thể đọc thêm về rò rỉ bộ nhớ trên MSDNMicrosoft .



About the author

Tôi là một lập trình viên máy tính và đã có hơn 15 năm. Kỹ năng của tôi nằm ở việc phát triển và duy trì các ứng dụng phần mềm, cũng như cung cấp hỗ trợ kỹ thuật cho các ứng dụng đó. Tôi cũng đã dạy lập trình máy tính cho học sinh trung học và hiện đang là một giảng viên chuyên nghiệp.



Related posts