깊게 중첩된 Apache 프리포크 하위 항목의 원인은 무엇입니까?

깊게 중첩된 Apache 프리포크 하위 항목의 원인은 무엇입니까?

저는 CentOS(주로 6.4)에서 prefork와 mod_perl을 사용하여 Apache 2.2.25를 실행하고 있습니다. 최근 한 사례는 특히 아이들의 아이들을 분기시키는 혼란에 빠졌습니다.

<snip>
\_ /usr/sbin/httpd
|   \_ /usr/sbin/httpd
|   |   \_ /usr/sbin/httpd
|   |       \_ /usr/sbin/httpd
|   |           \_ /usr/sbin/httpd
|   |           |   \_ /usr/sbin/httpd
|   |           |       \_ /usr/sbin/httpd
|   |           |       |   \_ /usr/sbin/httpd
|   |           |       \_ /usr/sbin/httpd
|   |           \_ /usr/sbin/httpd
|   \_ /usr/sbin/httpd
|       \_ /usr/sbin/httpd
|       |   \_ /usr/sbin/httpd
|       |   |   \_ /usr/sbin/httpd
|       |   |   |   \_ /usr/sbin/httpd
|       |   |   \_ /usr/sbin/httpd
|       |   \_ /usr/sbin/httpd
|       \_ /usr/sbin/httpd
\_ /usr/sbin/httpd
|   \_ /usr/sbin/httpd
\_ /usr/sbin/httpd
\_ /usr/sbin/httpd
</snip>

동시에 상자에 메모리가 부족해졌습니다(깊은 분기 또는 메모리 부족 중 어느 것이 먼저인지는 확실하지 않습니다).

나는 이전에 아파치가 이런 일을 하는 것을 본 적이 없으며 아직 원인을 좁히지 못했습니다. 내가 조사하고 있는 두 가지 가능성은 mod_perl(또는 mod_perl로 인해 지속되는 코드)의 메모리 누수 또는 일부 제한된 포크 폭탄(임의의 자식을 포크할 수는 없지만 추가 포크를 포크할 수 있음)을 허용하는 보안 익스플로잇입니다. 아파치 어린이).

아파치가 이렇게 포크되는 원인이 무엇인지 잘 모르겠습니다(편집하다나는 처음에 Graceful이 얼마나 잘 작동하는지에 대한 잘못된 믿음을 언급했지만 여기에서 내 생각은 순환 참조 유형 메모리 누수(직접 또는 상자에서 사용 가능한 모든 메모리를 사용하여 간접적으로)로 인해 일종의 mod_perl 혼란이 발생하여 추가 작업자가 발생했다는 것입니다. 자식이 주 부모 대신 자식을 분기하는 것입니다. 이에 대한 실질적인 이유는 없으며 단지 두 가지 문제(딥 포크 및 메모리 사용)를 조정하려고 시도한 것뿐입니다.

또는 추적해야 할 보안 취약점이 있을 수도 있습니다.

이전에 아파치에서 이런 유형의 동작을 본 적이 있고 해결책을 아는 사람이 있습니까?

답변1

이는 mod_perl(이미 나쁜 생각임)에서 코드를 분기한 다음 하위 항목을 정리하지 않음으로써 상황을 더욱 악화시키는 것으로 밝혀졌습니다. mod_perl에서 포크하면 코드가 포크되는 것이 아니라 아파치를 포크하는 것입니다. 그러면 해당 하위는 계속해서 다른 포크된 아파치 하위처럼 콘텐츠를 계속 제공하지만 개수에 포함되지 않으므로 인스턴스가 너무 많아도 추려지지 않습니다.

관련 정보