Cara Mengesan Kebocoran Memori di Ubuntu



Cuba Instrumen Kami Untuk Menghapuskan Masalah

Terdapat beberapa sebab kebocoran memori mungkin berlaku di Ubuntu, tetapi untungnya, jelas apabila ia berlaku. Kod kereta sering menjadi alasan terbesar, kerana pengaturcara mungkin tidak berkesempatan untuk memeriksa untuk memastikan memori yang tidak diperlukan lagi dilepaskan. Sekiranya anda memasang pakej yang tidak stabil atau menyusun kod dari sumber, maka anda mungkin menghadapi kebocoran memori untuk alasan ini. Anda mungkin akan mula memerhatikannya kerana pakej aplikasi perisian mula mengeluh kerana kehabisan ingatan apabila anda memasang RAM fizikal lebih daripada cukup.



Sekiranya anda bimbang tentang kebocoran memori, cuba taip percuma berulang kali ke terminal. Sekiranya anda tiba-tiba mula melihat penggunaan RAM berkembang dengan cepat, anda sudah dapat mengesan kebocoran memori. Sekiranya anda menerima ralat yang membaca sesuatu seperti bash: Memori tidak mencukupi semasa melakukan ini dan anda tidak mempunyai terminal atau hanya konsol maya yang terbuka, maka anda hampir tidak berurusan dengan satu. Sebilangan kebocoran memori boleh menjadi sedikit lebih halus, tetapi Ubuntu dan pelbagai alat dan pakej ciri-ciri yang dapat membantu anda mengesannya.



Mengesan Kebocoran Memori di Ubuntu

Oleh kerana alat yang digunakan untuk mengesan kebocoran memori terutama didasarkan pada permintaan CLI, tidak masalah versi Ubuntu yang anda jalankan. Ini harus berfungsi dengan baik di dalam terminal Unity di Ubuntu biasa, dari konsol maya di Ubuntu Server, dari lxterm di Lubuntu, Konsole di Kubuntu atau bahkan di dalam Xfce di Xubuntu. Cuba lakukan tugas mudah seperti sudo -s dan taip kata laluan anda untuk memulakan.



Ini akan memberi anda shell root jika dilakukan dengan betul, tetapi boleh menyebabkan kesalahan memori jika anda bekerja dengan kebocoran yang sudah terlalu jauh. Sekiranya anda benar-benar dapat mengakses root shell, cuba ketik echo 3> / proc / sys / m / drop_caches, tekan kekunci enter dan kemudian ketik keluar. Cuba jalankan percuma atau percuma -m untuk melihat apakah itu membantu melepaskan memori.

Beberapa pengaturcara berpendapat bahawa tidak ada gunanya memaksa Kernel melepaskan cache-nya, kerana mereka harus dibersihkan dan dengan itu menuntut semula sebaik sahaja memori fizikal tambahan diperlukan. Walau bagaimanapun, semasa memaksa cache ini akan merosakkan prestasi sistem, ingatlah bahawa ini hanyalah ujian. Setelah anda menghidupkan semula sistem, Kernel Linux sekali lagi akan mengumpulkan memori cache seperti yang mereka ada di tempat pertama.

Sebilangan orang mencadangkan penambahan penyegerakan baris; sudo echo 3> / proc / sys / vm / drop_caches ke skrip yang cron berjalan secara konsisten, tetapi ini mengalahkan tujuan cache memori di tempat pertama. Memori bebas itu sendiri hanyalah RAM yang tidak digunakan, dan itu bermaksud bahawa data harus dimuat dari jauh lebih lambatelektromekanikal atau peranti simpanan NAND. Tidak kira seberapa cepat peranti ini, mereka tidak secepat RAM, yang bermaksud bahawa walaupun anda harus memperbaiki kebocoran memori, anda seharusnya tidak mengganggu sistem cache setelah anda menetapkannya ke tetapan yang optimum.



Sekiranya anda memutuskan bahawa anda benar-benar mengalami kebocoran memori yang konsisten yang berlaku secara berkala semasa menggunakan mesin anda dan tidak dapat disempitkan secara khusus, tetapi anda masih mempunyai akses CLI, kemudian cuba jalankan perintah teratas. Ini akan memberi anda senarai proses yang sedang berjalan.

Sekiranya Ubuntu memberikan anda ralat yang tidak biasa mengenai top maka cuba mengeluarkan busybox top sebagai ganti untuk mengakses versi program yang lebih sederhana ini. Setelah anda mempunyai senarai, lihat% MEM atau lajur serupa untuk melihat aplikasi mana yang diberi memori paling banyak. Walaupun anda dapat memperhatikan PID dan mengeluarkan perintah kill ke bilangan PID yang tepat, ini hanya akan memaksa aplikasi ditutup. Memori yang mereka gunakan mungkin masih tidak dapat dilepaskan setelah anda melakukan ini, walaupun tentunya bernilai sekali.

Sekiranya anda menemui aplikasi yang menggunakan banyak memori, tekan q untuk berhenti dan kemudian cuba bunuh #### dengan nombor PID dari layar sebelumnya. Proses sistem tidak boleh dibunuh dengan cara ini, dan juga perkara yang anda belum selamatkan. Fikirkan ini sama seperti membunuh sesuatu dengan senarai tugas Ctrl + Alt + Del, yang juga boleh anda gunakan untuk proses yang sama.

Apabila anda menjumpai program yang selalu berlaku, maka anda boleh mengkonfigurasinya untuk mengelakkan tingkah laku di masa depan. Tiap-tiap program, tentu saja, memerlukan jalan yang berbeza, yang di luar tugas hanya mengesan kebocoran memori.

Sekiranya anda bukan sekadar menyelesaikan masalah aplikasi, tetapi juga benar-benar bekerja dengan kod maka ada beberapa sumber lain yang anda miliki. Ubuntu dan turunannya menawarkan anda rutin membarrier, memusage dan memusagestat C untuk pengaturcaraan.

Cukup gunakan man membarrier, man memusage atau man memusagestat untuk melihat halaman Manual Programmer Linux mengenai rutin penting ini. Sekiranya terdapat peningkatan versi perpustakaan yang akan datang kerana versi baru Ubuntu keluar, maka perubahan akan selalu digariskan di sini.

Sekiranya anda memerlukan kandungan grafik, maka memusagestat bahkan menawarkan pilihan untuk menyimpan gambaran grafik penggunaan memori ke fail PNG. Ini menjadikannya ciri menarik bagi pengarang utiliti juga, kerana dapat digunakan untuk membuat aplikasi yang selalu memeriksa kebocoran memori.

Anda juga mungkin ingin memasang memprof, yang merupakan alat untuk memprofilkan penggunaan memori untuk membantu Anda dalam mencari kebocoran memori. Ini menghasilkan profil mengenai berapa banyak memori dalam setiap fungsi dalam program yang anda tulis. Ia juga dapat mengimbas memori yang ada untuk mencari blok, yang telah diperuntukkan, tetapi tidak lagi menampilkan rujukan asli. Ia melakukannya dengan memuatkan perpustakaan terlebih dahulu untuk mengatasi ciri peruntukan memori pustaka C standard.

Jika anda berencana untuk menggunakan ini, pastikan untuk menghapus baris sertakan dari awal kod anda sebelum melepaskannya. Ini digunakan untuk memastikan anda tidak mengalami kebocoran, tetapi tidak boleh menjadi ketergantungan jika anda mengemas kod anda dan melepaskannya di repositori.

4 minit membaca