아파치가 프리 포크 또는 작업자로 실행 중인지 어떻게 알 수 있습니까?


40

아파치가 프리 포크 또는 작업자로 실행 중인지 (또는 실행하도록 구성되어 있는지) 어떻게 알 수 있습니까?


2
더 기술적으로 '다음과 같이 실행되도록 컴파일'

답변:


37

MPM은 컴파일 타임에 구성됩니다. 나중에 알아내는 한 가지 방법은 모듈로 컴파일 된 목록을 작성하는 것입니다. 이 목록에는 선택한 MPM이 포함됩니다. -l 플래그를 사용하여 아파치 바이너리를 실행하여 목록을 작성할 수 있습니다.

andreas@halleck:~$ apache2 -l
Compiled in modules:
 core.c
 mod_log_config.c
 mod_logio.c
 worker.c
 http_core.c
 mod_so.c
andreas@halleck:~$ 

여기서 worker.c 모듈을 찾게되므로 worker MPM을 실행하고 있습니다.


4
이 답변은 잘못되었습니다. 내 대답을 참조하십시오.
Chris Johnson

1
흠, 우분투에서 나는 이것을 할 때 일꾼이나
프리 포크를

2
Ubuntu에서는 apache2ctl -M활성 모듈을 나열 하는 데 사용할 수 있습니다 .
SteffenNielsen

53

Series8217과 Andol의 답변이 모두 틀립니다.

문제는 Apache가 prefork 또는 worker를 실행 중인지 확인하는 방법이었습니다 . 다른 답변에서 제공하는 조언 은 현재 기본 또는 다른 선택이 사용되는 경우가 아니라 기본 MPM이 무엇인지 알려줍니다 (컴파일 된 모듈 기반).

경우 httpd -V쇼 prefork의 그 단지 수단의 prefork의는 컴파일 된 기본 MPM입니다. 이 프로세스에 표시된대로 Apache 구성 파일 설정을 변경하여이를 대체 할 수 있습니다.

  1. 구성 파일 편집 (예 : /etc/sysconfig/httpdCentOS / RedHat)
  2. 이 줄을 추가하거나 주석 해제하십시오. HTTPD=/usr/sbin/httpd.worker
  3. 아파치 다시 시작

이 프로세스를 사용하여 실제로 실행중인 MPM을 표시 할 수 있습니다.

  1. Apache mod_info 활성화
  2. 일반적으로 mod_info URL을 쿼리하십시오. curl localhost/server-info
  3. "서버 설정"섹션에 "MPM 이름 : 작업자"가 표시됩니다.
  4. httpd -V다시 실행 -작업자가 아닌 프리 포크가 계속 표시됩니다.

결론 :

  • httpd -V 실제로 사용중인 옵션이 아닌 기본 옵션을 표시합니다.

많은 웹 사이트에는 httpd -VApache가 prefork 또는 worker를 실행 중인지 확인 하는 데 사용되는 답변이 있습니다 . 그들은 모두 틀렸다. 위 절차를 시도하여 스스로 확인하십시오.


참고로, httpd.apache.org/docs/trunk/mpm.html 에 따르면 MPM은 모든 플랫폼에서 정적 모듈이거나 DSO (Unix)에서 빌드 될 수 있습니다. 정적 모듈로 빌드되면 "MPM을 변경하려면 서버를 다시 빌드해야합니다." 정적 모듈 MPM에 대한 아파치 문서가 서버를 다시 작성하는 것 외에는 변경할 수없는 것이 아닙니까?
Steven T. Snyder

이것은 더 높은 수준의 래퍼가있는 배포판과 매우 흡사합니다.
andol

2
CentOS 6.6 / usr / sbin / httpd에서 /usr/sbin/httpd.event 및 /usr/sbin/httpd.worker는 컴파일 타임에 각각 다른 MPM이 구성된 고유 한 바이너리입니다 (각각 포크, 이벤트 및 작업자). / etc / sysconfig / httpd에서 HTTPD 설정을 변경하면 init 스크립트가 실행할 바이너리를 제어 할 수 있습니다.
Paul Haldane

나는 LTS 우분투 16.04 대신 아파치 -V의 아파치 -V를 실행했다
cnizzardini

41

우분투 14.04에서

a2query -M

지시 event, prefork,worker

당신은에 대한 기호 링크 추가하여 변경할 수 있습니다 mpm_<chosen>에서 mods-availablemods-enabled의를 /etc/apache2.

한 번에 하나만 허용됩니다.


2
이것은 정답이어야합니다.

예, 좋은 대답입니다! 간단하고 필요한 것을 반환
Flash Thunder

감사합니다. (아파치 2.4에서 작동했습니다. 아파치 2.2에서는 작동하지 않는 것 같습니다)
dmikam

eventMPM은 아파치의 사이트, "활성 처리와의 연결을 위해 스레드를 소비 목적으로 작업자 MPM의 변형"에 따르면,.
Jonathan Berger

7

RedHat 및 파생 제품에서 시작 top하거나 ps auxhttpd 프로세스 이름을 확인하십시오.

  • httpd Apache가 prefork로 실행되고 있음을 의미
  • httpd.worker 작업자로 실행되고 있음을 의미

4

RHEL / Fedora / etc에서을 실행하십시오 httpd -V. 다음과 같은 출력이 제공됩니다.

Server version: Apache/2.2.21 (Unix)
     ...
Architecture:   64-bit
Server MPM:     Prefork
     ...

여기서 'Server MPM'은 'Prefork'이므로 서버에서 prefork MPM을 실행하고 있습니다.


이 답변은 잘못되었습니다. 내 대답을 참조하십시오.
Chris Johnson

@ChrisJohnson, interesting discovery... My understanding was that the MPM could not be changed by configuration, only by compilation. It seems the OP thought the same, since he commented on his question with "or more technically 'compiled to run as'". I'll look into reproducing your answer and once I've confirmed it I'll revoke mine.
Steven T. Snyder

필자는 httpd.apache.org/docs/trunk/mpm.html 의 아파치 문서를 통해 MPM이 DSO 모듈로 빌드되고 "Unix 및 유사한 플랫폼"에서 LoadModule 지시문을 사용하여 동적으로로드 될 수 있음을 확인했습니다 . 이 MPM은 참으로 (요즘 가장 일반적인 구성 될 수있는 ..) 특정 상황에서로드시 변경 될 수 있습니다
스티븐 T. 스나이더

4

크리스 존슨이 맞습니다. httpd.conf =>로 이동하여 다음 줄을 추가하십시오.

<Location /server-info>
SetHandler server-info
</Location>

아파치를 다시 시작하십시오 : /etc/init.d/httpd restart. 그런 다음 브라우저로 localhost / server-info 에 액세스 하고 MPM 이름 섹션을보십시오 .


심지어 더 좋은 중 넣어 그 <IfModule info_module> </ IfModule> 사이
Lexib0y

3

다음은 사용중인 MPM을 결정하는 데 신뢰할 수있는 다른 방법입니다. 에 다음을 추가하십시오 httpd.conf.

<IfModule prefork.c>
    Header append X-MPM prefork
</IfModule>
<IfModule worker.c>
    Header append X-MPM worker
</IfModule>

그런 다음를 사용하여 헤더를 확인하십시오 curl -I localhost | grep X-MPM.


3

centos (또는 rhel)에서 다음 명령을 실행할 수 있습니다.

ps -ef | grep httpd

당신이 볼 경우 /usr/sbin/httpd.worker실행, 그것은 작업자 MPM을 사용하고 있습니다. 당신이 볼 경우 /usr/sbin/httpd실행, 다음은 prefork의를 사용하고 있습니다


2

Chris Johnson의 답변이 옳습니다.

Apache Documentation ( http://httpd.apache.org/docs/2.2/mod/mod_info.html )에 설명 된대로 정보 모듈을 활성화 한 후이 하나의 라이너는 사용중인 MPM을 제공합니다.

links -dump http://localhost/server-info/?server | grep "MPM Name"

2

배포판과 같이 데비안에서 알아내는 한 가지 방법은 다음을 실행하는 것입니다.

apachectl -V | grep -i mpm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.