Chúng tôi có một máy chủ được tải khá nhiều chạy nginx và PHP-FPM. Chúng tôi có 6 trang web trên máy chủ này, chạy PHP-FPM và nginx. Phần mềm là tất cả các phiên bản 3,8 và WordPress. Cơ sở dữ liệu trên một máy chủ riêng biệt.
Bây giờ, vì đây là những trang web rất phổ biến, chúng tôi thường có 7-8.000 khách truy cập trực tuyến cùng một lúc, với mỗi trang chiếm phần lớn cơ sở dữ liệu. Tôi tin rằng đây là nguyên nhân của các vấn đề của chúng tôi.
Bởi vì chúng tôi có rất nhiều cơ sở dữ liệu lớn trên máy chủ MySQL và vì thực tế, các truy vấn có thể tốt hơn rất nhiều trong phần mềm, tôi nghĩ rằng thỉnh thoảng MySQL sẽ không trả lại kết quả cho PHP một cách kịp thời, tạo ra hiệu ứng xếp tầng cuối cùng khiến mọi thứ chỉ dừng lại cho đến khi chúng ta tải lại PHP-FPM. Sau khi chúng tôi làm điều đó, mọi thứ bắt đầu hoạt động tốt trở lại.
Lý do tôi gặp sự cố khi khắc phục sự cố này là vì tôi thực sự không thể nhận ra bất cứ điều gì từ nhật ký. Trong nhật ký truy vấn chậm của MySQL, tôi thấy không có gì đáng quan tâm khi thời gian chết xảy ra. Trong nhật ký nginx, tôi thấy hàng ngàn mục nhập nói rằng yêu cầu đọc đã hết thời gian hoặc kết nối đã hết thời gian (Tới PHP-FPM). Và trong nhật ký PHP-FPM, tôi thấy rất nhiều dòng có nội dung "hết thời gian thực hiện (31 giây), chấm dứt
Vì vậy, tại thời điểm này tôi hoàn toàn không biết tìm kiếm vấn đề ở đâu. Rõ ràng, bất cứ điều gì đang xảy ra đang xảy ra bởi vì các tập lệnh này đôi khi không thực thi đủ nhanh (Thông thường chúng tải trong một giây, nhưng điều gì đó xảy ra khiến thời gian tải tăng vọt). Điều này xảy ra nhiều lần trong ngày và đã trở thành một vấn đề đối với chúng tôi.
Bây giờ tôi chỉ cần có một crontab để phục vụ tải lại php5-fpm cứ sau 10 phút, điều này sẽ giải quyết vấn đề sự cố. Tất nhiên, khi PHP tải lại, nginx sẽ gây ra lỗi cổng 502, vì vậy đó không phải là một giải pháp.
PHP đang chạy bộ đệm APC, nếu vấn đề đó. Tôi đã đọc ở một vài điểm rằng APC có thể gây treo trong những trường hợp nhất định.
Bất kỳ con trỏ sẽ hữu ích. Tôi thực sự không muốn phải lo lắng về chiếc máy này mọi lúc.
Thêm thông tin có thể được cung cấp tất nhiên. Chỉ cần cho tôi biết những gì bạn cần.
Cập nhật: Tôi vừa sao chép qua apc.php vào một web root và truy cập nó để xem số liệu thống kê của chúng tôi. Mọi thứ có vẻ tốt. Sau đó, tôi nhấp vào liên kết để đi đến Thống kê người dùng và BÙM máy chủ ngay lập tức bị treo. Tôi đã tải lại php-fpm và sau đó tải lại trang thống kê người dùng và nó đã hoạt động tốt. Đợi một phút, tải lại, máy chủ lại treo.
Vì vậy, điều này chắc chắn có liên quan đến APC. Câu hỏi là - Làm thế nào để chúng tôi sửa chữa nó?
Cấu hình APC:
[apc]
apc.enabled="1"
apc.stat = "1"
apc.max_file_size = "2M"
apc.localcache = "1"
apc.localcache.size = "256"
apc.shm_segments = "1"
apc.ttl = "3600"
apc.user_ttl = "7200"
apc.gc_ttl = "3600"
apc.cache_by_default = "1"
apc.filters = ""
apc.write_lock = "1"
apc.num_files_hint= "10000"
apc.user_entries_hint="10000"
apc.shm_size = "1G"
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.include_once_override = "0"
apc.file_update_protection="2"
apc.canonicalize = "1"
apc.report_autofilter="0"
apc.stat_ctime="0"
Cập nhật 2: Chúng tôi đã thực hiện một số tiến bộ về điều này ở đây. Hóa ra plugin bộ nhớ đệm WordPress (W3 Total Cache) là nguyên nhân gây ra sự cố. Chúng tôi vẫn không biết tại sao, nhưng với nó bị vô hiệu hóa, chúng tôi đã chạy PHP gần 4 giờ rồi mà không tải lại, không bị chậm, không gặp sự cố. Chúng tôi vẫn đang sử dụng APC trên các diễn đàn của Diễn đàn và không có vấn đề gì cả. Có cách nào chúng ta có thể xác định TẠI SAO APC bị sập không? Tôi muốn sử dụng nó trên các bản cài đặt WordPress của chúng tôi, nhưng không phải trả giá cho một hệ thống dễ vỡ.