Lập trình 22/09/2026 9 phút

File descriptor và RLIMIT đo thật: container có hai cái trần fd với hai mã lỗi, ulimit mặc định cao 1048576 nên chạm trần cả máy (ENFILE errno 23) trước, --ulimit nofile=64:128 cho EMFILE errno 24, và tiến trình tự nâng soft lên hard không cần quyền

File descriptor trong container bị chặn bởi hai cái trần: RLIMIT_NOFILE của tiến trình và fs.file-max của cả máy, mỗi cái báo một mã lỗi khác nhau. Đo bằng /proc/self/limits và vòng lặp mở /dev/null tới khi gãy: mặc định Docker để soft 1048576 cao hơn file-max 811758 nên chạm ENFILE (errno 23, hết fd cả máy) sau 810817 fd; với --ulimit nofile=64:128 thì chạm EMFILE (errno 24, hết quota tiến trình) ở đúng 65 fd. setrlimit nâng soft từ 64 lên 128 không cần đặc quyền rồi mở thêm được 125 fd. Đọc errno trước khi đổi cấu hình.