Saya memiliki server yang menjalankan liquidsoap + bundel icecast dan situs web sederhana (httpd + mysqld). Tidak ada yang spesial. Pengunjung sekitar 2000+ per hari, dengan rata-rata sekitar 50 online secara bersamaan.
Server memiliki RAM 8GB. Seiring berjalannya waktu, jumlah memori bebas terus menurun, meskipun tidak ada yang baru dimulai pada server dan tidak ada pengguna baru. Pada titik tertentu mulai swap, memuat pada server naik dan menjadi tidak responsif. Biasanya yang saya lakukan hanyalah me-restart server ...
Apa yang bisa dilakukan untuk mendeteksi apa yang sebenarnya bocor memori? Saya menggunakan top untuk memantau penggunaan sumber daya, tetapi sejauh yang saya lihat itu tidak ada gunanya:
Apakah ada cara untuk mengetahui apa yang menggunakan memori sebanyak itu? atau apa yang mulai bertukar ke disk banyak? Adakah cara untuk membebaskan memori tanpa me-reboot server?
sumber
Jawaban:
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. Menjalankansar
dalam mode batch harus memberikan diagnosa yang baik tentang penggunaan memori, dan I / O terkait. Menjalankanmunin
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.
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 mengaturMaxRequestsPerChild
ke 100 atau lebih. Jika ini menyelesaikan masalah, maka Anda harus menyelesaikan kebocoran. Saya akan menonton ini dulu.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.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.
sumber
sar
akan membantu menentukan dengan tepat partisi mana yang memiliki I / O dan dapat membantu menemukan masalahnya.Anda dapat menggunakan perintah ini untuk melihat 10 aplikasi teratas terkait penggunaan RAM:
Terkadang perintah ini membantu Anda jika banyak sub proses telah dihasilkan:
Dengan cara ini Anda bisa melihat proses mana yang menjadi satu.
sumber
ps
atautop
keluaran adalah hal yang tepat untuk dilihat jika mencoba mendeteksi kebocoran memori: Bukankah ini hanya persentase dari memori fisik yang sedang digunakan oleh proses saat ini? Tetapi bagian lain dari proses yang digunakan (termasuk kebocoran) memori dapat ditukar. Mungkin "ukuran" atau "vsize" akan lebih tepat untuk mengukur ukuran suatu proses? Misalnya,ps -A --sort -size -o comm,size | head -n 11
ataups -A --sort -vsize -o comm,vsize | head -n 11
Tidak ada yang benar-benar menggunakan memori itu dalam hal aplikasi.
Anda harus mengurangi nilai 'cached' yang mewakili cache halaman untuk mendapatkan ide yang lebih baik tentang apa penggunaan memori Anda yang sebenarnya dalam hal penggunaan program.
Pada dasarnya ini adalah manajemen memori yang baik dan ini idealnya yang Anda inginkan.
Lihat tautan di sini untuk informasi lebih lanjut: http://www.linuxatemyram.com/
sumber
Saya bukan ahli dalam hal ini, tapi sabun cair + icecast terkait dengan multimedia. Ketika sistem ini gratis, ia menyimpan dan / atau menempati memori untuk digunakan di masa mendatang. Dan jika lalu lintas meningkat pada waktu tertentu dalam sehari / selama periode waktu tertentu, maka itu akan mulai bertukar. Pada titik ini, jika permintaan (pengguna yang melihat konten) meningkat, maka sumber daya yang dibutuhkan akan lebih dari 8GB ram.
sumber