Cách tìm và khắc phục lỗi Rò rỉ bộ nhớ trong Windows 10
Bộ nhớ bị rò rỉ 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 một RAM vị trí không được sử dụng vẫn chưa được phát hành. 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 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 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 Java, JavaScript, C/C ++, Windows, v.v. Về mặt vật lý, không cần thay thế RAM hoặc đĩa cứng.
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:
- Vì bộ nhớ không được giải phóng ngay cả khi không sử dụng, dẫn đến cạn bộ nhớ.
- Bộ nhớ cạn kiệt dẫn đến lão hóa phần mềm.
- 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.
- Rò rỉ bộ nhớ không được kiểm tra 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à:
- Khẳng định: Xác định xem có bị rò rỉ hay không.
- Phát hiện rò rỉ bộ nhớ chế độ hạt nhân: Định vị rò rỉ do thành phần trình điều khiển chế độ hạt nhân gây ra.
- Tìm rò rỉ bộ nhớ ở chế độ người dùng: Xác định vị trí rò rỉ do ứng dụng hoặc trình điều khiển ở chế độ người dùng.
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à:
- Hàm HealAlloc để phân bổ bộ nhớ heap. Thời gian chạy C/C ++ tương đương là sai và mới.
- Chức năng VirtualAlloc để cấp phát trực tiếp từ hệ điều hành.
- Kernel32 API để giữ bộ nhớ hạt nhân cho ứng dụng. Ví dụ, CreateFile, CreateThread.
- API người dùng32 và API Gdi32.
Ngăn chặn rò rỉ bộ nhớ
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 chặn sự rò rỉ bộ nhớ.
Theo dõi thói quen sử dụng
- Không thể thay đổi Nền màn hình trong Windows 10
- Khắc phục lỗi asmtxhci.sys: SYSTEM SERVICE EXCEPTION trên Windows 10
Bạn cầ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ể truy cập Task Manager bằng cách nhấn CTRL + SHIFT + ESC và thêm các cột như Handles, User Objects, 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: Các loại bộ nhớ trong máy tính là gì?
Các công cụ của 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:
- Trình xác minh ứng dụng chẩn đoán rò rỉ đống.
- 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.
- Trace Capture để phân tích kỹ lưỡng việc sử dụng RAM.
- Xperf cũng theo dõi các mẫu phân bổ heap.
- 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ỉ.
- JavaScript Memory Leak Detector gỡ lỗi rò rỉ bộ nhớ trong mã.
Mẹo sử dụng
- Sử dụng nhân HANDLEs và các con trỏ thông minh khác cho tài nguyên Win32 và phân bổ heap.
- Nhận các lớp quản lý tài nguyên tự động để cấp phát hạt nhân từ thư viện ATL. Chuẩn C ++ có auto_ptr để phân bổ đống.
- Đóng gói các con trỏ giao diện COM trong “smart pointers” với sự trợ giúp của _com_ptr_t hoặc là _bstr_t hoặc là _variant_t.
- Theo dõi mã .NET để sử dụng bộ nhớ bất thường.
- Tránh 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.
- Chỉ sử dụng 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. Gói 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 ++.
- Luôn gọi PropVariantClear trước khi khởi động lại hoặc loại bỏ một đối tượng PROPVARIANT.
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 rò rỉ bộ nhớ. Nhưng trước khi bạn 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 quá trình không cần thiết đang chiếm quá nhiều RAM, bạn có thể kết thúc quá trình trong 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. 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ớ
Để truy cập vào sẵn Công cụ chẩn đoán bộ nhớ cho cửa sổ:
- Lưu tất cả công việc quan trọng của bạn.
- Nhấn Win + R để mở cửa sổ Run.
- Gõ lệnh mdsched.exe bên trong cửa sổ Run.
- Khởi động lại PC.
- Sau khi khởi động lại, hãy thực hiện quét cơ bản hoặc truy cập ‘Advanced‘ như ‘Test mix‘ hoặc là ‘Pass count‘.
- Nhấn F10 để bắt đầu thử nghiệm.
Đâ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 Driver
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:
- Nhấn Win + R và mở Run. Kiểu devmgmt.msc và nhấn Enter. sẽ đưa bạn đến Device Manager.
- Kiểm tra các trình điều khiển đã lỗi thời và cập nhật tất cả.
- Đối với các bản cập nhật, bạn có thể đã bỏ lỡ, hãy kiểm tra Windows Update.
4 :Tối ưu hóa hiệu suất
Đ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:
- Nhấp chuột phải vào ‘PC này’ và chọn ‘Advanced‘ cài đặt trên ngăn bên trái.
- Ở dưới cái ‘Advanced‘, đi tới ‘Performance‘, theo dõi bởi ‘Settings‘.
- Kiểm tra ‘Adjust for best performance‘ và nhấp vào OK.
- Khởi động lại 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 đang chạy khi 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 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:
- Đi đến ‘Task Manager‘.
- Đi đến ‘Startup‘.
- Tắt các chương trình khởi động bạn không cần phải chạy theo mặc định.
6 :Chống phân mảnh ổ cứng
Mặc dù Windows 10 tự động thực hiện việc này cho bạn, nhưng bạn có thể cần phải làm chống phân mảnh ổ cứng thỉnh thoảng để tối ưu hóa hiệu suất:
- Đi đến ‘This PC‘ hoặc là ‘My Computer‘.
- Nhấp chuột phải vào ổ cứng hệ thống (thường là ổ C:).
- Đi đến ‘Tools‘ dưới ‘Properties‘ và chọn ‘Optimize‘.
- Chọn ổ đĩa để chống phân mảnh và chọn ‘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 Page File mỗi khi tắt máy:
- Gõ regedit trên Search để khởi chạy Registry Editor.
- Nhập đường dẫn này:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- Thay đổi giá trị của ClearPageFileAtShutDown thành ‘1’.
- Lưu các thay đổi và Khởi động lại 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
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 sau khi vô hiệu hóa Siêu tìm nạp 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 đề:
- Tìm services.msc và đi tới Services Manager.
- Tìm ‘Superfetch‘ và nhấp chuột phải vào nó để đi tới ‘Properties‘.
- Lựa chọn ‘Stop‘.
- Cũng từ ‘Disable‘ dịch vụ từ menu thả xuống.
- 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 Windows Defender nội bộ của Windows 10 để quét và loại bỏ phần mềm độc hại. Đảm bảo rằng phần mềm 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 MSDN và Microsoft.
- Thẻ: Ký ức