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.