Tôi đang làm việc trên trang web máy chủ lưu trữ web có lưu lượng truy cập cao phục vụ mã PHP động bao gồm khoảng 100 tệp trên hầu hết các yêu cầu. APC opcode cache được kích hoạt, include_once_override được kích hoạt, và tôi đã phân bổ 64MB ram vào cache, nhưng khi tôi strace apache process tôi vẫn thấy nó mở() ing và stat() ing tất cả chúng bao gồm cho mọi yêu cầu được lấy từ bộ nhớ cache. Tôi có thể thấy trong số liệu thống kê bộ nhớ cache rằng bộ nhớ cache đang được phổ biến và được sử dụng với tỷ lệ 100%. Bất cứ ai có thể cung cấp bất kỳ cái nhìn sâu sắc?Đã bật APC nhưng Apache vẫn đang mở tệp?
Trả lời
Sẽ chắc chắn rằng bạn đang sử dụng tên đường dẫn đầy đủ cho mọi thứ có trong ứng dụng của bạn. Theo các tài liệu hướng dẫn APC:
apc.stat nguyên
Hãy cẩn thận thay đổi thiết lập này. Điều này mặc định bật, buộc APC để stat (kiểm tra) kịch bản trên mỗi yêu cầu để xác định nếu nó đã được sửa đổi. Nếu nó đã được sửa đổi, nó sẽ biên dịch lại và cache phiên bản mới. Nếu cài đặt này tắt, APC sẽ không kiểm tra, điều này thường có nghĩa là để buộc APC kiểm tra lại tệp, máy chủ web sẽ phải được khởi động lại hoặc bộ nhớ cache sẽ phải được xóa thủ công. Lưu ý rằng cấu hình máy chủ web FastCGI có thể không xóa bộ nhớ cache khi khởi động lại. Trên một máy chủ sản xuất, nơi các tập tin kịch bản hiếm khi thay đổi, tăng hiệu suất đáng kể có thể đạt được bằng số liệu thống kê bị vô hiệu hóa. Đối với các tệp được bao gồm/bắt buộc, tùy chọn này cũng áp dụng, nhưng lưu ý rằng đối với đường dẫn tương đối bao gồm (mọi đường dẫn không bắt đầu bằng/trên Unix), APC phải kiểm tra để nhận dạng duy nhất tệp. Nếu bạn sử dụng đường dẫn tuyệt đối bao gồm APC có thể bỏ qua chỉ số và sử dụng đường dẫn tuyệt đối đó làm mã định danh duy nhất cho tệp.
Một nguyên tắc nhỏ cho PHP là xác định một hằng số có chứa đường dẫn đầy đủ để dự án của bạn như sau:
// Assumes __FILE__ is in the root of your project
define('PATH_PROJECT', realpath(dirname(__FILE__)));
sau đó sử dụng của bạn bao gồm như sau:
include_once PATH_PROJECT . '/some/dir/file.php';
Vì vậy, bạn vẫn có sự tiện lợi của đường dẫn tương đối, nhưng thực sự đang sử dụng đường dẫn đầy đủ.
- 1. PHP: Đã bật APC nhưng vẫn không hoạt động?
- 2. APC trên PHP 5.3.10/Apache 2.2.21
- 3. JS SDK FB.login() hoạt động nhưng hộp thoại bật lên vẫn đang mở sau khi đăng nhập
- 4. Apache Velocity vẫn là một dự án đang hoạt động?
- 5. Quá nhiều tệp đang mở (ulimit đã thay đổi)
- 6. git - Đã xóa tệp lớn nhưng thanh toán và các tệp .pack vẫn còn lớn
- 7. Sử dụng IsolationLevel.Snapshot nhưng DB vẫn đang khóa
- 8. GPS chưa được bật nhưng isProviderEnabled() đang trả về true
- 9. Máy chủ Zend chỉ là APC và Apache đã kết hợp với nhau thành một cài đặt?
- 10. Bật mục menu tệp đang mở trong ứng dụng không phải tài liệu
- 11. php đang khóa một tệp phiên đã xóa
- 12. Optimize APC Caching
- 13. Apache 403 khi đang phục vụ các tệp tĩnh Django
- 14. Lưu tệp đang mở (phiên) trong NetBeans
- 15. Khi nào trạng thái của CBCentralManager sẽ được bật nhưng vẫn cho tôi cảnh báo "không bật nguồn"?
- 16. IOException: Quá nhiều tệp đang mở
- 17. php-fpm Quá nhiều tệp đang mở
- 18. Đổi tên tệp đã tải lên bằng PHP nhưng giữ phần mở rộng
- 19. mục trình đơn được bật nhưng vẫn chuyển sang màu xám
- 20. Mở tệp có thể chỉnh sửa trong vsplit nhưng vẫn ở vị trí ban đầu trong vimscript
- 21. Dự án trong trình duyệt dự án đã biến mất nhưng vẫn còn trong đĩa
- 22. Kiểm tra xem tệp có đang mở
- 23. Git: Không bao giờ cam kết các tệp đã thay đổi (nhưng vẫn giữ nguyên bản sửa đổi.)
- 24. Bật SSL trên apache instance trên EC2
- 25. Ngoại lệ khi mở một tệp đã mở
- 26. Bật các thẻ mở ngắn PHP thông qua .htaccess
- 27. iOS idleTimerHành vi đã bật
- 28. Đã cài đặt pyzmq nhưng vẫn nhận được "ImportError: Không có mô-đun có tên zmq"
- 29. Python: là chủ đề vẫn đang chạy
- 30. Django: Mở tệp đã tải lên trong khi vẫn còn trong bộ nhớ; Trong phương pháp Form Clean?
Bạn đã chuẩn bị máy chủ của mình cả khi có và không có include_once_override? – hobodave
Cảm ơn! Có, tôi đã làm điểm chuẩn có và không có và thấy không có sự khác biệt đáng chú ý .. Bây giờ tôi thấy ít hơn nhiều() s sau khi thực hiện đường dẫn tuyệt đối, nhưng, tôi vẫn thấy một truy cập() cho mỗi tập tin tôi đang bao gồm, ngay cả với apc.stat = 0. Điều này có bình thường không? Tại sao các tệp phải được truy cập? – Will
Bạn có chắc chắn bạn không chỉ nhìn thấy tệp bao gồm ban đầu không? Phiên bản nào bạn đang sử dụng? APC đã gặp sự cố lịch sử với include_once_override. Ngoài ra, vui lòng chỉnh sửa câu hỏi ban đầu của bạn bằng câu trả lời thay vì sử dụng câu trả lời. – hobodave