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.