Εύρεση και διόρθωση διαρροών μνήμης στα Windows 11/10

Η διαρροή μνήμης(Memory Leak) είναι μια εσφαλμένη τοποθέτηση πόρων σε ένα πρόγραμμα υπολογιστή λόγω εσφαλμένης κατανομής μνήμης. Συμβαίνει όταν μια θέση RAM που δεν χρησιμοποιείται παραμένει ακυκλοφόρητη. Μια διαρροή μνήμης δεν πρέπει να συγχέεται με μια διαρροή χώρου, η οποία αναφέρεται σε ένα πρόγραμμα που χρησιμοποιεί περισσότερη μνήμη RAM(RAM) από την απαραίτητη. Μια διαρροή μνήμης σε ένα σύστημα Windows 11/10/8/7 λέγεται ότι έλαβε χώρα όταν η μνήμη απλώς δεν είναι προσβάσιμη παρόλο που δεν χρησιμοποιείται.

Διαρροές μνήμης στα Windows 11/10

Πριν ξεκινήσετε, θα πρέπει να γνωρίζετε ότι μια διαρροή μνήμης(Memory) είναι ένα πρόβλημα λογισμικού για εντοπισμό σφαλμάτων – για παράδειγμα σε Java , JavaScript , C/C++, Windows κ.λπ. Η φυσική αντικατάσταση της μνήμης RAM(RAM) ή του σκληρού δίσκου δεν απαιτείται.

Διαρροή μνήμης στα Windows 10

Γιατί είναι κακό

Είναι προφανές ότι μια διαρροή μνήμης είναι κακή επειδή είναι ένα σφάλμα, ένα ελάττωμα στο σύστημα. Αλλά ας μάθουμε πώς ακριβώς επηρεάζει το σύστημα:

  1. Δεδομένου ότι η μνήμη δεν ελευθερώνεται ακόμη και όταν δεν χρησιμοποιείται, έχει ως αποτέλεσμα την εξάντληση της μνήμης.
  2. Η εξάντληση της μνήμης έχει ως αποτέλεσμα τη γήρανση του λογισμικού.
  3. Η μειωμένη διαθέσιμη μνήμη οδηγεί σε αυξημένο χρόνο απόκρισης και κακή απόδοση του συστήματος.
  4. Μια μη ελεγμένη διαρροή μνήμης μπορεί τελικά να οδηγήσει σε κατάρρευση μιας εφαρμογής.

Για να εντοπίσει μια διαρροή μνήμης, ένας προγραμματιστής πρέπει να έχει πρόσβαση στον πηγαίο κώδικα του προγράμματος.

Εντοπισμός της διαρροής

Για να λύσουμε ένα πρόβλημα, πρέπει πρώτα να το εντοπίσουμε. Τα βασικά βήματα για τον εντοπισμό μιας διαρροής μνήμης είναι:

  1. Επιβεβαίωση(Affirmation) : Προσδιορισμός εάν έχει σημειωθεί διαρροή.
  2. Εύρεση διαρροής μνήμης σε λειτουργία πυρήνα(Finding Kernel-mode memory leak) : Εντοπισμός διαρροής που προκαλείται από στοιχείο προγράμματος οδήγησης λειτουργίας πυρήνα.
  3. Εύρεση διαρροής μνήμης σε λειτουργία χρήστη(Finding User-mode memory leak) : Εντοπισμός διαρροής που προκαλείται από πρόγραμμα οδήγησης ή εφαρμογή σε λειτουργία χρήστη.

Εκχώρηση μνήμης

Υπάρχουν διαφορετικοί τρόποι λειτουργίας στους οποίους οι εφαρμογές εκχωρούν τη μνήμη RAM(RAM) . Εάν δεν ελευθερωθεί χώρος μετά τη χρήση, η διαρροή μνήμης θα συμβεί ανεξάρτητα από τον τρόπο εκχώρησης. Μερικά κοινά πρότυπα κατανομής είναι:

  1. Λειτουργία HealAlloc(HealAlloc) για εκχώρηση μνήμης σωρού. Τα ισοδύναμα χρόνου εκτέλεσης C/C++ είναι malloc και νέα.
  2. Λειτουργία VirtualAlloc(VirtualAlloc) για άμεση κατανομή από το λειτουργικό σύστημα.
  3. Kernel32 API(Kernel32 APIs) για τη διατήρηση της μνήμης του πυρήνα για την εφαρμογή. Παράδειγμα(Example) , CreateFile , CreateThread .
  4. User32 API και Gdi32 API.

Αποτρέψτε τις διαρροές μνήμης στα Windows

Όλοι γνωρίζουμε ότι η πρόληψη είναι καλύτερη από τη θεραπεία, επομένως εδώ είναι μερικοί τρόποι για να αποτρέψετε μια διαρροή μνήμης.

Συνήθειες παρακολούθησης

Διαρροές μνήμης στα Windows 10

Πρέπει να προσέχετε για μη φυσιολογική χρήση RAM από μεμονωμένα προγράμματα και εφαρμογές. Μπορείτε να μεταβείτε στη Διαχείριση εργασιών των Windows(Windows Task Manager) πατώντας CTRL+SHIFT+ESC και να προσθέσετε τις στήλες όπως Λαβές(Handles) , Αντικείμενα χρήστη(User Objects) , Αντικείμενα GDI(GDI Objects) κ.λπ.

Αυτό θα σας βοηθήσει να παρακολουθείτε εύκολα τη χρήση των πόρων.

Διαβάστε(Read) : Ποιοι είναι οι τύποι μνήμης σε έναν υπολογιστή;(What are the Types of Memory in a computer?)

Εργαλεία της Microsoft(Microsoft) για τη διάγνωση διαρροών μνήμης

Διάφορα εργαλεία διαγιγνώσκουν διαρροές μνήμης για διάφορες λειτουργίες κατανομής:

  1. Ο Επαληθευτής Εφαρμογών(Application Verifier) διαγιγνώσκει διαρροές σωρού.
  2. Το UMDH(UMDH) (συστατικό των Εργαλείων εντοπισμού σφαλμάτων των Windows(Windows Debugging Tools) ) διαγιγνώσκει διαρροές για μεμονωμένες διαδικασίες παρακολουθώντας τις εκχωρήσεις μνήμης σωρού.
  3. Trace Capture για ενδελεχή ανάλυση της χρήσης RAM .
  4. Το Xperf παρακολουθεί επίσης μοτίβα κατανομής σωρού.
  5. Το CRT Debug Heap(CRT Debug Heap) όχι μόνο παρακολουθεί τις εκχωρήσεις σωρού αλλά επιτρέπει επίσης πρακτικές κωδικοποίησης για την ελαχιστοποίηση των διαρροών.
  6. Ο ανιχνευτής διαρροής μνήμης JavaScript(JavaScript Memory Leak Detector) διορθώνει τις διαρροές μνήμης σε κωδικούς.

Συμβουλές χρήσης

  1. Χρησιμοποιήστε kernel HANDLE s και άλλους έξυπνους δείκτες για πόρους Win32 και εκχωρήσεις σωρού.
  2. Λάβετε(Get) μαθήματα για αυτόματη διαχείριση πόρων για εκχωρήσεις πυρήνα από τη βιβλιοθήκη ATL . Το πρότυπο C++ έχει auto_ptr για εκχωρήσεις σωρού.
  3. Ενσωματώστε δείκτες διασύνδεσης COM(Encapsulate COM) σε "έξυπνους δείκτες" με τη βοήθεια των _com_ptr_t ή _bstr_t ή _variant_t .
  4. Παρακολουθήστε(Monitor) τον κώδικα .NET για μη φυσιολογική χρήση μνήμης.
  5. Αποφύγετε(Avoid) πολλαπλές διαδρομές εξόδου για συναρτήσεις για να αφήσετε τις εκχωρήσεις να απαλλαγούν από μεταβλητές στα περισσότερα μπλοκ μέχρι το τέλος μιας συνάρτησης.
  6. Χρησιμοποιήστε(Use) εγγενείς εξαιρέσεις μόνο αφού ελευθερώσετε όλες τις εκχωρήσεις στο μπλοκ _τελικά(_finally) . Τυλίξτε(Wrap) όλες τις εκχωρήσεις σωρού και χειρισμού σε έξυπνους δείκτες για να χρησιμοποιήσετε εξαιρέσεις C++.
  7. Να καλείτε πάντα τη συνάρτηση PropVariantClear πριν αρχικοποιήσετε ξανά ή απορρίψετε ένα αντικείμενο PROPVARIANT .

Αντιμετώπιση προβλημάτων(Troubleshoot) διαρροής μνήμης στα Windows

Ακριβώς όπως οι διάφοροι τρόποι αποτροπής διαρροών μνήμης, υπάρχουν διάφοροι τρόποι για να σταματήσετε τις διαρροές μνήμης. Αλλά πριν ξεκινήσετε, θυμηθείτε να δημιουργήσετε πρώτα ένα σημείο επαναφοράς συστήματος .

1] Κλείσιμο διεργασιών και επανεκκίνηση.

Εάν δείτε ότι μια περιττή διεργασία καταλαμβάνει πολύ μεγάλη μνήμη RAM(RAM) , μπορείτε να τερματίσετε τη διαδικασία στη Διαχείριση εργασιών(Task Manager) . Θα χρειαστεί να επανεκκινήσετε τη συσκευή έτσι ώστε ο ελεύθερος χώρος να είναι διαθέσιμος για χρήση από άλλες διεργασίες. Χωρίς επανεκκίνηση(Restart) το πρόβλημα διαρροής μνήμης δεν θα λυθεί. Μια συγκεκριμένη διαδικασία που έχει σφάλματα για να επιβραδύνει τον υπολογιστή είναι το Runtime Broker . Δοκιμάστε αν η απενεργοποίηση και μόνο λειτουργεί.

2] Διαγνωστικά εργαλεία μνήμης

Windows Memory Diagnostics

Για πρόσβαση στο ενσωματωμένο Εργαλείο διάγνωσης μνήμης(Memory Diagnostic Tool) για Windows:

  1. Αποθηκεύστε όλες τις σημαντικές εργασίες σας.
  2. Πατήστε Win + R για να ανοίξετε το παράθυρο Εκτέλεση .(Run)
  3. Πληκτρολογήστε την εντολή mdsched.exe στο παράθυρο Εκτέλεση .(Run)
  4. Κάντε επανεκκίνηση του υπολογιστή.
  5. Μετά από επανεκκίνηση, εκτελέστε μια βασική σάρωση ή χρησιμοποιήστε τις επιλογές « Σύνθετες(Advanced) » όπως « Δοκιμαστική μίξη(Test mix) » ή « Αριθμός επιτυχιών(Pass count) ».
  6. Πατήστε F10 για να ξεκινήσει η δοκιμή.

Αυτές είναι ακόμα προσωρινές διορθώσεις.

3] Ελέγξτε για ενημερώσεις προγράμματος οδήγησης

Ενημέρωση λογισμικού προγράμματος οδήγησης

Τα παλιά προγράμματα οδήγησης προκαλούν διαρροές μνήμης. Διατηρήστε όλα τα προγράμματα οδήγησης ενημερωμένα :

  1. Πατήστε Win + R και ανοίξτε το παράθυρο Εκτέλεση . (Run)Πληκτρολογήστε devmgmt.msc και πατήστε Enter . Θα σας μεταφέρει στη Διαχείριση Συσκευών(Device Manager) .
  2. Ελέγξτε(Check) για παλιά προγράμματα οδήγησης και ενημερώστε τα όλα.
  3. Για ενημερώσεις, που μπορεί να χάσατε, ελέγξτε το Windows Update .

Αυτό ήταν απλό.

4] Βελτιστοποιήστε την απόδοση

Προσαρμόστε για καλύτερη απόδοση

Η προσαρμογή των Windows για απόδοση θα διαχειριστεί τα πάντα, συμπεριλαμβανομένου του προγραμματισμού του επεξεργαστή και της χρήσης της μνήμης για να σταματήσει τις διαρροές μνήμης. Ακολουθήστε αυτά τα βήματα:

  1. Κάντε δεξί κλικ στο ' This PC ' και επιλέξτε ' Advanced ' settings στο αριστερό παράθυρο.
  2. Στην καρτέλα " Για προχωρημένους(Advanced) ", μεταβείτε στην επιλογή " Απόδοση(Performance) ", ακολουθούμενη από " Ρυθμίσεις(Settings) ".
  3. Επιλέξτε « Προσαρμογή για βέλτιστη απόδοση(Adjust for best performance) » και κάντε κλικ στο OK(OK) .
  4. Κάντε επανεκκίνηση(Restart) και ελέγξτε εάν το πρόβλημα έχει λυθεί.

Εάν αυτή η απλή λύση δεν λειτούργησε, δοκιμάστε την επόμενη λύση.

5] Απενεργοποιήστε τα προγράμματα(Programs) που εκτελούνται κατά την εκκίνηση(Startup)

Προγράμματα εκκίνησης

Η απενεργοποίηση των ενοχλητικών προγραμμάτων είναι ο μόνος τρόπος για να απαλλαγείτε από το πρόβλημα διαρροής μνήμης. Μεταβείτε στη Διαχείριση εργασιών(Task Manager) και απενεργοποιήστε το πρόγραμμα αντιμετώπισης προβλημάτων. Εάν δεν γνωρίζετε ποια προγράμματα δημιουργούν το πρόβλημα, κάντε το εξής:

  1. Μεταβείτε στη « Διαχείριση εργασιών(Task Manager) ».
  2. Μεταβείτε στην " Εκκίνηση(Startup) ".
  3. Απενεργοποιήστε τα προγράμματα εκκίνησης(Disable the startup programs) που δεν χρειάζεται να εκτελείτε από προεπιλογή.

6] Ανασυγκρότηση του σκληρού δίσκου

Ανασυγκρότηση δίσκου

Αν και τα Windows 10(Windows 10) το κάνουν αυτό αυτόματα για εσάς, ίσως χρειαστεί να κάνετε ανασυγκρότηση των σκληρών δίσκων περιστασιακά για να βελτιστοποιήσετε την απόδοση:

  1. Μεταβείτε στο « Αυτός ο υπολογιστής(This PC) » ή « Ο Υπολογιστής μου(My Computer) ».
  2. Κάντε δεξί κλικ(Right-Click) στη μονάδα σκληρού δίσκου συστήματος (συνήθως μονάδα δίσκου C:).
  3. Μεταβείτε στα « Εργαλεία(Tools) » στην περιοχή « Ιδιότητες(Properties) » και επιλέξτε « Βελτιστοποίηση(Optimize) ».
  4. Επιλέξτε τη μονάδα για ανασυγκρότηση και επιλέξτε « Ανάλυση(Analyze) ».

Επανεκκινήστε τον υπολογιστή σας μετά τον νέο κατακερματισμό.

7] ClearPage File κατά τον τερματισμό

Γίνεται πολύπλοκο τώρα – αλλά μην ανησυχείτε. Δείτε πώς μπορείτε να διαγράψετε το Αρχείο σελίδας σε κάθε τερματισμό λειτουργίας(clear the Page File at every shutdown) :

  • Πληκτρολογήστε regedit στην Αναζήτηση(Search) για να εκκινήσετε τον Επεξεργαστή Μητρώου(Registry Editor) .
  • Εισαγάγετε αυτήν τη διαδρομή:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  • Αλλάξτε την τιμή του ClearPageFileAtShutDown σε '1'.( ClearPageFileAtShutDown to ‘1’.)
  • Αποθηκεύστε τις αλλαγές και επανεκκινήστε(Restart) τη συσκευή.

Αυτό πρέπει να το κάνει. Να θυμάστε ότι η διαδικασία τερματισμού λειτουργίας σας θα πάρει λίγο περισσότερο χρόνο.

9] Απενεργοποιήστε το Superfetch

Αυτή η Υπηρεσία των Windows(Windows Service) βελτιστοποιεί την απόδοση ελαχιστοποιώντας το χρόνο εκκίνησης. Επιτρέπει στα Windows(Windows) να διαχειρίζονται τη χρήση RAM . Η ζωή(Life) μετά την απενεργοποίηση του Superfetch(Superfetch) δεν είναι βολική, αλλά κάντε το αν πρέπει. Τουλάχιστον δοκιμάστε αυτό μόνο για να απομονώσετε το πρόβλημα:

  1. Αναζητήστε το services.msc και μεταβείτε στη Διαχείριση υπηρεσιών.
  2. Αναζητήστε το " Superfetch " και κάντε δεξί κλικ για να μεταβείτε στις " Ιδιότητες(Properties) ".
  3. Επιλέξτε « Διακοπή(Stop) ».
  4. Επίσης « Απενεργοποίηση(Disable) » της υπηρεσίας από το αναπτυσσόμενο μενού.
  5. Επανεκκινήστε τον υπολογιστή και ελέγξτε εάν η απόδοση έχει βελτιωθεί.

Ενεργοποιήστε το Superfetch εάν αυτό δεν λειτούργησε.

10] Ελέγξτε για κακόβουλο λογισμικό

Χρησιμοποιήστε ένα λογισμικό προστασίας από ιούς τρίτου κατασκευαστή ή το εσωτερικό Windows Defender των Windows 10 για να σαρώσετε και να εξαλείψετε κακόβουλο λογισμικό. Βεβαιωθείτε(Make) ότι το πρόγραμμα προστασίας από ιούς είναι ενημερωμένο για να υποστηρίζει το λειτουργικό σας σύστημα, ώστε να μην καταλήξει να γίνει η αιτία για τη διαρροή μνήμης.

Κάθε λύση που μπορεί να χρειαστείτε για να βρείτε ή να αποτρέψετε τις διαρροές μνήμης βρίσκεται εδώ. Μπορείτε να διαβάσετε περισσότερα σχετικά με τις διαρροές μνήμης στο MSDN και στη Microsoft .



About the author

Είμαι επιστήμονας πληροφορικής με πάνω από 10 χρόνια εμπειρίας στην ανάπτυξη λογισμικού και την ασφάλεια. Έχω έντονο ενδιαφέρον για τα παιχνίδια Firefox, Chrome και Xbox. Συγκεκριμένα, με ενδιαφέρει ιδιαίτερα πώς να βεβαιωθώ ότι ο κώδικάς μου είναι ασφαλής και αποτελεσματικός.



Related posts