Computer >> 컴퓨터 >  >> 체계 >> Linux

Linux에서 '너무 많은 파일 열기' 오류를 수정하는 방법은 무엇입니까?

매우 자주 '열린 파일이 너무 많음 ' 오류는 고부하 Linux 서버에서 발생합니다. 이는 프로세스가 너무 많은 파일(파일 설명자)을 열었고 새 파일을 열 수 없음을 의미합니다. Linux에서 최대 열린 파일 제한은 기본적으로 각 프로세스 또는 사용자에 대해 설정되며 값은 다소 작습니다.

이 기사에서는 Linux에서 열린 최대 파일 수에 대한 현재 제한을 확인하는 방법과 전체 호스트, 개별 서비스 또는 현재 세션에 대해 이를 변경하는 방법을 배웁니다.

Linux에서 '너무 많은 열린 파일' 오류 및 열린 파일 제한

먼저 '열린 파일이 너무 많습니다' 오류가 나타나는 위치를 살펴보겠습니다. 대부분의 로그를 읽을 때 NGINX/httpd 웹서버나 데이터베이스 서버(MySQL/MariaDB/PostgreSQL)가 설치된 서버에서 발생한다. 예를 들어, Nginx 웹 서버가 열린 파일 제한을 초과하면 오류가 표시됩니다.

socket () failed (29: Too many open files) while connecting to upstream

Linux에서  너무 많은 파일 열기  오류를 수정하는 방법은 무엇입니까?

이 명령을 사용하여 시스템에서 열 수 있는 최대 파일 설명자 수를 얻을 수 있습니다.

# cat /proc/sys/fs/file-max

현재 사용자의 열린 파일 제한은 1024입니다. 다음과 같이 확인할 수 있습니다.

# ulimit -n

Linux에서  너무 많은 파일 열기  오류를 수정하는 방법은 무엇입니까?

두 가지 제한 유형이 있습니다. 하드 및 부드러움 . 사용자는 소프트 한계를 변경할 수 있습니다(단, 소프트 값은 하드 값을 초과할 수 없음). 권한이 있는 사용자 또는 루트 사용자만 하드 제한 값을 수정할 수 있습니다.

소프트 제한을 표시하려면 다음 명령을 실행하십시오.

# ulimit –nS

하드 리미트 값을 표시하려면:

# ulimit -nH

Linux에서 최대 파일 열기 제한을 늘리는 방법은 무엇입니까?

모든 서비스에서 많은 수의 파일을 열 수 있도록 Linux OS에서 제한을 변경할 수 있습니다. 새 설정을 영구적으로 만들고 서버 또는 세션이 다시 시작된 후 재설정을 방지하려면 /etc/security/limits.conf를 변경해야 합니다. . 다음 행을 추가하십시오.

* hard nofile 97816
* soft nofile 97816

Ubuntu를 사용하는 경우 다음 행도 추가하십시오.

session required pam_limits.so

이 매개변수를 사용하면 사용자 인증 후 열린 파일 제한을 설정할 수 있습니다.

변경한 후 터미널을 다시 로드하고 max_open_files 값을 확인하십시오.

# ulimit -n

97816

서비스당 Open File Descriptor 제한 증가

전체 운영 체제가 아닌 특정 서비스에 대해 열린 파일 설명자의 제한을 변경할 수 있습니다. 아파치를 예로 들어보자. systemctl을 사용하여 서비스 설정을 엽니다.

# systemctl edit httpd.service

원하는 한도를 추가하세요. 예:

[Service]
LimitNOFILE=16000
LimitNOFILESoft=16000

Linux에서  너무 많은 파일 열기  오류를 수정하는 방법은 무엇입니까?

변경한 후 서비스 구성을 업데이트하고 다시 시작하십시오.

# systemctl daemon-reload
# systemctl restart httpd.service

값이 변경되었는지 확인하려면 서비스 PID를 가져옵니다.

# systemctl status httpd.service

예를 들어 서비스 PID는 3724:

입니다.

# cat /proc/3724/limits | grep "Max open files”

Linux에서  너무 많은 파일 열기  오류를 수정하는 방법은 무엇입니까?

따라서 특정 서비스에 대한 최대 열린 파일 수 값을 변경했습니다.

Nginx 및 Apache에 대한 최대 열린 파일 제한을 설정하는 방법

웹 서버에 대한 열린 파일 수 제한을 변경할 때 서비스 구성 파일도 변경해야 합니다. 예를 들어 Nginx 구성 파일 /etc/nginx/nginx.conf에서 다음 지시문 값을 지정/변경합니다. :

worker_rlimit_nofile 16000
worker_connections 8192를 사용하여 로드가 많은 8코어 서버에서 Nginx를 구성할 때 8192*2*8(vCPU) =131072를 지정해야 합니다. worker_rlimit_nofile에 있습니다.

그런 다음 Nginx를 다시 시작하십시오.

아파치의 경우 디렉토리 생성:

# mkdir /lib/systemd/system/httpd.service.d/

그런 다음 limit_nofile.conf 파일을 만듭니다.

# nano /lib/systemd/system/httpd.service.d/limit_nofile.conf

Linux에서  너무 많은 파일 열기  오류를 수정하는 방법은 무엇입니까?

추가:

[Service]
LimitNOFILE=16000

httpd를 다시 시작하는 것을 잊지 마십시오.

현재 세션에 대한 파일 열기 제한 변경

터미널 세션의 최대 열린 파일 제한을 변경하려면 다음 명령을 실행하십시오.

# ulimit -n 3000

터미널을 닫고 새 세션을 만든 후 제한은 /etc/security/limits.conf에 지정된 원래 값으로 돌아갑니다. .

시스템의 일반 값을 변경하려면 /proc/sys/fs/file-max , /etc/sysctl.conf에서 fs.file-max 값을 변경하십시오:

fs.file-max = 100000

그리고 적용하세요:

# sysctl -p

Linux에서  너무 많은 파일 열기  오류를 수정하는 방법은 무엇입니까?

이 기사에서는 Linux에서 열린 파일 설명자 제한 값이 너무 작을 때 문제를 해결하는 방법을 배웠고 서버에서 이러한 제한을 변경하는 몇 가지 옵션에 대해 논의했습니다.