Điểm:0

PHP 7.4 trong nginx với php-fpm - bộ đệm APCu được chia sẻ duy nhất - bằng cách nào?

lá cờ cn
C C

Tôi có một bộ tập lệnh PHP 7.4 chạy với tiện ích mở rộng APCu, được mã sử dụng làm kho lưu trữ đối tượng chung cho tất cả người dùng truy cập trang web được lưu trữ trên một máy chủ. Do bản thân chưa hiểu rõ nên sau này tôi mới biết là bộ đệm APCu được thiết lập mỗi quy trình PHP. Vì vậy, những gì tôi đang thấy là trong một số trường hợp người dùng 'a' đang nhận được một giá trị được lưu trong bộ nhớ cache khác với người dùng 'b' (có lẽ vì PHP-FPM đã rẽ nhánh một quy trình mới cho người dùng 'b').

Nhưng tôi vẫn chưa rõ chính xác cách thiết lập php-fpm sao cho tất cả các yêu cầu đến sẽ nằm trong các quy trình con bắt nguồn từ cùng một quy trình cha.

Đạo sư APCu krakjoe nói điều này trở lại vào năm 2015 (phần nhấn mạnh của tôi được in đậm):

Chỉ để trả lời câu hỏi ban đầu ... như @ fruitl00p đã nói, bạn có thể định cấu hình theo cách của bạn để thoát khỏi sự cố không thể chia sẻ nếu bạn đang sử dụng fpm.

Có một sự khác biệt giữa việc sử dụng fpm và sử dụng fcgi, tôi nên có thể đặt PR cho phptherightway để xóa nó đi.

Quy tắc là chỉ các tiến trình con mới có thể truy cập vào những gì cha của chúng tạo; Trong FCGI, các quy trình được sinh ra không nhất thiết phải là con của cha mẹ của chúng, chúng có thể không phải là nhánh thực sự. Nếu người quản lý quy trình của bạn hoạt động như FCGI/CGI thông thường thì bạn sẽ không thể chia sẻ, nếu nó hoạt động giống như FPM và khởi tạo PHP trong cha mẹ và rẽ nhánh con thông dịch viên thì bạn sẽ không gặp vấn đề gì.

Nghiên cứu sâu hơn đã đưa tôi đến tệp www.conf php-fpm và các cài đặt cho:

chiều = động
pm.max_children = 50

Vì vậy - có đơn giản như việc thay đổi điều này thành:

chiều = tĩnh
pm.max_children = 50

tức là đây có phải là cách để buộc php-fpm đảm bảo rằng tất cả các quy trình con đều quay trở lại một cha mẹ không? Vì vậy, đảm bảo rằng chỉ có một bộ đệm APCu toàn cầu đang hoạt động? Tôi nhận ra rằng tôi cần làm toán để tìm ra giá trị pm.max_children chính xác.

Xin lưu ý: Tôi không thể chuyển sang memcached vào thời điểm này, vì tôi đang dựa vào phép lặp biểu thức chính quy trên các khóa APCu thông qua một đối tượng APCUIterator. Cuối cùng thì tôi cũng có thể đến đó, nhưng hiện tại tôi phải gắn bó với APCu.

lá cờ us
Tất cả các quy trình PHP-FPM đều được rẽ nhánh bởi một công ty mẹ duy nhất và bộ đệm APCu sẽ được chia sẻ giữa chúng. Vui lòng chia sẻ cấu hình PHP và nginx đầy đủ trong câu hỏi của bạn.
lá cờ cn
C C
@TeroKilkanen cảm ơn bạn vì thông tin chi tiết đó - và bây giờ, dựa trên một số thử nghiệm bổ sung mà tôi đã thực hiện ngày hôm qua, có vẻ như tất cả các PID php-fpm đang trỏ lại một PID gốc chung. Tôi đang sử dụng cấu hình cơ bản là 'vanilla đơn giản' cho nginx và php. Ngoài ra, nguyên nhân thực sự của vấn đề của tôi cuối cùng là do tôi được triển khai trong OpenShift trong ba nhóm - vì vậy tôi có ba PHP/bộ đệm khác nhau. Người dùng đánh các nhóm ngẫu nhiên. Điều đó có nghĩa là tôi phải chuyển tất cả những thứ này sang một dịch vụ vi mô riêng biệt dành riêng cho bộ nhớ đệm.
lá cờ us
Hoặc bạn có thể định tuyến các yêu cầu dựa trên hàm băm IP để các yêu cầu luôn đến được cùng một máy chủ.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.