Bạn đang tạo một thể hiện của lớp Mongo cho từng thao tác riêng lẻ. Điều đó sẽ không hoạt động vì mỗi phiên bản sẽ tạo và giữ ít nhất một kết nối (nhưng theo mặc định là 10) và những kết nối đó sẽ chỉ bị xóa nếu Java GC xóa cá thể Mongo của bạn hoặc khi bạn gọi close ().
Vấn đề là trong cả hai trường hợp, bạn đang tạo chúng nhanh hơn so với việc chúng đang được đóng ngay cả khi sử dụng một luồng duy nhất. Điều này sẽ làm cạn kiệt số lượng kết nối tối đa khi vội vàng. Cách khắc phục phù hợp là giữ một phiên bản Mongo xung quanh bằng cách sử dụng mẫu singleton (Mongo.Holder cung cấp chức năng cho việc này, hãy thử Mongo.Holder.connect (..)). Một "bản sửa lỗi" nhanh chóng là tăng giới hạn bộ mô tả tệp trên máy của bạn để số lượng kết nối tối đa cao hơn đáng kể nhưng rõ ràng cuối cùng bạn có thể đạt đến giới hạn tương tự. Bạn có thể kiểm tra giá trị tối đa hiện tại của mình bằng cách sử dụng (trong shell):
Kết nốidb.serverStatus().connections
TL; DR:Coi một cá thể Mongo như một cá thể và làm cho chúng tồn tại lâu nhất có thể và bạn là vàng. Việc triển khai MongoFactory với phương thức tĩnh getInstance () trả về một cá thể được tạo lười biếng sẽ thực hiện tốt thủ thuật. Chúc các bạn thành công.