CentOS 6.10에서 시스템에서 시작되는 최대 열린 파일 수가 1024개인 이유는 무엇입니까?

CentOS 6.10에서 시스템에서 시작되는 최대 열린 파일 수가 1024개인 이유는 무엇입니까?

나는 수정했습니다 /etc/security/limit.conf:

*  hard  nofile  1000000
*  soft  nofile  1000000

이 파일도 그렇고/etc/security/limits.d/90-nproc.conf

*          soft    nproc     unlimited
root       soft    nproc     unlimited

그리고 시스템을 재부팅했습니다. 출력은 다음과 같습니다 ulimit -a.

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30967
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1000000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 30967
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

하지만 내 프로그램이 rc.local부팅되기 시작했는데 최대 파일 제한은 여전히 ​​1024입니다.

출력은 다음과 같습니다 cat /proc/1695/limits.

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            10485760             unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             30967                30967                processes 
Max open files            1024                 4096                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       30967                30967                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us 

그 이유는 무엇입니까? 명령줄에서 프로그램을 시작할 때 그러한 제한이 없습니다.

답변1

시스템 차원에서는 해결하지 못했습니다. golang 프로그램을 통해 해결했습니다.

    var rLimit syscall.Rlimit
    err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        log.Fatal("1Error Getting Rlimit ", err)
    }
    log.Infof("Current Rlimit:%+v", rLimit)
    rLimit.Max = 1000000
    rLimit.Cur = 1000000
    err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        log.Fatal("Error Setting Rlimit ", err)
    }
    err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
    if err != nil {
        log.Fatal("2Error Getting Rlimit ", err)
    }
    log.Info("Rlimit Final", rLimit)

관련 정보