Việc sử dụng bộ nhớ của các tiến trình php-cgi đang tăng lên đều đặn


8

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.

Câu trả lời:


2

Cố gắng hạ thấp var_size. Nếu chúng tôi có giá trị ở mức 64 MB, sau một vài giờ, nó bắt đầu trao đổi rất nhiều và sau vài giờ tiếp theo, nó đã hoàn toàn ngừng hoạt động. Cố gắng giữ các cài đặt gốc ở mức 32M, có thể điều này sẽ giúp bạn rất nhiều - chúng tôi đã gặp vấn đề tương tự tại trang web du lịch của chúng tôi Xcache vẫn còn rất nhiều phần mềm lỗi :(


1

Đặt yêu cầu tối đa là ý tưởng đúng. Đó là cách để giữ cho RAM hệ thống của bạn không bị đầy khi bị rò rỉ bộ nhớ.

Một điều tôi khuyên bạn nên thử là chuyển sang apache + mod_php. Nếu nó hoạt động mà không bị rò rỉ bộ nhớ, thì điều đó có nghĩa là vấn đề của bạn liên quan đến CGI. Nếu nó tiếp tục rò rỉ với mod_php, thì có lẽ có một rò rỉ bộ nhớ trong mã ở đâu đó.

Bạn nói rằng bạn đang sử dụng Drupal. Bạn đã cài đặt bất kỳ loại mô-đun Drupal nào chưa? Tôi nghi ngờ rằng một phiên bản ổn định của Drupal có rò rỉ bộ nhớ trong lõi, do đó, rất có thể xảy ra sự cố trong các mô-đun và các tiện ích bổ sung và tùy chỉnh của bên thứ 3 khác.


Cảm ơn câu trả lời của bạn. Tất cả các mô-đun Drupal đều nổi tiếng và mô-đun phát không báo cáo bất kỳ rò rỉ bộ nhớ nào trong Drupal. Hơn nữa, rò rỉ bộ nhớ xảy ra ngay cả khi không có lần truy cập nào. Đối với việc dùng thử Apache, tôi sẽ để nó như một phương sách cuối cùng khi tôi hết ý tưởng. Cảm ơn một lần nữa.
John

Tôi đang gặp vấn đề tương tự ... Làm thế nào để bạn giết quá trình PHP-CGI khi bạn hoàn thành nó? Tôi chỉ đang sử dụng cùng một thiết lập với Wordpress và nó gần như giết chết lát cắt 256mib của tôi.
Kyle

Sử dụng Nginx vì nó nhỏ hơn cả hai máy chủ và không bị rò rỉ bộ nhớ từ PHP. Wordpress và các trang web lớn khác sử dụng nó.
Xeoncross

0

Nhiều lần các loại rắc rối này là do một số bộ đệm op-code như XCache hoặc phần mở rộng PHP do memcached.


0

Xóa các thư viện không sử dụng khỏi /etc/php5/apache2/conf.d. Có lẽ bạn không cần pdo.ini và pdo_mysq.ini hoặc mysqli.ini Điều này sẽ tiết kiệm vài Mega Ram

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.