저는 Proxmox 클러스터(KVM 사용)에서 약 60개의 웹 서버를 실행하고 있습니다. 이러한 가상 머신은 최신 버전의 Debian 11을 실행합니다. 그들은 nginx, PHP-FPM 및 MariaDB의 다른 버전을 사용합니다. 나는 코드 접근 방식의 인프라를 따르고 인프라의 일부 예외(예: jitsi)를 제외하고 모든 서버는 ansible에 의해 제공되므로 거의 동일합니다. 저는 표준 Typo3 설치뿐만 아니라 일반적으로 Laravel에서 개발되는 보다 복잡한 애플리케이션을 호스팅합니다. 얼마 전 저는 인프라 및 라이브 고객 프로젝트에 대해 CheckMK에서 활성 검사를 구성하기 시작했습니다(이 검사는 check_http라는 Nagios용 플러그인을 사용합니다). 이는 외부에서 액세스할 수 있음을 의미합니다.
그 이후에는 하루에 한두 번 정도 시간 초과 오류가 발생하기 시작했는데, 이는 활성 검사를 통해 모니터링한 20개의 서버에 무작위로 분산된 것으로 보입니다. 처음에는 그냥 오탐인 줄 알았는데 지난 금요일 지트시 모임 중에 그런 일이 일어났고 동료가 저에게 알려줬어요. nginx의 로그를 확인한 결과 다음 항목에는 Checkmk가 서버에 연결할 수 없었던 정확한 시간이 1분 미만으로 표시되어 있는 것으로 나타났습니다(검사 사이의 시간, 다음 검사는 항상 음수이므로 오류가 없음을 의미함). 몇 초 밖에 걸리지 않습니다. 이 문제의 원인은 무엇입니까? 어떻게 해결할 수 있나요? 문제를 더 자세히 재현하고 분석할 수 있는 방법에 대한 제안 사항이 있습니까?
mk 오류 메시지를 확인하세요.
요약 주소 195.34.XXX.XXX 및 포트 443에 연결 중: 연결이 거부되었습니다. 세부 정보 HTTP 치명적 - TCP 소켓을 열 수 없습니다.
mk-restore 메시지를 확인하세요:
요약 HTTP OK: HTTP/1.1 200 OK - 0.008초 응답 시간에 59404바이트
Nginx 오류 로그:
2022/09/16 11:18:42 [경고] 3212994#3212994: *2590 연결 5에 남아 있는 개방형 소켓 #18
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2494 연결 8에 남아 있는 개방형 소켓 #15
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2533 연결 9에 남아 있는 개방형 소켓 #16
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2534 연결 10에 남아 있는 개방형 소켓 #17
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2591 연결 11에 남아 있는 개방형 소켓 #20
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2573 연결 12에 남아 있는 개방형 소켓 #24
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2532 연결 13에 남아 있는 개방형 소켓 #10
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3230 연결 14에 남아 있는 개방형 소켓 #28
2022/09/16 11:18:42 [경고] 3212994#3212994: *2467 연결 15에 남아 있는 오픈 소켓 #19
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2535 연결 16에 남아 있는 개방형 소켓 #21
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3233 연결 17에 남아 있는 개방형 소켓 #27
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2771 연결 22에 남아 있는 개방형 소켓 #30
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *2770 연결 23에 남아 있는 개방형 소켓 #29
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3234 연결 24에 남아 있는 개방형 소켓 #22
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3229 연결 26에 남아 있는 개방형 소켓 #11
2022/09/16 11:18:42 [ALERT] 3212994#3212994: *3231 연결 28에 왼쪽 오픈 소켓 #32
2022/09/16 11:18:42 [경보] 3212994#3212994: 중단 중
2022/09/16 11:20:19 [오류] 3295994#3295994: *153 응답을 읽는 중 업스트림 시간 초과(110: 연결 시간 초과)>
감사합니다
스테판 마르터 슈마허
답변1
이는 "최대 열린 파일 수 소프트 제한"이 너무 작기 때문에 발생할 수 있습니다. Debian에서 기본값이 65536에서 1024로 변경된 것을 보았습니다. nginx에는 충분하지 않을 수 있습니다. 콘솔에서 다음을 입력하여 이를 확인하세요.
ulimit -n
nginx에서 사용하는 제한을 확인하려면 다음 명령을 입력하여 해당 인스턴스의 PID를 확인하세요.
ps aux |grep nginx
다음과 같은 줄이 표시됩니다.
www-data 148105 0.0 0.1 59100 5492 ? S Feb09 0:00 nginx: worker process
프로세스의 PID(두 번째 열)를 가져온 후 다음을 수행합니다.
cat /proc/[PID]/limits
cat /proc/148105/limits # in this example
검색 라인:
Max open files 8192 8192 files
8192 대신 1024가 표시되면 ngnix 구성 파일(nginx.conf)의 시작 부분(기본 섹션)에 다음 줄을 추가하세요.
worker_rlimit_nofile 8192;
당신은 그것을 관찰할 수 있습니다. 더 큰 숫자를 사용하세요. 마지막으로 ngnix 데몬을 다시 시작하고 위의 절차에 따라 새 값을 확인합니다.