Tìm giới hạn thực sự của bộ mô tả tệp trong Squid
Đọc giới hạn tiến trình của proxy đang chạy trước khi thay đổi cấu hình PAM hoặc sao chép một giá trị nofile cố định từ công thức dung lượng.
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át | Phạm vi |
|---|---|
Shell ulimit và PAM limits.conf | Cá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.