ClamAVのメモリ使用量を減らす方法は?


26

512MB VPSでUbuntuベースのWebサーバー(Apache、MySQL)を実行しています。これは、実行しているWebサイトにとっては十分です(小さなフォーラム)。

ウイルスに対する保護を追加したかったので、ClamAVをインストールし、アップロード処理スクリプト(PHP)の一部としてアップロードされたファイルをスキャンするためにそれを使用しました。

clamav-daemonサービスを実行しているため、ファイルをスキャンするたびに定義をロードする必要はありません。この方法の欠点の1つは、clamav-daemonサービスで使用される「200 MBを超える」大量のメモリであるようです。これにより、サービスが強制的に停止され、アップロードが拒否されました。

VPSのメモリを1024MBにアップグレードできますが、不要な定義をロードしないなどして、ClamAVのメモリ使用量を削減する方法があるかどうかを知りたいです。

回答:


15

ClamAVは、クラシック文字列(Boyer Moore)および正規表現(Aho Corasick)アルゴリズムを使用して検索文字列を保持します。1970年代のアルゴリズムであるため、メモリ効率が非常に高くなります。

問題は、膨大な数のウイルス署名です。これにより、アルゴリズムのデータ構造が非常に大きくなります。

他の部分よりも頻繁にアクセスされるアルゴリズムのデータ構造の部分がないため、これらのデータ構造をスワップに送信することはできません。それらのページを強制的にディスクにスワップする場合、それらはすぐに参照され、すぐに元に戻ります。(技術的には、「データ構造のランダムアクセスにより、データ構造全体がプロセスのワーキングセットに強制されます。 "。)

コマンドラインからスキャンする場合、またはデーモンからスキャンする場合は、データ構造が必要です。

ウイルスシグネチャの一部だけを使用することはできません。送信するウイルスを選択できないため、必要なシグネチャを判別できないためです。

以下は、Debian Wheezyを実行している32ビットマシンで使用されるメモリで、clamdです。

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

編集:私は誰かが常駐セットサイズを設定することを提案するのを見ます。これが成功した場合、常駐セットのサイズがワーキングセットのサイズよりも小さくなると、スワップとの間でプロセスがスラッシングします。これにより、システム全体のパフォーマンスが大幅に低下します。いずれにせよ、setrlimit(RLIMIT_RSS、...)のLinuxマニュアルページでは、常駐セットサイズの設定はサポートされなくなり、madvise(MAD​​V_WILLNEED、...)を呼び出さないことを選択したプロセスに影響を及ぼさないと述べています。


1

512 MBの小さなホームNASボックスでclamdを実行すると、同様の問題が発生しました。ネット全体の質問の調査から、メモリ使用量を減らす方法はないようです。厄介なもののデータベースはどんどん大きくなっています。

「clamav-daemon」ではなく「clamav」をインストールすることにより、非デーモンモードで実行するようにclamavを構成することが可能です。これにより、ほとんどの場合、より多くのメモリを確保できます。アップロードをスキャンするときは、常に大量のRAMが必要になります。


1
このアプローチの主な欠点は、スキャンに時間がかかることです。ファイルをアップロードするたびに、スキャンを実行する前にデータベースをロードする必要があります。ユーザーに迅速に応答したい場合、dbのロードには貴重な時間がかかります。また、複数のアップロードが同時に処理されると、データベースをロードする複数のスレッドが発生し、RAMの使用量がさらに増加し​​ます。したがって、デーモンの使用法。私の解決策は、VPSサービスをアップグレードし、追加のRAMに月5ドルを追加で支払うことでした。私はこのコストの増加に耐えることができます:)
ニールズR.

1

この回答は検証されておらず、機能しない可能性があります。また、メモリ使用量を減らす方法については答えていませんが、メモリ使用量を制限する方法については答えていません。これは少し異なります。


あなたは、ClamAVのinitスクリプト(int型編集することができます/etc/init.d/コマンドを追加するためにulimit -m amountofram
これは、ClamAVの可能性を制限し、あなたはおそらくスワップおそらくあなたの全体のシステムが遅くなりますれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.