Tôi đang cố gắng thiết lập một máy chủ web trên VPS. Vấn đề của tôi là việc sử dụng bộ nhớ của các quá trình php-cgi tăng theo thời gian mặc dù trang web hoàn toàn không nhận được bất kỳ lưu lượng truy cập nào. (nó đứng sau một tường lửa trong thời điểm hiện tại)
VPS có RAM 360 MB. Tôi đang sử dụng Debian Lenny 32bit và các gói lighttpd và php5-cgi của nó. Ngoài một số thay đổi cấu hình (được liệt kê bên dưới), tôi đang sử dụng thiết lập chứng khoán của Debian.
Trang web này dựa trên Drupal. Sử dụng mô-đun phát triển của Drupal, tôi có thể nói rằng mức sử dụng bộ nhớ của các tập lệnh PHP trung bình dưới 20KB và nó không bao giờ vượt quá 8 MB.
Dưới đây là các phần có liên quan từ đầu ra của ps aux
:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 29871 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29873 0.0 7.4 65808 27468 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29874 0.0 3.7 55808 13736 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29875 0.0 4.3 58040 16204 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29876 0.0 4.4 57444 16288 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29877 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29879 0.0 9.6 67140 35684 ? S Aug12 0:26 /usr/bin/php-cgi
www-data 29880 0.0 6.6 59172 24492 ? S Aug12 0:23 /usr/bin/php-cgi
www-data 29881 0.0 7.1 59784 26388 ? S Aug12 0:22 /usr/bin/php-cgi
www-data 29882 0.0 7.4 60880 27440 ? S Aug12 0:23 /usr/bin/php-cgi
- Có bình thường khi có php-cgi lớn như vậy không?
- Có thể ước tính mức sử dụng bộ nhớ php-cgi dựa trên các cài đặt không?
- Bất kỳ lời khuyên để giảm tiêu thụ bộ nhớ của các quá trình php-cgi?
Tìm kiếm các lỗi rò rỉ bộ nhớ đã biết không mang lại kết quả gì. Và tôi sẽ ngạc nhiên nếu các gói / cấu hình Debian mặc định có rò rỉ bộ nhớ rõ ràng như vậy. Những người dùng khác trên cùng một máy chủ không gặp phải vấn đề này.
Những gì tôi đã làm cho đến nay được đặt PHP_FCGI_MAX_REQUESTS
ở giá trị thấp để các quy trình php-cgi được tái chế nhanh chóng. Khi tôi sử dụng ab
để mô phỏng tải cao, điều này hoạt động rất tốt. Quá trình chết nhanh chóng trước khi chúng phát triển cao hơn 10MB. Tuy nhiên, dưới tải thấp đến trung bình, tất cả các quy trình tăng trưởng đều đặn (vì cân bằng tải) và hầu hết chúng tiêu thụ đồng thời 28 MB +, khiến VPS của tôi có nguy cơ bị tráo đổi. Xin lưu ý thậm chí không có bất kỳ loại lưu lượng truy cập, các quá trình phát triển đều đặn.
Tôi có thể giảm số lượng quá trình php-cgi, nhưng điều này cảm thấy như một cách giải quyết hơn là một sửa chữa. Tôi sẽ ngạc nhiên nếu php-cgi thường phát triển như thế này.
Ngoài ra, tổng các số RSS cho các quy trình php-cgi mang lại:
$ ps -C php-cgi -o rss= | awk '{s+=$1}END{print s/1024}'
195.738
Tuy nhiên, free -m
đưa ra đầu ra sau:
total used free shared buffers cached
Mem: 360 351 8 0 33 190
-/+ buffers/cache: 127 232
Swap: 255 0 255
- Tui bỏ lỡ điều gì vậy? Làm thế nào mà bộ nhớ được sử dụng (không có bộ đệm) thấp hơn tổng bộ nhớ lưu trú của các quá trình php-cgi trên máy chủ?
Tôi có các phần mở rộng PHP sau:
php5-cgi php5-common php5-curl php5-gd php5-mysql php5-xcache
xcache.size
được đặt thành 24M. Nó được sử dụng là 32M nhưng giảm nó không giúp được gì. xcache.var_size
được đặt thành 0. Các plugin còn lại đang sử dụng cấu hình stock. Các trang quản trị xcache cho thấy xcache đang sử dụng ít hơn 1MB.
PHP memory_limit
được đặt thành 32M.
Đây là cấu hình FastCGI của tôi:
fastcgi.server = ( ".php" =>
((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"idle-timeout" => 20,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "1000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
))
)
Tôi đang sử dụng ít nhiều cổ phiếu lighttpd.conf
đi kèm với Debian.
Xin vui lòng cho tôi biết nếu có bất kỳ dữ liệu nào khác mà tôi có thể cung cấp.
Bất kỳ trợ giúp được đánh giá cao. Tôi đã cố gắng khắc phục sự cố này trong nhiều ngày. Tôi đã hết ý tưởng.