Kiểm tra daemon đang chạy trước khi tin vào ulimit -n của shell đăng nhập. Với bản cài dùng squid.service, hãy bắt đầu bằng:

systemctl show squid.service -p MainPID -p LimitNOFILE
systemctl cat squid.service

Đọc /proc/PID/limits bằng ID tiến trình thực tế. Trong triển khai nhiều tiến trình, hãy kiểm tra cả worker liên quan. Một giá trị được lưu trong cấu hình không chứng minh rằng tiến trình này đã kế thừa nó.

Kiểm soátPhạm vi
Shell ulimit và PAM limits.confCác tiến trình con của shell hoặc phiên thực sự dùng thiết lập PAM
systemd LimitNOFILE=Tiến trình được khởi chạy theo chính sách tài nguyên của dịch vụ đó
Squid max_filedescriptors, nơi được hỗ trợGiới hạn ứng dụng trong các ràng buộc của hệ điều hành

Một dịch vụ hệ thống không tiếp nhận thay đổi PAM chỉ vì quản trị viên đã sửa tệp. Hãy dùng drop-in riêng cho dịch vụ khi việc thay đổi giới hạn systemd của nó là phù hợp. Squid ghi rõ rằng max_filedescriptors cần khởi động lại để thay đổi; nếu để không đặt, nó kế thừa giới hạn mềm của hệ điều hành.

Định cỡ giới hạn theo bộ mô tả tệp chứ không theo người dùng. Máy khách có thể giữ nhiều socket, và các kết nối đi ra, nhật ký cùng ống hỗ trợ cũng tiêu thụ bộ mô tả. Nâng giới hạn cho phép tiêu thụ nhiều hơn mà không cấp phát ngay một lượng RAM cố định cho mỗi bộ mô tả khả dĩ. Cả ước tính bộ nhớ trên mỗi socket kiểu cũ lẫn 65,535 đều không phải yêu cầu dung lượng phổ quát hay trần của Linux.

Sau khi thay đổi dịch vụ, hãy so sánh giới hạn của tiến trình mới với các giá trị dự định. Nếu lỗi xuất hiện thấp hơn hẳn, hãy điều tra tài nguyên thực sự đang cạn kiệt.

Bài viết liên quan