Tôi có một chương trình Java sẽ phát sinh lỗi 'Quá nhiều tệp đang mở' sau khi chạy trong khoảng 3 phút. Việc tăng giới hạn tệp mở không hoạt động, vì nó vẫn sử dụng hết tất cả giới hạn, chỉ chậm hơn. Vì vậy, có một cái gì đó sai trái với chương trình của tôi và tôi cần phải tìm hiểu.Linux - "Quá nhiều tệp đang mở" với đường ống, cách gỡ lỗi
Đây là những gì tôi đã làm, 10970
là pid
- Kiểm tra mở file của quá trình Java sử dụng
cat /proc/10970/fd
và tìm hiểu hầu hết trong số đó là ống - Sử dụng
lsof -p 10970 | grep FIFO
để liệt kê tất cả các đường ống và tìm khoảng 450 ống - ống trông giống như dưới đây
java 10.970 dịch vụ 1w FIFO 0,8 0t0 5890 ống
java 10.970 dịch vụ 2w FIFO 0,8 0t0 5890 ống
java 10.970 dịch vụ 169r FIFO 0,8 0t0 2.450.696 ống
java 10.970 dịch vụ 201r FIFO 0,8 0t0 2.450.708 ống
Nhưng tôi không biết cách tiếp tục. 0,8
trong đầu ra ở trên có nghĩa là số thiết bị. Làm thế nào tôi có thể tìm thấy các thiết bị với những con số này?
Cập nhật
Chương trình này là một máy chủ TCP và nhận các kết nối socket từ tin nhắn của khách hàng và chế biến. Tôi có hai môi trường. Trong môi trường sản xuất nó hoạt động tốt, nhưng trong môi trường thử nghiệm nó có vấn đề này gần đây. Trong môi trường sản xuất, tôi không thấy nhiều ống. Mã và cơ sở hạ tầng của hai môi trường này giống nhau, cả hai đều được quản lý bởi Chef.
Câu hỏi này là mơ hồ. Chương trình của bạn làm gì? Ngoài ra, bạn có đóng "kết nối" của mình bằng bất kỳ cơ hội nào không? –