clamav cl_scanfile 需要很长时间才能完成

Posted

技术标签:

【中文标题】clamav cl_scanfile 需要很长时间才能完成【英文标题】:clamav cl_scanfile takes a long time to finish 【发布时间】:2013-05-21 23:38:20 【问题描述】:

如何优化 clamav cl_scanfile 使其更快?平均扫描文件大约需要 15-20 秒。因此,如果在一种形式中我有 2 个上传字段,则需要将近 40 秒或更长时间,这将导致 php max execution time 错误。

我宁愿不改变php的执行时间。

有没有办法做到这一点?

我的代码将是这样的:

function upload() 
...
        // Checking element type based on element id.
        // if element type == file, check the file type. Based on the result, halt (redirect to failure) or continue
        foreach ($this->_controller->data['FormSubmission'] as $elementId => $fieldValue) 
...
...
                        //Checking The File for Virus
                        $retcode = cl_scanfile($fieldValue["tmp_name"], $virus_name);

                        //if Virus not found
                        if ($retcode != CL_VIRUS) 
                            //Check Directory if uploadPath is not a directory, make it
                            if (!is_dir($uploadPath)) 
                                mkdir($uploadPath, 0777, TRUE);
                            

                            //filename
                            $now = date('Ymd-His');
                            $fileName = $now . '-' . $elementId . $fieldValue["name"];

                            $fullFilePath = $uploadPath . '/' . $fileName;
                            $uploading = move_uploaded_file($fieldValue["tmp_name"], $fullFilePath);
                            // change the value to uploadPath for ul/dl
                            $this->_controller->data["FormSubmission"][$elementId] = $fullFilePath;
                         else 
                            //If Virus found, don't upload anything
                            $this->_controller->data["FormSubmission"][$elementId] = "";
                        

【问题讨论】:

【参考方案1】:

通过将clamav.load_db_on_startup=1 添加到/etc/php5/mods-available/clamav.ini,将时间缩短了 1/2

extension=clamav.so
[clamav]
clamav.dbpath="/usr/local/share/clamav"
clamav.load_db_on_startup=1
clamav.maxreclevel=16
clamav.maxfiles=10000
clamav.maxfilesize=26214400
clamav.maxscansize=104857600
clamav.keeptmp=0
clamav.tmpdir="/tmp"

仍需要大约 7-8 秒,具体取决于文件大小。

http://php-clamav.sourceforge.net/parameters.php#load_db_on_startup

【讨论】:

【参考方案2】:

我不认为自己是 Clam AV 方面的专家,但我的理解是没有任何方法可以优化每个文件的调用,除非你可以消除一些特征数据库(在很多情况下你不能)。例如,如果您知道该文件永远不会在 Windows 系统上使用,您可以消除 Windows 签名数据库,从而节省大量时间。不过要小心,因为它可能适得其反。尽管更改 PHP 超时值可能更可取,我同意您不应该这样做。

但是,Clam AV 使用多线程守护程序,因此您可以优化的另一件事是同时运行每个文件扫描(多线程或多处理)。这对于少量的大文件没有多大帮助,但对于大量的小文件可能会有很大的不同。这是我会采取的方法。有a great post on PHPlens covering parallel processing in PHP。您也可以使用an open source Pthread library for PHP。它在 Github 上的用户 Krakjoe 下可用。

【讨论】:

【参考方案3】:

默认的 ubuntu clamav (sudo apt-get install Calmav) 是用 mpi 编译的,所以可以通过以下方式加快速度:

sudo mpirun -np $(grep -c ^processor /proc/cpuinfo) clamscan -r --bell -r /

还需要一段时间,但请试一试

【讨论】:

【参考方案4】:

提示:ClamAV 不是传统的防病毒或端点安全套件。如需功能齐全的现代端点安全套件,请查看思科安全端点。有关详细信息,请参阅下面的“相关产品”。

https://docs.clamav.net/

【讨论】:

以上是关于clamav cl_scanfile 需要很长时间才能完成的主要内容,如果未能解决你的问题,请参考以下文章

ExportAsFixedFormat 需要很长时间[关闭]

解释计划需要很长时间

解包依赖项需要很长时间

简单的选择需要很长时间才能执行

查询需要很长时间

数据库项目需要很长时间才能打开