apache2ctl : 87 : ulimit : 오류 설정 제한 (작업이 허용되지 않음)


12

서버가 정상적으로 실행되고 있거나 적어도 그런 것처럼 보이지만 항상 다음과 같은 오류가 있습니다.

apache2/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)

Debian Wheezy의 Apache 2.2.22-9에서 발생합니다.

# apache2ctl configtest

/ usr / sbin / apache2ctl : 87 : ulimit : 오류 설정 제한 (작업이 허용되지 않음)
구문 OK

# service apache2 reload

[....] 웹 서버 구성 다시로드 : apache2 / usr / sbin / apache2ctl : 87 : ulimit : 오류 설정 제한 (작업이 허용되지 않음)
. 확인

# service apache2 restart

[....] 웹 서버 재시작 : apache2 / usr / sbin / apache2ctl : 87 : ulimit : 오류 설정 한계 (작업이 허용되지 않음)
... 대기 중 / usr / sbin / apache2ctl : 87 : ulimit : 오류 설정 한계 (작업 허용되지 않음)
. 확인

# service apache2 status

Apache2가 실행 중입니다 (pid 32045).


1
/etc/security/limits.conf 및 /etc/security/limits.d에있는 내용을 살펴보십시오. APACHE_ULIMIT_MAX_FILES (/ usr / sbin / apache2ctl의 변수 참조) 변수가 해당 파일의 한계보다 큰 값으로 설정된 것 같습니다.
— HUB

답변:


16

이것은 도움이 될 수 있습니다 : -http : //ubuntuforums.org/showthread.php ? p=11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors

고마워, 나는 이미 그것을 보았지만 도움이되지 않습니다. sudo를 사용하거나 변경하지 않아도 동일한 오류가 발생합니다.
— Pascal Polleunus

1
나를 위해 일했다! 완전히 잊었다 sudo.
— ThomasReggi

2
+1 매직은 sudo항상 트릭을 수행합니다
— 자전거

최악의 경우, 도커 설정이 적용되고 내 컴퓨터에서는 작동하지만 서버에서는 작동하지 않습니다. 그들 사이에 아무런 차이가없는 컨테이너에서는 ... 나에게 의미가 없습니다.
— superhero

슈퍼 히어로도 마찬가지입니다. 또한 재시작은 sudo와 함께 또는 sudo없이 작동하지 않습니다. stop을 사용하고 sudo없이 시작하여 작동하게해야합니다.
— Shardj

5

문제는 / usr / sbin / apache2ctl (데비안)에서 비롯됩니다. 확인 해봐:

~$ grep ULIMIT /usr/sbin/apache2ctl
ULIMIT_MAX_FILES="${APACHE_ULIMIT_MAX_FILES:-ulimit -n 8192}"
if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
    $ULIMIT_MAX_FILES

여기에서 허용되는 열린 파일 수를 8192로 설정하고 있습니다. 또는 시도하고 실패했습니다.

따라서 apache2ctl에서 오류가 발생하지 않도록하려면 다음 두 줄을 추가하여 /etc/security/limits.conf 파일에서 시스템 설정을 조정하십시오.

*               soft    nofile          8192
*               hard    nofile          8192

나는 그것이 다른 영향을 줄지 모르기 때문에 필요 이상으로 늘리지 않았습니다 (8192). 그러나 이것은 경고를 제거합니다.

내가 익숙하지 않은 ulimits에 동적 요소가 있기 때문에 그 후에 시스템을 재부팅해야하는지 확실하지 않습니다. 그러나 현재 ulimit 파일 수를 확인하기에 충분히 쉽게 테스트 할 수 있습니다.

ulimit -n

나는 그것을 발견 어디 있는지 읽어보십시오 : 유래 - 설정 ulimit를


어떻게 리버스를하고 Apache 제한을 줄이겠습니까?
— eri0o

내가 대답에 게시 한 스크립트가 apache가 설치 한 apache2ctl 스크립트에서 직접 나온 것을 알면 액세스 권한이 있고 반복 할 의사가 있다고 가정하면 해당 스크립트 파일로 이동하여 변경해야합니다 모든 Apache 업그레이드에 대한 조치.
— Adam

2

1. 호스트 시스템에서 ulimit 값을 확인하고 수정하십시오 . / etc / profile 파일에 값을 추가 한 후 적용하십시오.

ulimit -u 10240
ulimit -n 8192     #This configuration is what we most needed
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited

source /etc/profile

또는 당신은 할 수 있습니다 :

sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker'

2. 도커 서비스를 다시 시작하고 구성을 적용하십시오.

sudo service docker restart

3. 컨테이너에서 ulimit를 테스트하십시오.

ulimit -n

이것은 내 테스트 결과입니다!

팁 : 어쩌면 아래 명령을 시도 할 수도 있습니다 (전제 조건 : 호스트 컴퓨터의 ulimit는 8192보다 커야 함).하지만 실패했습니다 .

docker run --privileged -it -p xxxx:80 --ulimit data=8192 linode/lamp /bin/bash

$ ulimit -n 8192제공-bash: ulimit: open files: cannot modify limit: Operation not permitted
— Shardj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.