2009-07-26 24 views
5

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?

+0

Bạn đã chuẩn bị máy chủ của mình cả khi có và không có include_once_override? – hobodave

+0

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

+0

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

Trả lời

7

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 đủ.

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