Proscan for IBM PowerSystems(AIX)にて、.jar/zip/.cab/.msi等の実行ファイルバイナリとアーカイブファイルを含むアーカイブファイルにおいて、「Can’t allocate memory ERROR」というエラーが発生する

OS側のユーザー毎のリソース制限("ulimit -a"にて表示可能なリソースのうち、datasizeやmemory)が影響している場合があります。

ProScan(AIX)のエンジンであるclamdは、複数のファイルが含まれるアーカイブをスキャンする際、1つのアーカイブにつき1つのスレッドを生成し、そのスレッドにおいてアーカイブを展開して中身を精査します。そのアーカイブの中に別のアーカイブが発見された場合、新たなアーカイブを担当する別のスレッドを生成して展開し……という形でアーカイブ内部のアーカイブファイルに対応する仕組みとなっています。

この為、特に.jarのように「1つのアーカイブの中に実行ファイルとライブラリアーカイブが複数含まれるようなファイル」の場合、そのファイルの見かけのサイズよりも遙かに多くのデータをメモリ上でスキャンする必要が生じる場合があります。MSIインストーラのような、内部に複数の実行ファイルやライブラリを格納した実行形式アーカイブでも、同じようにメモリ制限に達する場合があります。

もし頻繁にこのエラーが出るようでしたら、AIXのulimitコマンドのヘルプを参照するなどして、ProScanの実行されるユーザー(通常はroot)にて

ulimit -d 250000

(上記では250MBまで制限を緩和しています-ulimitでは-d/m/sオプションのメモリサイズ制限は単位がKBとなる点にご注意下さい)

のようにデータサイズのリミットを上げてエラーが解消されるかどうか確認して下さい。

(なお通常AIXの初期設定ではmemoryのulimitは制限無し"unlimited"なので問題は無いはずですが、"ulimit -a"コマンドを確認してmemoryにも制限が掛かっている事が判明した場合、memoryも同様に制限を緩和することを検討してください)

これらの設定を恒久的に行うには、 /etc/security/limits ファイルに記述されている設定を変更する必要があります。これらの記述についても前述のulimitのマニュアルに記載がありますのでご参照下さい。(こちらの設定値はulimitのメモリ関係制限の変更とは異なり、512バイトセクタ単位の指定である事にご注意下さい)

Tag: ProScan for IBM Power Systems (AIX)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA