Bagaimana cara mengurangi penggunaan memori ClamAV?

26

Saya menjalankan server web berbasis Ubuntu (Apache, MySQL) pada VPS 512MB. Ini lebih dari cukup untuk situs web yang dijalankannya (forum kecil).

Karena saya ingin menambahkan perlindungan terhadap virus, saya menginstal ClamAV dan menggunakannya untuk memindai file yang diunggah sebagai bagian dari script penanganan pengunggahan (PHP).

Saya menjalankan layanan clamav-daemon sehingga definisi tidak harus dimuat setiap kali file dipindai. Satu kelemahan dari praktik ini adalah jumlah memori "besar" yang digunakan oleh layanan clamav-daemon:> 200 MB. Ini sudah mengakibatkan layanan terpaksa berhenti dan unggahan ditolak.

Saya hanya dapat memutakhirkan memori VPS ke 1024MB, tetapi saya ingin tahu apakah ada cara untuk mengurangi penggunaan memori ClamAV dengan misalnya tidak memuat definisi yang tidak diinginkan.

Niels R.
sumber

Jawaban:

15

ClamAV memegang string pencarian menggunakan string klasik (Boyer Moore) dan algoritma ekspresi reguler (Aho Corasick). Menjadi algoritma dari tahun 1970-an mereka sangat efisien dalam memori.

Masalahnya adalah sejumlah besar tanda tangan virus. Hal ini menyebabkan struktur data algoritma tumbuh cukup besar.

Anda tidak dapat mengirim struktur data itu untuk ditukar, karena tidak ada bagian dari struktur data algoritma yang lebih jarang diakses daripada bagian lain. Jika Anda memaksa halaman mereka untuk menukar disk, maka mereka akan direferensikan beberapa saat kemudian dan langsung bertukar kembali. (Secara teknis kami mengatakan "akses acak dari struktur data memaksa seluruh struktur data berada dalam kumpulan memori proses yang bekerja" ".)

Struktur data diperlukan jika Anda memindai dari baris perintah atau memindai dari daemon.

Anda tidak dapat menggunakan hanya sebagian dari tanda tangan virus, karena Anda tidak bisa memilih virus mana yang akan Anda kirim, dan karenanya tidak dapat menentukan tanda tangan mana yang akan Anda butuhkan.

Inilah memori yang digunakan pada mesin 32-bit yang menjalankan Debian Wheezy dan clamd.

# ps_mem.py 
 Private  +   Shared  =  RAM used   Program
281.7 MiB + 422.5 KiB = 282.1 MiB   clamd

Sunting: Saya melihat seseorang menyarankan untuk mengatur ukuran yang ditetapkan penduduk. Jika ini berhasil maka memiliki ukuran set penduduk kurang dari ukuran set kerja akan menyebabkan proses meronta-ronta ke dan dari swap. Ini akan menurunkan kinerja seluruh sistem secara substansial. Bagaimanapun halaman manual Linux untuk setrlimit (RLIMIT_RSS, ...) mengatakan bahwa pengaturan ukuran set penduduk tidak lagi didukung dan tidak pernah memiliki efek pada proses yang memilih untuk tidak memanggil madvise (MADV_WILLNEED, ...).

vk5tu
sumber
1

Saya telah mengalami masalah serupa menjalankan clamd pada kotak NAS rumah kecil hanya dengan 512MB. Dari survei pertanyaan di internet tampaknya tidak ada cara untuk mengurangi penggunaan memori. Basis data hal-hal buruk terus menjadi semakin besar.

Dimungkinkan untuk mengkonfigurasi clamav untuk dijalankan dalam mode non-daemon dengan menginstal "clamav" daripada "clamav-daemon". Ini memungkinkan Anda untuk memiliki lebih banyak memori. Saat Anda memindai unggahan, itu akan selalu membutuhkan sejumlah besar RAM.

davefiddes
sumber
1
Kelemahan utama pada pendekatan ini adalah akan membutuhkan lebih banyak waktu untuk melakukan pemindaian. Setiap kali file diunggah, basis data perlu dimuat sebelum pemindaian dapat dilakukan. Memuat db membutuhkan banyak menit berharga jika Anda ingin memiliki respons cepat bagi pengguna. Juga, ketika beberapa unggahan diproses pada saat yang sama Anda akan memiliki beberapa utas memuat basis data yang menghasilkan penggunaan RAM yang lebih besar. Karenanya penggunaan daemon. Solusi saya adalah meningkatkan layanan VPS saya dan membayar ekstra 5 USD / bulan untuk RAM tambahan. Saya bisa hidup dengan kenaikan biaya ini :)
Niels R.
1

Jawaban ini tidak diverifikasi dan mungkin tidak berhasil. Ini juga tidak menjawab bagaimana mengurangi penggunaan memori, tetapi bagaimana membatasi penggunaan memori, yang sedikit berbeda.


Anda dapat mengedit skrip init ClamAV (int /etc/init.d/untuk menambahkan perintah ulimit -m amountofram.
Ini akan membatasi kemungkinan ClamAV dan Anda mungkin akan menukar yang mungkin akan memperlambat seluruh sistem Anda.

Kiwy
sumber