Jadual Kandungan
Alat Pengesan Kebocoran Memori" >Alat Pengesan Kebocoran Memori
1, mtrace" >1, mtrace
2.memwatch" >2.memwatch
3.valgrind" >3.valgrind
4.debug_new" >4.debug_new
Ringkasan" >Ringkasan
Rumah Tutorial sistem LINUX Bagaimana untuk mengesan dan menyelesaikan kebocoran memori di bawah Linux

Bagaimana untuk mengesan dan menyelesaikan kebocoran memori di bawah Linux

Feb 12, 2024 pm 02:30 PM
linux tutorial linux sistem linux arahan linux skrip shell Penggunaan memori overflow pengendali baru embeddedlinux Bermula dengan linux pembelajaran linux

Kebocoran memori merujuk kepada fenomena bahawa program menggunakan ruang memori tetapi tidak melepaskannya tepat pada masanya semasa proses berjalan, menyebabkan semakin banyak memori yang diduduki, malah menyebabkan sistem ranap. Kebocoran memori adalah kecacatan perisian biasa dan merupakan masalah yang tidak boleh diabaikan untuk sistem Linux. Jadi, bagaimana untuk mencari dan membetulkan kebocoran memori di bawah Linux? Apakah alatan yang boleh membantu kami mengesan dan menganalisis kebocoran memori? Artikel ini akan memperkenalkan anda kepada beberapa alat kebocoran memori yang biasa digunakan di bawah Linux, membolehkan anda mengurus dan mengoptimumkan sumber memori dengan lebih baik di bawah Linux.

Linux 下如何检测和解决内存泄漏问题

Kebocoran memori boleh dibahagikan kepada kategori berikut:
1. Kebocoran ingatan yang kerap. Kod dengan kebocoran memori akan dilaksanakan beberapa kali, menyebabkan kebocoran memori setiap kali ia dilaksanakan.
2. Kebocoran memori sporadis. Kod yang menyebabkan kebocoran memori hanya akan berlaku dalam keadaan atau operasi tertentu. Kerap dan sporadis adalah relatif. Untuk keadaan tertentu, perkara yang sekali-sekala mungkin menjadi perkara biasa. Jadi persekitaran ujian dan kaedah ujian adalah penting untuk mengesan kebocoran memori.
3. Kebocoran memori satu kali. Kod yang menyebabkan kebocoran memori hanya akan dilaksanakan sekali, atau disebabkan kelemahan algoritma, akan sentiasa ada satu dan hanya satu blok memori yang bocor. Sebagai contoh, memori diperuntukkan dalam pembina kelas Singleton, tetapi memori tidak dikeluarkan dalam pemusnah. Terdapat hanya satu contoh kelas Singleton, jadi kebocoran memori hanya akan berlaku sekali.
4. Kebocoran ingatan tersirat. Program ini secara berterusan memperuntukkan memori semasa ia berjalan, tetapi tidak melepaskan memori sehingga tamat. Tegasnya, tiada kebocoran memori di sini, kerana program akhirnya mengeluarkan semua memori yang diminta. Tetapi untuk program pelayan yang perlu dijalankan selama beberapa hari, minggu atau bulan, kegagalan untuk melepaskan memori dalam masa juga boleh menyebabkan keletihan akhirnya semua memori sistem. Oleh itu, kami memanggil jenis kebocoran memori ini sebagai kebocoran ingatan tersirat.

Alat Pengesan Kebocoran Memori

Terdapat banyak cara untuk mengesan kebocoran memori sekarang. Berikut ialah senarai alat pengesan kebocoran memori yang biasa digunakan di Linux.

1, mtrace

Persekitaran aplikasi: Linux GLIBC

Bahasa pengaturcaraan: C

Arahan penggunaan: Sertakan fail pengepala mcheck.h, tentukan pembolehubah persekitaran MALLOC_TRACE sebagai nama fail output dan panggil mtrace() apabila program bermula.

Keluaran hasil: fail yang ditentukan pengguna

Idea reka bentuk: Tambahkan fungsi cangkuk pada fungsi malloc, realloc dan bebas, dan rekod pelaksanaan setiap pasangan bebas malloc

Kebaikan dan keburukan: Hanya kebocoran memori yang disebabkan oleh penggunaan malloc/realloc/free boleh diperiksa

Cara mendapatkannya: GLIBC disertakan dan boleh digunakan terus

2.memwatch

Persekitaran aplikasi: Linux

Bahasa pengaturcaraan: C

Arahan: Tambah memwatch.h, tambah -DMEMWATCH -DMW_STDIO dan memwatch.c semasa menyusun

Output hasil: Nama fail output ialah memwatch.log Semasa pelaksanaan program, gesaan ralat akan dipaparkan pada stdout

Idea reka bentuk: Takrif semula malloc/realloc/calloc/strdup/free, dsb. sebagai mwMalloc(sz, FILE, LINE), dsb., dan mengekalkan senarai terpaut operasi secara dalaman

Kebaikan dan keburukan: Boleh mengesan memori bebas dua kali, bebas ralat, tidak bebas, limpahan, aliran bawah, dll.

Bagaimana untuk mendapatkan: http://memwatch.sourceforge.net/

3.valgrind

Persekitaran aplikasi: Linux

Bahasa pengaturcaraan: C/C++

Cara menggunakan: Tambahkan pilihan -g semasa menyusun, seperti nama fail gcc -g.c -o, dan gunakan arahan berikut untuk mengesan penggunaan memori:

Keluaran hasil: #valgrind –tool=memcheck –leak-check=yes –show-reachable=yes ./nama fail, anda akan melihat laporan penggunaan memori

Idea reka bentuk: Kekalkan jadual ruang alamat yang sah dan jadual ruang alamat tidak sah (ruang alamat proses) mengikut operasi memori perisian

Kebaikan dan keburukan: Keupayaan untuk mengesan:

  • Penggunaan memori yang tidak dimulakan
  • Menggunakan memori yang telah dibebaskan (Membaca/menulis memori selepas ia dibebaskan)
  • Menggunakan lebih banyak ruang memori daripada yang diperuntukkan malloc (Membaca/menulis hujung blok malloc'd)
  • Akses tidak sah kepada timbunan (Membaca/menulis kawasan yang tidak sesuai pada timbunan)
  • Sama ada ruang yang digunakan telah dikeluarkan (Memori bocor – di mana penunjuk kepada blok malloc'd hilang selama-lamanya)
  • Penggunaan malloc/baru/baru [] yang tidak sepadan lwn percuma/padam/padam [])
  • Penunjuk src dan dst bertindih dalam memcpy() dan fungsi berkaitan)
  • Ulang percuma

Cara untuk mendapatkan: http://valgrind.org/

4.debug_new

Persekitaran aplikasi: Linux/Windows

Bahasa pengaturcaraan: C++

Arahan: Sertakan fail pengepala debug_new.h, pautan debug_new.cpp

Keluaran hasil: konsol

Idea reka bentuk: Tangkap permintaan aplikasi/keluaran memori dengan melebihkan operator baharu dan padam, dan kekalkan senarai cincang pembolehubah statik global di dalam program. Dalam pengendali baharu, ia bukan sahaja memperuntukkan memori yang diminta oleh pengguna, tetapi juga menambah pengepala kepada setiap memori yang diperuntukkan, yang menyimpan maklumat lokasi dan penunjuk senarai terpaut bagi peruntukan tersebut kepala mengimbangi memori, dan nilai pulangan ini telah dikira HASH sebelum ini dan ditambah pada senarai terpaut HASH. Apabila memadam, mula-mula lakukan pengiraan HASH berdasarkan alamat penuding yang akan dikeluarkan, dan kemudian lintasi senarai terpaut pada nilai HASH tatasusunan untuk mencari Jika ditemui, nod akan dialih keluar. Dengan cara ini, selepas program tamat, kita boleh menentukan sama ada terdapat kebocoran memori dengan menyemak sama ada terdapat sebarang blok memori yang belum dikeluarkan dalam tatasusunan ini.

Kebaikan dan keburukan: merentas platform, hanya untuk program C++,

Cara mendapatkan: http://www.ibm.com/developerworks/cn/linux/l-mleak2/index.html

Ringkasan

Kaedah yang digunakan oleh alat analisis di atas boleh dibahagikan secara kasar kepada kategori berikut:

1. Daftarkan peruntukan memori/lepaskan fungsi cangkuk (cangkuk). Di bawah Linux, terdapat lima fungsi cangkuk seperti malloc_hook dan free_hook Di bawah Windows, anda boleh mendaftarkan fungsi cangkuk _CrtSetAllocHook, supaya permintaan ini boleh ditangkap dan diproses apabila memori diperuntukkan. Pengesan Kebocoran Visual dan mtrace menggunakan kaedah ini.

2. Gunakan penggantian definisi makro. Gantikan malloc dan percuma dalam kod pengguna dengan fungsi tersuai seperti mwMalloc(sz, FILE, LINE) yang ditentukan makro untuk menjejaki permintaan memori menggunakan kaedah ini.

3. Operator berlebihan. Kaedah ini hanya digunakan dalam bahasa C++ Ia melaksanakan permintaan memori penjejakan dengan melebihkan operator baharu dan padamkan operator yang terlebih beban adalah serupa dengan maksud fungsi cangkuk. debug_new mengambil pendekatan ini.

Kaedah keluaran alatan ini juga terbahagi kepada jenis berikut:

1. Dalam keadaan biasa, output biasanya dihantar ke tetingkap penyahpepijatan sendiri, dan output aplikasi GUI ke output standard tidak kelihatan. Pengesan Kebocoran Visual menggunakan kaedah ini.

2. Output ke output standard atau output ralat standard: Aplikasi konsol boleh mengeluarkan ke skrin, seperti memwatch, valgrind dan debug_new semuanya menggunakan kaedah ini.

3. Output ke fail log: Output hasil ke fail log yang ditentukan pengguna atau lalai, seperti mtrace dan memwatch.

Selain itu, kaedah pengesanan memori alat ini terbahagi kepada dua jenis:

1. Kekalkan senarai terpaut operasi memori Apabila terdapat operasi aplikasi memori, ia ditambahkan ke senarai terpaut ini Apabila terdapat operasi keluaran, operasi aplikasi dialih keluar dari senarai terpaut. Jika masih terdapat kandungan dalam senarai terpaut selepas program tamat, ini bermakna terdapat kebocoran memori jika operasi memori yang akan dikeluarkan tidak menemui operasi yang sepadan dalam senarai terpaut, ini bermakna ia telah dikeluarkan beberapa kali; . Gunakan kaedah ini dengan alat penyahpepijatan terbina dalam, Pengesan Kebocoran Visual, mtrace, memwatch, debug_new.

2. Simulasikan ruang alamat proses. Berikutan pengendalian sistem pengendalian operasi memori proses, pemetaan ruang alamat dikekalkan dalam mod pengguna Kaedah ini memerlukan pemahaman yang mendalam tentang pengendalian ruang alamat proses. Oleh kerana pengedaran ruang alamat proses Windows bukan sumber terbuka, sukar untuk disimulasikan, jadi ia hanya disokong pada Linux. Yang mengambil pendekatan ini ialah valgrind.

Melalui artikel ini, anda seharusnya mempunyai pemahaman asas tentang masalah kebocoran memori di bawah Linux, dan mengetahui punca, kesan dan penyelesaiannya. Anda juga mempelajari tentang beberapa alat kebocoran memori yang biasa digunakan di bawah Linux, seperti Valgrind, Memwatch, Mtrace, dsb., serta kaedah penggunaan, kelebihan dan kekurangannya. Kami mengesyorkan agar anda menggunakan alat ini untuk mengesan dan menganalisis kebocoran memori semasa membangunkan dan menguji program Linux untuk meningkatkan prestasi dan kestabilan program. Pada masa yang sama, kami juga mengingatkan anda untuk memberi perhatian kepada beberapa langkah berjaga-jaga dan sekatan apabila menggunakan alat ini untuk mengelakkan salah penilaian atau ketinggalan. Saya harap artikel ini dapat membantu anda menggunakan sistem Linux dengan lebih baik dan membolehkan anda menulis program berkualiti tinggi di bawah Linux.

Atas ialah kandungan terperinci Bagaimana untuk mengesan dan menyelesaikan kebocoran memori di bawah Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Memulakan Apache Cara Memulakan Apache Apr 13, 2025 pm 01:06 PM

Langkah-langkah untuk memulakan Apache adalah seperti berikut: Pasang Apache (perintah: sudo apt-get pemasangan apache2 atau muat turun dari laman web rasmi) Mula Apache (linux: Sudo Systemctl Mula Apache2; Windows: Klik kanan "Apache2.4" Perkhidmatan dan pilih "Mula") Boot secara automatik (Pilihan, Linux: Sudo Systemctl

Apa yang Harus Dilakukan Sekiranya Pelabuhan Apache80 Diduduki Apa yang Harus Dilakukan Sekiranya Pelabuhan Apache80 Diduduki Apr 13, 2025 pm 01:24 PM

Apabila port Apache 80 diduduki, penyelesaiannya adalah seperti berikut: Cari proses yang menduduki pelabuhan dan tutupnya. Semak tetapan firewall untuk memastikan Apache tidak disekat. Jika kaedah di atas tidak berfungsi, sila buat semula Apache untuk menggunakan port yang berbeza. Mulakan semula perkhidmatan Apache.

Cara Memantau Prestasi SSL Nginx di Debian Cara Memantau Prestasi SSL Nginx di Debian Apr 12, 2025 pm 10:18 PM

Artikel ini menerangkan bagaimana untuk memantau prestasi SSL pelayan Nginx secara berkesan pada sistem Debian. Kami akan menggunakan NginXExporter untuk mengeksport data status nginx ke Prometheus dan kemudian memaparkannya secara visual melalui Grafana. Langkah 1: Mengkonfigurasi Nginx Pertama, kita perlu mengaktifkan modul Stub_status dalam fail konfigurasi Nginx untuk mendapatkan maklumat status nginx. Tambahkan coretan berikut dalam fail konfigurasi nginx anda (biasanya terletak di /etc/nginx/nginx.conf atau termasuk fail): lokasi/nginx_status {stub_status

Cara Menyiapkan Bin Kitar Semula dalam Sistem Debian Cara Menyiapkan Bin Kitar Semula dalam Sistem Debian Apr 12, 2025 pm 10:51 PM

Artikel ini memperkenalkan dua kaedah mengkonfigurasi tong kitar semula dalam sistem Debian: antara muka grafik dan baris arahan. Kaedah 1: Gunakan antara muka grafik Nautilus untuk membuka Pengurus Fail: Cari dan mulakan Pengurus Fail Nautilus (biasanya dipanggil "Fail") dalam menu desktop atau aplikasi. Cari tong kitar semula: Cari folder bin kitar semula di bar navigasi kiri. Jika tidak dijumpai, cuba klik "Lokasi Lain" atau "Komputer" untuk mencari. Konfigurasikan Properties Bin Recycle: Klik kanan "Bin Kitar Semula" dan pilih "Properties". Dalam tetingkap Properties, anda boleh menyesuaikan tetapan berikut: Saiz maksimum: Hadkan ruang cakera yang terdapat dalam tong kitar semula. Masa pengekalan: Tetapkan pemeliharaan sebelum fail dipadamkan secara automatik di tong kitar semula

Cara memulakan semula pelayan Apache Cara memulakan semula pelayan Apache Apr 13, 2025 pm 01:12 PM

Untuk memulakan semula pelayan Apache, ikuti langkah -langkah ini: Linux/MacOS: Run Sudo SystemCtl Restart Apache2. Windows: Jalankan Net Stop Apache2.4 dan kemudian Net Start Apache2.4. Jalankan Netstat -A | Cari 80 untuk memeriksa status pelayan.

Cara Mengoptimumkan Prestasi Debian Readdir Cara Mengoptimumkan Prestasi Debian Readdir Apr 13, 2025 am 08:48 AM

Dalam sistem Debian, panggilan sistem Readdir digunakan untuk membaca kandungan direktori. Jika prestasinya tidak baik, cuba strategi pengoptimuman berikut: Memudahkan bilangan fail direktori: Split direktori besar ke dalam pelbagai direktori kecil sebanyak mungkin, mengurangkan bilangan item yang diproses setiap panggilan readdir. Dayakan Caching Kandungan Direktori: Bina mekanisme cache, kemas kini cache secara teratur atau apabila kandungan direktori berubah, dan mengurangkan panggilan kerap ke Readdir. Cafh memori (seperti memcached atau redis) atau cache tempatan (seperti fail atau pangkalan data) boleh dipertimbangkan. Mengamalkan struktur data yang cekap: Sekiranya anda melaksanakan traversal direktori sendiri, pilih struktur data yang lebih cekap (seperti jadual hash dan bukannya carian linear) untuk menyimpan dan mengakses maklumat direktori

Bagaimana Debian Readdir Bersepadu Dengan Alat Lain Bagaimana Debian Readdir Bersepadu Dengan Alat Lain Apr 13, 2025 am 09:42 AM

Fungsi Readdir dalam sistem Debian adalah panggilan sistem yang digunakan untuk membaca kandungan direktori dan sering digunakan dalam pengaturcaraan C. Artikel ini akan menerangkan cara mengintegrasikan Readdir dengan alat lain untuk meningkatkan fungsinya. Kaedah 1: Menggabungkan Program Bahasa C dan Pipeline Pertama, tulis program C untuk memanggil fungsi Readdir dan output hasilnya:#termasuk#termasuk#includeintMain (intargc, char*argv []) {dir*dir; structdirent*entry; if (argc! = 2) {

Kepentingan Sniffer Debian dalam Pemantauan Rangkaian Kepentingan Sniffer Debian dalam Pemantauan Rangkaian Apr 12, 2025 pm 11:03 PM

Walaupun hasil carian tidak secara langsung menyebut "debiansniffer" dan aplikasi khususnya dalam pemantauan rangkaian, kita dapat menyimpulkan bahawa "sniffer" merujuk kepada alat analisis penangkapan paket rangkaian, dan aplikasinya dalam sistem Debian tidak pada dasarnya berbeza daripada pengagihan Linux yang lain. Pemantauan rangkaian adalah penting untuk mengekalkan kestabilan rangkaian dan mengoptimumkan prestasi, dan alat analisis menangkap paket memainkan peranan utama. Berikut ini menerangkan peranan penting alat pemantauan rangkaian (seperti sniffer yang berjalan dalam sistem Debian): Nilai alat pemantauan rangkaian: FAST FAULT Lokasi: Pemantauan masa nyata metrik rangkaian, seperti penggunaan jalur lebar, latensi, kadar kehilangan paket, dan lain-lain, yang dapat dengan cepat mengenal pasti punca akar kegagalan rangkaian dan memendekkan masa masalah masalah.

See all articles