데비안에서 "열린 파일이 너무 많음"을 방지하는 방법

데비안에서 "열린 파일이 너무 많음"을 방지하는 방법

apache2 서버의 모든 관련 로그 파일을 한 번에 보려면 다음을 사용합니다.

tail -f /var/kunden/logs/*log /var/kunden/logs/*log /var/log/apache2/*log |grep -v robots|grep -v favicon

하지만 지금은 이러한 파일이 너무 많기 때문에 그 제한을 늘리고 싶습니다.

SSH 세션을 위해 늘리는 방법은 무엇입니까? 전 세계적으로 어떻게 늘릴 수 있나요?

내 컴퓨터의 열린 파일 제한이 1024인 것을 볼 수 있습니다.

ulimit -n
1024

답변1

두 가지 유형의 제한 사항이 있다는 것을 아는 것이 중요합니다.

  • 하드 제한루트로만 구성할 수 있습니다. 이는 소프트 제한의 ​​가능한 가장 높은 값(제한)입니다.
  • 소프트 리미트일반 사용자가 설정할 수 있습니다. 이것이 실제로 적용되는 한도입니다.

단일 세션 솔루션

셸에서 소프트 제한을 설정합니다.

ulimit -Sn 2048

이 예에서는 실제 제한을 2048로 늘리지만 하드 제한 ulimit -Hn(check:)이 동일하거나 더 높은 경우에만 명령이 성공합니다. 더 높은 값이 필요한 경우 다음 방법 중 하나를 사용하여 하드 제한을 늘립니다. 이러한 제한은 프로세스별로 설정되고 새로 생성된 프로세스에 의해 상속되므로 동일한 셸에서 이 명령이 실행된 후에 실행되는 모든 항목에는 새로운 제한이 적용됩니다.

단일 세션에서 하드 제한 변경

루트만 하드 제한을 변경할 수 있고, 루트로 전환한 후에는 원래 사용자로 다시 전환해야 하기 때문에 쉽지 않습니다. 해결책은 다음과 같습니다 sudo.

sudo sh -c "ulimit -Hn 9000 ; exec su \"$USER\""

전체 시스템 솔루션

Debian 및 사용되는 기타 여러 시스템에서는 .conf 파일 에 설명을 포함 pam_limits할 수 있습니다 . 예시 라인:/etc/security/limits.conf/etc/security/limits.d

@webadmins       hard     nofile     16384
@webadmins       soft     nofile      8192

webadmins로그인 후 그룹 내 사용자에 대한 하드 제한과 기본 소프트 제한이 설정됩니다.

기타 제한사항

하드 제한 값은 열린 파일 설명자 값에 대한 전역 제한에 의해 제한됩니다. /proc/sys/fs/file-max이는 최신 Linux 배포판에서 기본적으로 상당히 높습니다. 이 값은 NR_OPEN커널 컴파일 중에 사용되는 값으로 제한됩니다.

더 나은 해결책은 없을까요?

*log제공한 모든 파일이 tail -f실제로 모니터링해야 하는 활성 파일인지 확인할 수 있습니다 . 이러한 파일 중 일부는 로깅을 위해 닫혀 있을 수 있으므로 몇 개의 파일만 열면 됩니다.

답변2

Apache error.log에 PHP 경고가 있습니다.

failed to open stream: Too many open files in ...

그래서 나는 Apache가 시작 시(Ubuntu 14.04에서) 이 값을 개별적으로 설정한다는 것을 알았습니다. 에 구성되어 있습니다 /etc/apache2/envvars.

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

그래서 세 번째 줄을 조정해야 했어요.

관련 정보