Kết nối với MySQL có thể bị gián đoạn bởi một số phương tiện, nhưng tôi khuyên bạn nên xem lại câu trả lời của Mario Carrion vì đó là một câu trả lời rất khôn ngoan.
Có vẻ như kết nối bị gián đoạn vì nó đang được chia sẻ với các quy trình khác, gây ra lỗi giao thức truyền thông ...
... điều này có thể dễ dàng xảy ra nếu nhóm kết nối bị ràng buộc quá trình, mà tôi tin rằng nó là, trong ActiveRecord, có nghĩa là cùng một kết nối có thể được "kiểm tra" đồng thời nhiều lần trong các quá trình khác nhau.
Giải pháp là các kết nối cơ sở dữ liệu chỉ được thiết lập SAU fork
trong máy chủ ứng dụng.
Tôi không chắc bạn đang sử dụng máy chủ nào, nhưng nếu bạn đang sử dụng warmup
tính năng - không.
Nếu bạn đang chạy bất kỳ lệnh gọi cơ sở dữ liệu nào trước yêu cầu mạng đầu tiên - thì không.
Một trong hai hành động này có khả năng khởi tạo nhóm kết nối trước fork
ing xảy ra, khiến nhóm kết nối MySQL được chia sẻ giữa các quy trình trong khi hệ thống khóa thì không.
Tôi không nói rằng đây là lý do duy nhất có thể xảy ra cho vấn đề, như @ sloth-jr đã nêu, có các tùy chọn khác ... nhưng hầu hết chúng dường như ít xảy ra hơn theo mô tả của bạn.
Chú thích bên lề:
Mỗi tiến trình có thể chứa một số kết nối. Trong trường hợp của bạn, bạn có thể có tới 500X36 kết nối . (xem chỉnh sửa)
Nói chung, số lượng kết nối trong nhóm thường có thể giống với số luồng trong mỗi quá trình (nó không được nhỏ hơn số luồng, nếu không tranh cãi sẽ làm bạn chậm lại). Đôi khi, tốt hơn nếu bạn thêm một vài cái nữa tùy thuộc vào ứng dụng của bạn.
CHỈNH SỬA:
Tôi xin lỗi vì đã bỏ qua thực tế rằng số lượng quy trình đang tham chiếu đến dữ liệu MySQL chứ không phải dữ liệu ứng dụng.
Số quá trình bạn đã hiển thị là dữ liệu máy chủ MySQL, dường như sử dụng một chuỗi IO cho mỗi kết nối . Dữ liệu "Xử lý" thực sự tính các kết nối đang hoạt động và không phải các quy trình hoặc chuỗi thực tế (mặc dù nó cũng phải dịch sang số lượng chuỗi).
Điều này có nghĩa là trong số 500 kết nối có thể có cho mỗi quy trình ứng dụng (tức là nếu bạn đang sử dụng 8 quy trình cho ứng dụng của mình, thì đó sẽ là 8X500 =4.000 kết nối được phép) cho đến nay, ứng dụng của bạn chỉ mở được 36 kết nối.