Làm thế nào để giảm sử dụng bộ nhớ ClamAV?


26

Tôi đang chạy một máy chủ web dựa trên Ubuntu (Apache, MySQL) trên VPS 512 MB. Điều này là quá đủ cho trang web mà nó đang chạy (diễn đàn nhỏ).

Vì tôi muốn thêm một số bảo vệ chống lại vi-rút, tôi đã cài đặt ClamAV và sử dụng nó để quét các tệp đã tải lên như một phần của tập lệnh xử lý tải lên (PHP).

Tôi đang chạy dịch vụ clamav-daemon để các định nghĩa không phải được tải mỗi khi quét tệp. Một nhược điểm của thực tiễn này dường như là dung lượng bộ nhớ "khổng lồ" được sử dụng bởi dịch vụ clamav-daemon:> 200 MB. Điều này đã dẫn đến việc dịch vụ buộc phải dừng lại và tải lên bị từ chối.

Tôi chỉ có thể nâng cấp bộ nhớ của VPS lên 1024MB, nhưng tôi muốn biết liệu có cách nào để giảm mức sử dụng bộ nhớ của ClamAV hay không, ví dụ như không tải các định nghĩa không mong muốn.

Câu trả lời:


15

ClamAV giữ các chuỗi tìm kiếm bằng cách sử dụng các thuật toán chuỗi cổ điển (Boyer Moore) và biểu thức chính quy (Aho Corasick). Là thuật toán từ những năm 1970, chúng rất hiệu quả về bộ nhớ.

Vấn đề là số lượng lớn chữ ký virus. Điều này dẫn đến các cơ sở dữ liệu của thuật toán phát triển khá lớn.

Bạn không thể gửi các cơ sở dữ liệu này để trao đổi, vì không có phần nào của cơ sở dữ liệu của thuật toán được truy cập ít thường xuyên hơn các phần khác. Nếu bạn buộc các trang của chúng hoán đổi đĩa, thì chúng sẽ được tham chiếu ngay sau đó và chỉ cần trao đổi thẳng trở lại. (Về mặt kỹ thuật, chúng tôi nói "việc truy cập ngẫu nhiên của cơ sở hạ tầng buộc toàn bộ cơ sở hạ tầng phải nằm trong bộ nhớ làm việc của quy trình ".)

Các cơ sở dữ liệu là cần thiết nếu bạn đang quét từ dòng lệnh hoặc quét từ một daemon.

Bạn không thể chỉ sử dụng một phần chữ ký vi-rút, vì bạn không được chọn loại vi-rút nào bạn sẽ gửi và do đó không thể biết chữ ký nào bạn sẽ cần.

Đây là bộ nhớ được sử dụng trên máy 32 bit chạy Debian Wheezy và nó rất hay.

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

Chỉnh sửa: Tôi thấy ai đó đề nghị đặt kích thước cài đặt thường trú. Nếu điều này thành công thì việc có kích thước tập hợp cư dân nhỏ hơn kích thước tập làm việc sẽ dẫn đến quá trình đập vào và từ trao đổi. Điều này sẽ làm giảm đáng kể toàn bộ hiệu năng hệ thống. Trong mọi trường hợp, trang hướng dẫn Linux cho setrlimit (RLIMIT_RSS, ...) nói rằng việc đặt kích thước cài đặt thường trú không còn được hỗ trợ và không bao giờ có bất kỳ ảnh hưởng nào đến các quy trình chọn không gọi madvise (MADV_WILLNEED, ...).


1

Tôi đã gặp phải một vấn đề tương tự khi chạy clamd trên một hộp NAS gia đình nhỏ chỉ với 512MB. Từ một cuộc khảo sát các câu hỏi trên mạng, dường như không có cách nào để giảm việc sử dụng bộ nhớ. Cơ sở dữ liệu của những điều khó chịu chỉ ngày càng lớn hơn.

Có thể định cấu hình clamav để chạy ở chế độ không phải daemon bằng cách cài đặt "clamav" thay vì "clamav-daemon". Điều này có thể cho phép bạn có nhiều bộ nhớ hơn hầu hết thời gian. Khi bạn quét tải lên, nó sẽ luôn cần một khối RAM lớn.


1
Nhược điểm chính của phương pháp này là sẽ mất nhiều thời gian hơn để thực hiện quét. Mỗi khi tệp được tải lên, cơ sở dữ liệu cần được tải trước khi quét có thể được thực hiện. Việc tải db mất rất nhiều phút quý giá nếu bạn muốn có phản hồi nhanh cho người dùng. Ngoài ra, khi nhiều tải lên được xử lý cùng một lúc, bạn sẽ có nhiều luồng tải cơ sở dữ liệu dẫn đến việc sử dụng RAM thậm chí còn lớn hơn. Do đó việc sử dụng daemon. Giải pháp của tôi là nâng cấp dịch vụ VPS của mình và trả thêm 5 USD / tháng để có thêm RAM. Tôi có thể sống với mức tăng chi phí này :)
Niels R.

1

Câu trả lời này không được xác minh và nó có thể không hoạt động. Nó cũng không trả lời làm thế nào để giảm mức sử dụng bộ nhớ, nhưng làm thế nào để hạn chế việc sử dụng bộ nhớ, điều này hơi khác một chút.


Bạn có thể chỉnh sửa tập lệnh init ClamAV (int /etc/init.d/để thêm lệnh ulimit -m amountofram.
Nó sẽ hạn chế khả năng ClamAV và bạn có thể sẽ trao đổi, điều này có thể sẽ làm chậm toàn bộ hệ thống của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.