# Cálculo y configuración de valores para PHP-FPM

- Link: https://binariocero.com/linux/calculo-y-configuracion-de-valores-para-php-fpm
- Published: 2024-04-30T14:39:53+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

Para optimizar el rendimiento de PHP-FPM, es importante configurar correctamente
los valores relacionados con los recursos de la máquina. A continuación, se explica
cómo calcular y ajustar estos valores según la memoria RAM y los núcleos de CPU 
disponibles.

#### **Cálculo de `pm.max_children`**

`pm.max_children` determina el número máximo de procesos hijos que puede generar
PHP-FPM. Se calcula dividiendo la memoria RAM disponible entre el consumo promedio
de un proceso PHP.

**Fórmula:**

    ```wp-block-preformatted
    pm.max_children = RAM disponible / Consumo por proceso
    ```

**Ejemplo:** Si la máquina tiene **8.000 MB de RAM** y cada proceso PHP consume **
16 MB**:

    ```wp-block-preformatted
    8.000 MB / 16 MB = 500
    ```

En este caso, el valor de `pm.max_children` sería **500**. Sin embargo, es recomendable
reservar al menos **1,5 GB de RAM** para el sistema operativo y otros servicios.

**Configuración:**

    ```wp-block-preformatted
    pm.max_children = 500
    ```

#### **Cálculo de `pm.start_servers`**

Este valor define la cantidad de procesos PHP-FPM que se iniciarán al cargar el 
servicio. Se calcula multiplicando el número de **núcleos de la CPU** por **4**.

**Fórmula:**

    ```wp-block-preformatted
    pm.start_servers = Número de cores x 4
    ```

**Ejemplos:**

 * Si la máquina tiene **4 núcleos**:
   `4 x 4 = 16 `Configuración:`pm.start_servers
   = 16`
 * Si la máquina tiene **8 núcleos**:
   `8 x 4 = 32 `Configuración:`pm.start_servers
   = 32`

#### **Cálculo de `pm.min_spare_servers`**

Define el número mínimo de procesos inactivos que PHP-FPM mantendrá disponibles.
Se calcula multiplicando los **núcleos de CPU** por **2**.

**Fórmula:**

    ```wp-block-preformatted
    pm.min_spare_servers = Número de cores x 2
    ```

**Ejemplos:**

 * Si la máquina tiene **4 núcleos**:
   `4 x 2 = 8 `Configuración:`pm.min_spare_servers
   = 8`
 * Si la máquina tiene **8 núcleos**:
   `8 x 2 = 16 `Configuración:`pm.min_spare_servers
   = 16`

#### **Cálculo de `pm.max_spare_servers`**

Este valor indica el número máximo de procesos inactivos que PHP-FPM mantendrá disponibles.
Generalmente, es igual a `pm.start_servers`.

**Configuración:**

    ```wp-block-preformatted
    pm.max_spare_servers = pm.start_servers
    ```

**Ejemplo:** Si `pm.start_servers = 16`:

    ```wp-block-preformatted
    pm.max_spare_servers = 16
    ```

### Configuración adicional para Apache

Para ajustar el módulo `mpm_prefork` en Apache, edita el archivo de configuración
correspondiente y establece los valores según los cálculos realizados.

**Archivo a editar:**

    ```wp-block-preformatted
    vim /etc/apache2/mods-enabled/mpm_prefork.conf
    ```

**Configuración recomendada:**

    ```wp-block-preformatted
    <IfModule mpm_prefork_module>    StartServers         16    MinSpareServers      8    MaxSpareServers      16    MaxRequestWorkers    256    MaxConnectionsPerChild 500</IfModule>
    ```

### Reiniciar Apache

Una vez realizados los cambios, reinicia Apache para aplicar la nueva configuración:

    ```wp-block-preformatted
    sudo systemctl restart apache2
    ```

Con estas configuraciones, se optimiza PHP-FPM y el servidor web para manejar mejor
las cargas de trabajo según los recursos disponibles.
