Explicación detallada, comparación de tres modos de procesamiento de solicitudes en Http (MPM)

Comparación de tres modos de procesamiento de solicitudes (MPM) en Http

http admite tres modos de trabajo MPM:

  • prefork
  • obrero,
  • enent

prefork --- modelo de E / S multiproceso, cada proceso responde a una solicitud

Explicación detallada, comparación de tres modos de procesamiento de solicitudes en Http (MPM)

Prefork MPM: Prefork MPM: Hay un proceso de control principal, y luego se generan múltiples procesos secundarios. Cada proceso secundario tiene un subproceso independiente para responder a las solicitudes del usuario. Ocupa memoria relativamente, pero es relativamente estable. Puede establecer el número máximo y mínimo de procesos, que es el más Un modo antiguo y el modo más estable, adecuado para escenas donde el tráfico no es muy grande

  • Ventajas: estable
  • Desventajas: lento, consume recursos, no es adecuado para escenarios de alta concurrencia

Este módulo de multiprocesamiento (MPM) implementa un servidor web pre-bifurcado sin subprocesos. Cada proceso del servidor puede responder a las solicitudes entrantes y el proceso principal gestiona el tamaño del grupo de servidores. Es adecuado para sitios que necesitan evitar los subprocesos para ser compatibles con bibliotecas no seguras para subprocesos. También es el mejor MPM para aislar cada solicitud, por lo que el problema de una sola solicitud no afectará a ninguna otra solicitud. Este MPM tiene una fuerte capacidad de autorregulación, por lo que rara vez es necesario ajustar sus instrucciones de configuración. Lo más importante es que MaxRequestWorkers es lo suficientemente grande para manejar todas las solicitudes simultáneas que desea recibir, pero lo suficientemente pequeño como para garantizar que todos los procesos tengan suficiente RAM física.

Configuración relacionada con el modo prefork:

StartServers    100 #记录开始进程为100  当没有人访问的时候就变成为80个
MinSpareServers  50
MaxSpareServers  80
ServerLimit   2560 #最多进程数,最大值 20000
MaxRequestWorkers   2560 #最大的并发连接数,默认256
MaxConnectionsPerChild  4000 #子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个
请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
MaxRequestsPerChild 4000  #从 httpd.2.3.9开始被MaxConnectionsPerChild代替

trabajador --- modelo de E / S multiplexado multiproceso, multiproceso multiproceso

* Un proceso principal: genera m procesos secundarios, cada proceso secundario es responsable de generar n subprocesos, cada subproceso responde a una solicitud y responde simultáneamente a la solicitud: m n **
Explicación detallada, comparación de tres modos de procesamiento de solicitudes en Http (MPM)

Es un modelo mixto multiproceso y multiproceso . Hay un proceso de control que inicia múltiples subprocesos. Cada subproceso contiene un subproceso fijo. El proceso de subproceso se utiliza para procesar la solicitud. Cuando el subproceso no es suficiente, se iniciará uno nuevo. El hijo procesa y luego inicia el subproceso en el proceso para procesar la solicitud, ya que utiliza el subproceso para procesar la solicitud, puede soportar una mayor concurrencia.

  • Ventajas: en comparación con prefork, ocupa menos memoria y puede manejar más solicitudes al mismo tiempo
  • Desventajas: al usar el método de conexión prolongada de mantener vivo, un hilo siempre estará ocupado, incluso si no hay transmisión de datos, debe esperar hasta que se libere el tiempo de espera. Si se ocupan demasiados subprocesos de esta manera, también hará que no haya subprocesos de servicio disponibles en escenarios de alta concurrencia. (Este problema también ocurre en el modo prefork)

Configuración relacionada con los modos trabajador y evento

ServerLimit     16  #最多worker进程数 Upper limit on configurable number of
processes
StartServers     10  #Number of child server processes created at startup
MaxRequestWorkers  150  #Maximum number of connections that will be processed
simultaneously
MinSpareThreads   25    #每个work  最多空闲25个  最大空闲75个
MaxSpareThreads   75
ThreadsPerChild   25  #Number of threads created by each child process每个线程  i控制的个数

event --- modelo impulsado por eventos, agregando un hilo de escucha

Explicación detallada, comparación de tres modos de procesamiento de solicitudes en Http (MPM)

Un proceso principal : genera m procesos secundarios, cada proceso secundario es responsable de generar n subprocesos, cada subproceso responde a una solicitud y responde al mismo tiempo

Solicitud: m * n, hay un subproceso de monitoreo especial para administrar estos subprocesos de tipo Keep-Alive . Cuando hay una solicitud real, la solicitud se pasa al subproceso de servicio, y una vez completada la ejecución, se permite la liberación. Esto mejora la capacidad de procesamiento de solicitudes en escenarios de alta concurrencia.

event MPM: El último modo de Apache pertenece al modelo event-drive (epoll). Cada proceso responde a múltiples solicitudes. En la versión actual, ya es un modo estable y utilizable. Es muy similar al modo trabajador. La mayor diferencia es que resuelve el problema del desperdicio de recursos de los subprocesos que han estado ocupados durante mucho tiempo en el escenario de mantener vivo. (Algunos subprocesos se mantienen en espera porque se mantienen vacíos. Casi no hay solicitudes en el medio. Ven e incluso espera hasta el tiempo de espera). En el caso de MPM, habrá un subproceso dedicado para administrar estos subprocesos de mantenimiento de vida.Cuando llega una solicitud real, la solicitud se pasa al subproceso de servicio y, una vez que se completa la ejecución, se permite su liberación. Esto mejora la capacidad de procesamiento de solicitudes en escenarios de alta concurrencia.

El evento solo comienza a establecer una conexión cuando hay datos para enviar, la solicitud de conexión disparará el hilo de trabajo, es decir, se utiliza una opción de TCP, llamada aceptación retrasada de la conexión TCP_DEFER_ACCEPT, luego de agregar esta opción, si el cliente solo realiza una conexión TCP, no lo hará. El envío de una solicitud no activará la operación Aceptar y no activará el hilo de trabajo para que funcione, y un simple anti - *** (conexión TCP)

Ventajas: un solo subproceso responde a varias solicitudes, ocupa menos memoria y funciona mejor en condiciones de alta concurrencia. Habrá un subproceso dedicado para administrar el tipo de subproceso de mantener vivo. Cuando llega una solicitud real, la solicitud se pasa al subproceso de servicio Una vez completada la ejecución, se permite liberar las
desventajas: no hay control de seguridad de subprocesos

para resumir:

Los sitios que requieren una mayor escalabilidad pueden optar por utilizar MPM con subprocesos, es decir, los trabajadores o eventos (empresas de Internet) que
requieren fiabilidad o los sitios compatibles con software antiguo pueden utilizar prefork (empresas tradicionales).

Configuración relacionada con los modos trabajador y evento

ServerLimit     16  #最多worker进程数 Upper limit on configurable number of
processes
StartServers     10  #Number of child server processes created at startup
MaxRequestWorkers  150  #Maximum number of connections that will be processed
simultaneously
MinSpareThreads   25    #每个work  最多空闲25个  最大空闲75个
MaxSpareThreads   75    #每个线程  i控制的个数
ThreadsPerChild   25  #Number of threads created by each child process

Cambiar el MPM utilizado

#启用要启用的MPM相关的LoadModule指令即可,其它未启用的两项需要在行首加#注释
#三种选择一种就可以的
vim /etc/httpd/conf.modules.d/00-mpm.conf
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so

Nota: No habilite varios módulos MPM al mismo tiempo, de lo contrario se producirá el siguiente error

AH00534: httpd: Configuration error: More than one MPM loaded.

Ejemplo: ver el modo de trabajo MPM predeterminado de CentOS 8 y CentOS 7

#查看CentOS 8 默认的MPM工作模式
[root@centos8 ~]#httpd -M |grep mpm
AH00558: httpd: Could not reliably determine the server's fully qualified domain
name, using centos8.localdomain. Set the 'ServerName' directive globally to
suppress this message
mpm_event_module (shared)
#查看CentOS 7 默认的MPM工作模式
[root@centos7 ~]#httpd -M |grep mpm
AH00558: httpd: Could not reliably determine the server's fully qualified domain
name, using centos7.localdomain. Set the 'ServerName' directive globally to
suppress this message
mpm_prefork_module (shared)

Ejemplo: modificar CentOS 8 para usar el modelo prefork

[root@centos8 ~]#vim /etc/httpd/conf.modules.d/00-mpm.conf
[root@centos8 ~]#grep Load /etc/httpd/conf.modules.d/00-mpm.conf
# one of the following LoadModule lines. See the httpd.conf(5) man
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
[root@centos8 ~]#httpd -M | grep mpm
AH00558: httpd: Could not reliably determine the server's fully qualified domain
name, using centos8.localdomain. Set the 'ServerName' directive globally to
suppress this message
mpm_prefork_module (shared)

Parte del contenido proviene de https://www.cnblogs.com/luck-pig/p/12007045.html

Supongo que te gusta

Origin blog.51cto.com/13887323/2545550
Recomendado
Clasificación