2009-02-28 25 views
20

Tôi hiện đang chạy một số bản sao của PHP/FastCGI, với APC được bật (theo Apache + mod_fastcgi, nếu vấn đề đó). Tôi có thể chia sẻ bộ nhớ cache giữa các quy trình không? Làm thế nào tôi có thể kiểm tra xem nó đã được chia sẻ chưa? (Tôi nghĩ rằng các thiết lập ini apc.mmap_file_mask có thể tham gia, nhưng tôi không biết làm thế nào để sử dụng nó.)Làm cách nào để chia sẻ bộ đệm APC giữa một số quy trình PHP khi chạy dưới FastCGI?

(Một trong những lý do tôi nghĩ nó không chia sẻ vào lúc này là apc.mmap_file_mask, theo báo cáo của giao diện web apc.php lật giữa khoảng 3 giá trị khác nhau khi tôi tải lại.)

Trả lời

20

APC hiện không phải hiện đang chia sẻ bộ nhớ cache giữa nhiều công nhân php-cgi đang chạy dưới fastcgi hoặc fcgid. Xem this feature request để biết chi tiết: "hành vi này là hành vi dự định kể từ bây giờ".

Một giải pháp thay thế là cho phép PHP quản lý công nhân của riêng mình. Bạn có thể làm điều này bằng cách sử dụng biến môi trường PHP_FCGI_CHILDREN trong kịch bản trình bao bọc của bạn (nhiều ví dụ trên toàn bộ web cho điều đó). Bạn cũng nên dừng fastcgi/fcgid từ việc sinh ra nhiều quá trình PHP nếu bạn muốn sử dụng phương thức này.

Những bất lợi với PHP_FCGI_CHILDREN là việc quản lý của người lao động không tốt như được cung cấp bởi fcgid/fastcgi.

Vì vậy, chúng tôi đang có. APC trong môi trường fcgid/fastcgi có nghĩa là cung cấp cho mỗi nhân viên PHP bộ nhớ cache của riêng họ, hoặc vô hiệu hóa quá trình fcgid/fastcgi sinh ra để ủng hộ việc quản lý được xây dựng trong PHP. Hãy hy vọng điều này sẽ thay đổi trong tương lai.

+4

Theo một bình luận khác, để cấu hình mod_fastcgi để chỉ khởi động một phiên bản của php-cgi (để php-cgi tự xử lý các nhân viên, và do đó chia sẻ bộ đệm), là với "FastCgiConfig -maxClassProcesses 1" trong httpd.conf. Xem thêm http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html. – mjs

+0

Lỗi # 57825 đã bị đóng. PHP có hỗ trợ nó ngay bây giờ không? – mgutt

+4

FPM hỗ trợ nó và đã không dùng hầu hết các giải pháp dựa trên fcgid/fastcgi. APC vẫn gặp sự cố với khóa (ganh đua, deadlocks) khi bạn chia sẻ nó giữa các công nhân trong một hồ bơi lớn, nhưng nó hoạt động khá tốt (và * rất tốt cho bộ nhớ đệm tập tin/opcode), và FPM có sẵn các phần mềm an toàn (segfault) phát hiện) khi APC thực hiện công việc.(Mặc dù, nó không giúp ích cho việc bế tắc.) –

0

Bộ đệm nên được chia sẻ giữa các quá trình. Bạn sẽ thấy cùng một giá trị cho tệp mmap giữa lời gọi phpinfo() và apc.php. Thiết bị này hoạt động với tôi với cài đặt cấu hình APC mặc định được đề xuất:

extension="apc.so" 
apc.enabled=1 
apc.shm_segments=1 
apc.shm_size=128 
apc.ttl=7200 
apc.user_ttl=7200 
apc.num_files_hint=1024 
apc.mmap_file_mask="/tmp/apc.XXXXXX" 
apc.enable_cli=1 

Bạn có thể muốn đăng cài đặt của mình. Tôi đã thấy cảnh báo rằng mmap_file_mask phải chính xác là một trong các giá trị mà chúng cho phép. Vì vậy, nếu bạn đang thiếu một trong những Xs đó là không nói những gì bạn sẽ nhận được.

Có thể nó liên quan đến cấu hình fastcgi + apache của bạn.

+0

Thành thật mà nói, tôi không nghĩ rằng nó thực sự làm việc cho bạn. Nếu bạn làm mới các trang, bạn thường sẽ được phục vụ bởi cùng một nhân viên php-cgi vì bất kỳ lý do gì (có lẽ là KeepAlive?), Đặc biệt là (và tôi không nói đây là trường hợp) nếu máy chủ của bạn không nằm trong toàn bộ đống tải. –

10

Trong khi nó không hoàn hảo, phương pháp mà Domster đề xuất là tốt nhất. Tôi đã làm điều này trong một thời gian ngắn trên một số trang web khối lượng thấp mà không có lỗi. Tôi đã viết một lời giải thích chi tiết về how to set up mod_fastcgi with a shared opcode cache đêm qua.

Tôi thấy rất quan trọng khi sử dụng mod_fastcgi thay vì mod_fcgid mới hơn vì mod_fcgid sẽ chỉ gửi một yêu cầu một lần cho tiến trình PHP bất kể số lượng PHP con đã sinh ra thông qua PHP_FCGI_CHILDREN.

+0

thích bài viết của bạn - tìm thấy nó ở trên chuỗi này trong google! – benlumley

+0

Câu trả lời hay! Nó cũng giúp tôi giải quyết vấn đề tương tranh với 'mod_fcgid'! – vdboor

+0

bài viết tuyệt vời! xem thêm http://whorka.github.com/blog/2012/02/08/apache-mod_fastcgi-suexec-php-apc-rhel.html –

Các vấn đề liên quan