Berjalan top
dalam mode batch untuk melaporkan ukuran memori secara berkala dapat digunakan untuk melihat siapa yang menggunakan memori ketika ada hal yang terjadi di selatan. Menjalankan sar
dalam mode batch harus memberikan diagnosa yang baik tentang penggunaan memori, dan I / O terkait. Menjalankan munin
untuk memantau sistem harus memberi Anda grafik dengan detail yang baik pada memori apa yang digunakan. Ini mungkin banyak membantu.
Anda dapat menggunakan limit.conf untuk membatasi ukuran inti maksimum program. Diatur dengan benar, ini akan mematikan semua program yang kehabisan memori. Ini berfungsi dengan modul pam_limits. Batas juga dapat diatur dengan ulimits
perintah.
Anda menjalankan beberapa program yang bisa menggunakan banyak memori. Beberapa hal yang bisa Anda perhatikan antara lain.
- Aplikasi yang diprogram dengan buruk dan beroperasi di bawah
apache2
dapat bocor memori. Anda akan melihat peningkatan ukuran memori saat ini terjadi. Anda dapat menyetel apache2 untuk mendaur ulang anak-anak setelah sejumlah penggunaan dengan mengatur MaxRequestsPerChild
ke 100 atau lebih. Jika ini menyelesaikan masalah, maka Anda harus menyelesaikan kebocoran. Saya akan menonton ini dulu.
- MySQL dapat mencoba memuat data ke dalam memori. Jika Anda memiliki banyak data dalam memori, ini dapat menyebabkan beberapa kehancuran, tetapi seharusnya tidak sedramatis yang Anda lihat.
- Jika Anda memiliki
tmpfs
sistem file besar yang terpasang, maka Anda dapat membocorkan memori jika file tidak dihapus saat digunakan. File besar yang berumur panjang juga bisa menjadi masalah.
- Jika masalah terjadi pada waktu yang hampir bersamaan, Anda mungkin memiliki program terjadwal yang membocorkan memori.
- Jika Anda memiliki program yang mengalokasikan memori bersama, tetapi tidak melepaskannya sebelum keluar, Anda akan memiliki kebocoran memori yang relatif tidak terlihat. Jika memori bersama dikunci dalam memori, maka itu mungkin memaksa swapping. Jumlah memori bersama yang tersedia biasanya relatif terbatas.
- Bundel liquidsoap + icecast dapat mengalami masalah buffering yang menggunakan memori. Saya belum pernah menggunakan kombinasi ini, jadi saya tidak yakin bagaimana ini akan muncul.
Penggunaan memori normal: Memori bebas bukan sesuatu yang Anda inginkan banyak. Jika sistem Anda telah menyala untuk waktu yang lama dan memiliki banyak memori bebas, ada sesuatu yang salah. Setiap kali Anda membaca atau menulis file, blok akan masuk ke cache buffer. Ini akan mengurangi memori bebas Anda, dan merupakan hal yang baik. Sistem ini akan menjaga ruang kosong yang cukup untuk memulai beberapa program tanpa mencari tempat lain untuk memori. Karena banyak program berjalan dengan cepat, memori mereka akan dikembalikan ke kolam gratis ketika mereka berhenti berjalan.
Ketika Anda membaca file yang ada di cache buffer, tidak ada akses disk diperlukan dan membaca diselesaikan dari cache buffer. Menulis menggunakan mekanisme serupa. Jika sistem Anda membutuhkan memori, cache buffer adalah salah satu tempat pertama yang digunakan. Sebagian besar buffer dapat segera dirilis.
Jika Anda memiliki kebocoran memori, Anda akan melihat memori bebas dan buffer keduanya mulai menyusut. Ini masih bukan masalah yang parah, karena memori yang bocor pada akhirnya harus dipindahkan ke ruang swap. Sistem Anda masih akan berjalan dengan baik sampai Anda mengisi ruang swap, dan menarik ruang kosong yang tersisa ke titik program tidak dapat dimulai. Ini adalah tipikal bahwa sejumlah kecil ruang swap dapat digunakan.