メモリリーク(Memory Leak)は、メモリ割り当ての誤りによるコンピュータプログラムのリソースの置き忘れです。これは、使用されていないRAMの場所が解放されていない場合に発生します。メモリリークは、必要以上にRAM(RAM)を使用するプログラムを指すスペースリークと混同しないでください。Windows 11/10/8/7システムでのメモリリークは、使用されていないにもかかわらずメモリにアクセスできないときに発生したと言われています。
Windows11/10のメモリリーク
始める前に、メモリ(Memory)リークはデバッグするソフトウェアの問題であることを知っておく必要があります。たとえば、Java、JavaScript、C / C ++、Windowsなど(Windows)です。RAM(RAM)やハードディスクを物理的に交換する必要はありません。
なぜ悪いのですか
これはバグであり、システムの欠陥であるため、メモリリークが悪いことは明らかです。しかし、それがシステムにどのように影響するかを正確に調べてみましょう。
- 使用していないときでもメモリが解放されないため、メモリが枯渇します。
- メモリが使い果たされると、ソフトウェアが古くなります。
- 使用可能なメモリが減少すると、応答時間が長くなり、システムのパフォーマンスが低下します。
- チェックされていないメモリリークは、最終的にアプリケーションのクラッシュにつながる可能性があります。
メモリリークを特定するには、プログラマはプログラムのソースコードにアクセスできる必要があります。
リークの特定
問題を解決するには、まず問題を特定する必要があります。メモリリークを特定するための基本的な手順は次のとおりです。
- 確認(Affirmation):リークが発生したかどうかを判断します。
- カーネルモードのメモリリーク(Finding Kernel-mode memory leak)の検出:カーネルモードのドライバコンポーネントによって引き起こされたリークの検出。
- ユーザーモードのメモリリーク(Finding User-mode memory leak)の検出:ユーザーモードのドライバーまたはアプリによって引き起こされたリークの検出。
メモリ割り当て
アプリケーションがRAM(RAM)を割り当てるさまざまなモードがあります。使用後にスペースが解放されない場合、割り当てのモードに関係なく、メモリリークが発生します。一般的な割り当てパターンは次のとおりです。
- (HealAlloc)ヒープメモリ割り当てのためのHealAlloc関数。C / C ++ランタイムに相当するものは、mallocとnewです。
- (VirtualAlloc)OSから直接割り当てるためのVirtualAlloc関数。
- (Kernel32 APIs)アプリのカーネルメモリを保持するKernel32API 。例(Example)、CreateFile、CreateThread。
- User32APIとGdi32API。
Windowsでのメモリリークを防ぐ
予防は治療よりも優れていることは誰もが知っているので、メモリリークを防ぐ方法をいくつか紹介します。
モニタリングの習慣
個々のプログラムやアプリケーションによる異常なRAM使用量に注意する必要があります。CTRL+SHIFT+ESCを押してWindowsタスクマネージャー(Windows Task Manager)に移動し、ハンドル(Handles)、ユーザーオブジェクト(User Objects)、GDIオブジェクト(GDI Objects)などの列を追加できます。
これにより、リソースの使用状況を簡単に監視できます。
読む(Read):コンピュータのメモリの種類は何ですか?(What are the Types of Memory in a computer?)
メモリリークを診断するためのMicrosoft(Microsoft)ツール
さまざまなツールが、さまざまな割り当てモードのメモリリークを診断します。
- Application Verifierは、ヒープリークを診断します。
- UMDH(Windowsデバッグツール(Windows Debugging Tools)のコンポーネント)は、ヒープメモリの割り当てを監視することにより、個々のプロセスのリークを診断します。
- RAM使用量を徹底的に分析するためのトレースキャプチャ(Capture)。
- Xperfもヒープ割り当てパターンを追跡します。
- CRT Debug Heapは、ヒープの割り当てを追跡するだけでなく、コーディング手法によってリークを最小限に抑えることもできます。
- JavaScriptメモリリークディテクタ(JavaScript Memory Leak Detector)は、コード内のメモリリークをデバッグします。
使用上のヒント
- Win32リソースとヒープ割り当てには、カーネルHANDLEおよびその他のスマートポインタを使用します。
- (Get)ATLライブラリからカーネル割り当ての自動リソース管理用のクラスを取得します。C ++標準には、ヒープ割り当て用のauto_ptrがあります。(auto_ptr )
- (Encapsulate COM)_com_ptr_tまたは_bstr_tまたは_variant_tを使用して、 (_variant_t)COMインターフェイスポインターを「スマートポインター」内にカプセル化します。
- (Monitor).NETコードで異常なメモリ使用量を監視します。
- 関数の複数の出口パスを避け(Avoid)て、関数の終わりまでにほとんどのブロックの変数から割り当てを解放できるようにします。
- (Use)ネイティブ例外は、_finallyブロック内のすべての割り当てを解放した後にのみ使用してください。C ++例外を使用するために、すべてのヒープをラップし、割り当てをスマートポインターに処理します。(Wrap)
- PROPVARIANTオブジェクトを再初期化または破棄する前に、必ずPropVariantClear関数を呼び出してください。
(Troubleshoot)Windowsでのメモリリークのトラブルシューティング
メモリリークを防ぐさまざまな方法と同様に、メモリリークを防ぐさまざまな方法があります。ただし、始める前に、まずシステムの復元ポイントを作成することを忘れないでください。
1]プロセスを閉じて再起動します。
不要なプロセスがRAMを大量に消費していることがわかった場合は、(RAM)タスクマネージャー(Task Manager)でプロセスを終了できます。解放されたスペースを他のプロセスで使用できるようにするには、デバイスを再起動する必要があります。再起動(Restart)しないと、メモリリークの問題は解決されません。PCの速度を低下させるバグがある特定のプロセスの1つは、RuntimeBroker(Runtime) です(Broker)。それを無効にするだけでうまくいくか試してみてください。
2]メモリ診断ツール
Windows用の組み込みのメモリ診断ツールにアクセスするには:(Memory Diagnostic Tool)
- 重要な作業をすべて保存します。
- Win + Rを押して、実行(Run)ウィンドウを開きます。
- [実行(Run)]ウィンドウにコマンドmdsched.exeを入力します。
- PCを再起動します。
- 再起動後、基本スキャンを実行するか、 「テストミックス(Test mix)」や「パスカウント」などの「(Pass count)詳細(Advanced)」オプションを選択します。
- F10を押してテストを開始します。
これらはまだ一時的な修正です。
3]ドライバーの更新を確認します
古いドライバはメモリリークを引き起こします。すべてのドライバーを最新の状態に保ちます:
- Win + Rを押して、実行(Run)ウィンドウを開きます。devmgmt.mscと入力し、 Enterキー(Enter)を(devmgmt.msc)押します。デバイスマネージャ(Device Manager)に移動します。
- 古いドライバーを確認(Check)し、それらをすべて更新します。
- アップデートについては、見逃している可能性があります。WindowsUpdate(Windows Update)をチェックインしてください。
これは簡単でした。
4]パフォーマンスを最適化する
Windowsのパフォーマンスを調整すると、プロセッサのスケジューリングやメモリ使用量を含むすべてが管理され、メモリリークが防止されます。次の手順を実行します:
- 「このPC(This PC) 」を右クリックし、左側のペインで「詳細(Advanced)設定」を選択します。
- [詳細(Advanced)設定]タブで、[パフォーマンス]、 (Performance)[設定](Settings)の順に移動します。
- [最高のパフォーマンスに調整する(Adjust for best performance)]をオンにして、[ OK ]をクリックします。
- 再起動(Restart)して、問題が解決したかどうかを確認します。
この単純な解決策が機能しなかった場合は、次の解決策を試してください。
5]起動(Startup)時に実行されているプログラム(Programs)を無効にする
面倒なプログラムを無効にすることが、メモリリークの問題を取り除く唯一の方法です。タスクマネージャ(Task Manager)に移動し、トラブルシューティングプログラムを無効にします。どのプログラムが問題を引き起こしているのかわからない場合は、次のようにします。
- 「タスクマネージャ(Task Manager)」に移動します。
- 「スタートアップ(Startup)」に移動します。
- (Disable the startup programs)デフォルトで実行する必要のないスタートアッププログラムを無効にします。
6]ハードドライブのデフラグ
Windows 10はこれを自動的に実行しますが、パフォーマンスを最適化するために、ハードドライブのデフラグを時々行う必要がある場合があります。
- 「このPC(This PC)」または「マイコンピュータ(My Computer)」に移動します。
- (Right-Click)システムのハードドライブ(通常はC:ドライブ)を右クリックします。
- 「プロパティ(Properties)」の下の「ツール(Tools)」に移動し、 「最適化(Optimize)」を選択します。
- デフラグするドライブを選択し、「分析(Analyze)」を選択します。
新しい断片化の後でコンピュータを再起動します。
7]シャットダウン時のClearPageファイル
今は複雑になっていますが、心配しないでください。シャットダウンするたびにページファイル(clear the Page File at every shutdown)をクリアする方法は次のとおりです。
- 検索(Search)でregeditと入力(regedit)して、レジストリエディタ(Registry Editor)を起動します。
- 次のパスを入力します。
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- ClearPageFileAtShutDown( ClearPageFileAtShutDown to ‘1’.)の値を「1」に変更します。
- 変更を保存して、デバイスを再起動(Restart)します。
これはそれをするべきです。シャットダウンプロセスにはもう少し時間がかかることを忘れないでください。
9]スーパーフェッチを無効にする
このWindowsサービス(Windows Service)は、起動時間を最小限に抑えることでパフォーマンスを最適化します。これにより、 Windowsで(Windows)RAMの使用量を管理できます。Superfetchを無効にした後の生活(Life)は便利ではありませんが、必要に応じて行ってください。少なくともこれを単独で試して、問題を特定してください。
- services.mscを検索し、ServicesManagerに移動します。
- 「 Superfetch 」を探して右クリックし、「Properties」に移動します。
- 「停止(Stop)」を選択します。
- また、ドロップダウンメニューからサービスを「無効にする」。(Disable)
- PCを再起動し、パフォーマンスが向上したかどうかを確認します。
これが機能しなかった場合は、スーパーフェッチを有効にします。
10]マルウェアをチェックします
サードパーティのウイルス対策ソフトウェアまたはWindows10の社内WindowsDefenderを使用して、マルウェアをスキャンして排除します。OS(Make)をサポートするようにアンチウイルスが更新されていることを確認して、メモリリークの原因にならないようにします。
メモリリークを見つけたり防止したりする必要があるかもしれないすべての解決策がここにあります。メモリリークの詳細については、MSDNおよびMicrosoftを参照してください。
Find and fix Memory Leaks in Windows 11/10
A Memory Leak is a misplacement of resources in a computer program due to faulty memory allocation. It happens when a RAM location not in use remains unreleased. A memory leak is not to be confused with a space leak, which refers to a program using more RAM than necessary. A memory leak on a Windows 11/10/8/7 system is said to have taken place when the memory is just not accessible despite not being in use.
Memory Leaks in Windows 11/10
Before you begin, you should know that a Memory leak is a software issue to debug – for example in Java, JavaScript, C/C++, Windows, etc. Physically replacing RAM or hard disk isn’t required.
Why is it bad
It is obvious a memory leak is bad because it is a bug, a flaw in the system. But let’s find out how exactly it affects the system:
- Since the memory is not freed even when not in use, it results in memory depletion.
- Exhaustion of the memory results in software aging.
- Reduced available memory leads to increased response time and poor performance by the system.
- An unchecked memory leak can eventually lead to the crash of an application.
In order to identify a memory leak, a programmer needs to have access to the source code of the program.
Locating the leak
In order to solve a problem, we need to identify it first. The basic steps to locate a memory leak are:
- Affirmation: Determining whether a leak has occurred.
- Finding Kernel-mode memory leak: Locating a leak caused by a kernel-mode driver component.
- Finding User-mode memory leak: Locating a leak caused by a user-mode driver or app.
Memory allocation
There are different modes in which applications allocate RAM. If space is not freed after use, the memory leak will occur irrespective of the mode of allocation. Some common allocation patterns are:
- HealAlloc function for heap memory allocation. The C/C++ runtime equivalents are malloc and new.
- VirtualAlloc function for direct allocation from OS.
- Kernel32 APIs to hold kernel memory for the app. Example, CreateFile, CreateThread.
- User32 APIs and Gdi32 APIs.
Prevent memory leaks in Windows
We all know prevention is better than cure so here are some ways to prevent a memory leak.
Monitoring habits
You need to keep an eye out for abnormal RAM usage by individual programs and applications. You can go to the Windows Task Manager by pressing CTRL+SHIFT+ESC and add the columns like Handles, User Objects, GDI Objects, etc.
This will help you easily monitor resource usage.
Read: What are the Types of Memory in a computer?
Microsoft tools to diagnose memory leaks
Various tools diagnose memory leaks for various allocation modes:
- Application Verifier diagnoses heap leaks.
- UMDH ( a component of Windows Debugging Tools) diagnoses leaks for individual processes by monitoring heap memory allocations.
- Trace Capture for a thorough analysis of RAM usage.
- Xperf too tracks heap allocation patterns.
- CRT Debug Heap not only tracks heap allocations but also enables coding practices to minimize leaks.
- JavaScript Memory Leak Detector debugs memory leaks in codes.
Usage Tips
- Use kernel HANDLEs and other smart pointers for Win32 resources and heap allocations.
- Get classes for automatic resource management for kernel allocations from the ATL library. C++ standard has auto_ptr for heap allocations.
- Encapsulate COM interface pointers within “smart pointers” with the help of _com_ptr_t or _bstr_t or _variant_t.
- Monitor the .NET code for abnormal memory usage.
- Avoid multiple exit paths for functions to let allocations be freed from variables in most blocks by the end of a function.
- Use native exceptions only after freeing all allocations in the _finally block. Wrap all heap and handle allocations into smart pointers in order to use C++ exceptions.
- Always call the PropVariantClear function before reinitializing or discarding a PROPVARIANT object.
Troubleshoot memory leaks in Windows
Just like the various ways to prevent memory leaks, there are various ways to stop memory leaks. But before you begin, remember to create a system restore point first.
1] Close processes and restart.
If you see an unnecessary process is taking up too much RAM, you can end the process in the Task Manager. You will need to restart the device so that the freed space is available for use by other processes. Without a Restart memory leak issue won’t be solved. One particular process that has bugs to slow down the PC is Runtime Broker. Try if disabling that alone works.
2] Memory Diagnostic Tools
To access the inbuilt Memory Diagnostic Tool for Windows:
- Save all your important work.
- Press Win + R to open the Run window.
- Type the command mdsched.exe in the Run window.
- Restart the PC.
- After a restart, perform a basic scan or go for the ‘Advanced’ options like ‘Test mix’ or ‘Pass count’.
- Press F10 to start the test.
These are still temporary fixes.
3] Check for Driver updates
Outdated drivers cause memory leaks. Keep all drivers updated:
- Press Win + R and open the Run window. Type devmgmt.msc and press Enter. It will take you to the Device Manager.
- Check for outdated drivers and update them all.
- For updates, you might have missed, check in Windows Update.
This was simple.
4] Optimize performance
Adjusting Windows for performance will manage everything including processor scheduling and memory usage to stop memory leaks. Follow these steps:
- Right-click on ‘This PC’ and select ‘Advanced’ settings on the left pane.
- Under the ‘Advanced’ tab, go to ‘Performance’, followed by ‘Settings’.
- Check ‘Adjust for best performance’ and click OK.
- Restart and check if the issue is solved.
If this simple solution did not work, try the next solution.
5] Disable Programs running on Startup
Disabling the troublesome programs is the only way to get rid of the memory leak issue. Go to Task Manager and disable the troublemaking program. If you don’t know which programs are creating the trouble, do this:
- Go to ‘Task Manager’.
- Go to ‘Startup’.
- Disable the startup programs you don’t need to run by default.
6] Defrag Hard Drive
Although Windows 10 does this for you automatically, you may need to do defrag the hard drives occasionally to optimize performance:
- Go to ‘This PC’ or ‘My Computer’.
- Right-Click the system hard drive (usually C: drive).
- Go to ‘Tools‘ under ‘Properties‘ and select ‘Optimize’.
- Select the drive to defrag and select ‘Analyze’.
Restart your computer after the new fragmentation.
7] ClearPage File at shutdown
It is getting complex now – but don’t worry. Here’s how to clear the Page File at every shutdown:
- Type regedit on Search to launch the Registry Editor.
- Enter this path:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- Change the value of ClearPageFileAtShutDown to ‘1’.
- Save the changes and Restart the device.
This ought to do it. Do remember that your shutdown process will take a little more time.
9] Disable Superfetch
This Windows Service optimizes performance by minimizing boot time. It lets Windows manage RAM usage. Life after disabling Superfetch is not convenient but do it if you must. At least try this alone to isolate the problem:
- Search services.msc and go to Services Manager.
- Look for ‘Superfetch’ and right-click it to go to ‘Properties’.
- Select ‘Stop’.
- Also ‘Disable’ the service from the drop-down menu.
- Restart the PC and check if the performance has improved.
Enable Superfetch if this one didn’t work.
10] Check for malware
Use a third-party antivirus software or Windows 10’s in-house Windows Defender to scan and eliminate malware. Make sure the antivirus is updated to support your OS so that it doesn’t end up becoming the reason for the memory leak.
Every solution you might ever need to find or prevent memory leaks is right here. You can read more about memory leaks on MSDN and Microsoft.