// Índice de contenidos
Un VPS mal configurado puede desperdiciar hasta el 70% de sus recursos. La diferencia entre un servidor lento y uno optimizado no está en el hardware, sino en la configuración.
Esta guía cubre todas las optimizaciones que puedes aplicar a un VPS con DirectAdmin: desde PHP y OPcache hasta MariaDB, Redis y configuración de servidor web.
Stack de rendimiento recomendado
Para máximo rendimiento en WordPress y aplicaciones PHP:
| Componente | Recomendación | Por qué |
|---|---|---|
| Servidor web | LiteSpeed u OpenLiteSpeed | 3-5x más rápido que Apache |
| PHP | 8.1+ con PHP-FPM | Mejor rendimiento y seguridad |
| Caché PHP | OPcache activado | Reduce tiempo de compilación PHP |
| Base de datos | MariaDB 10.6+ | Más rápido que MySQL |
| Object cache | Redis | Reduce consultas a BD |
| Caché página | LiteSpeed Cache | Caché a nivel de servidor |
Optimizar PHP-FPM
PHP-FPM (FastCGI Process Manager) es fundamental para el rendimiento. DirectAdmin lo incluye por defecto.
Configurar PHP-FPM por dominio
Cada dominio puede tener su propia configuración PHP-FPM:
- En DirectAdmin, ve a Domain Setup → tu dominio
- Selecciona PHP Version Settings
- Configura los valores de PHP-FPM
Valores recomendados según RAM
| RAM VPS | pm.max_children | pm.start_servers | pm.min_spare | pm.max_spare |
|---|---|---|---|---|
| 2 GB | 10 | 2 | 1 | 3 |
| 4 GB | 20 | 4 | 2 | 6 |
| 8 GB | 40 | 8 | 4 | 12 |
| 16 GB | 80 | 16 | 8 | 24 |
Configuración recomendada para WordPress
Edita el archivo de configuración PHP-FPM del dominio:
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500
pm.process_idle_timeout = 10s
pm.max_requests = 500 reinicia los procesos cada 500 peticiones para evitar memory leaks.
Calcular max_children óptimo
Fórmula: (RAM disponible - RAM sistema) / RAM por proceso PHP
Ejemplo para VPS 4GB:
- RAM disponible: 4000 MB
- RAM sistema/servicios: 1000 MB
- RAM por proceso PHP: ~50-100 MB
- max_children = (4000 - 1000) / 75 = ~40
Empieza conservador (20) y ajusta según monitorización.
Configurar OPcache
OPcache acelera PHP almacenando el código compilado en memoria. En lugar de recompilar cada script en cada petición, lo sirve desde caché.
Habilitar OPcache en DirectAdmin
Por SSH como root:
cd /usr/local/directadmin/custombuild
./build set opcache yes
./build opcache
Configuración recomendada de OPcache
Edita /usr/local/php8x/lib/php.conf.d/opcache.ini:
[opcache]
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=0
opcache.validate_timestamps=1
opcache.fast_shutdown=1
opcache.save_comments=1
Explicación de parámetros
| Parámetro | Valor | Explicación |
|---|---|---|
| memory_consumption | 256 | MB de RAM para caché (ajustar según uso) |
| interned_strings_buffer | 16 | MB para strings internos |
| max_accelerated_files | 10000 | Número máximo de scripts en caché |
| revalidate_freq | 0 | Verificar cambios en cada petición (prod: 60) |
| validate_timestamps | 1 | Detectar cambios en archivos |
| fast_shutdown | 1 | Liberación rápida de memoria |
Monitorizar OPcache
Instala opcache-gui para ver estadísticas:
cd /var/www/html
wget https://raw.githubusercontent.com/amnuts/opcache-gui/master/index.php -O opcache.php
Accede a https://tu-servidor:2222/opcache.php para ver:
- Memoria usada vs disponible
- Hit rate (debe ser >95%)
- Scripts en caché
Elimina el archivo después de revisar por seguridad.
Optimizar MariaDB
MariaDB es el motor de base de datos por defecto en DirectAdmin. Una configuración adecuada puede mejorar el rendimiento 2-5x.
Archivo de configuración
Edita /etc/my.cnf o crea /etc/my.cnf.d/custom.cnf:
[mysqld]
# Conexiones
max_connections = 150
max_user_connections = 50
wait_timeout = 30
interactive_timeout = 30
# Buffers
key_buffer_size = 256M
sort_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
join_buffer_size = 2M
# InnoDB (el más importante)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
# Tablas temporales
tmp_table_size = 128M
max_heap_table_size = 128M
# Cache de consultas (desactivar en MariaDB 10.4+)
query_cache_type = 0
query_cache_size = 0
# Logs
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
# Otros
skip-name-resolve
Calcular innodb_buffer_pool_size
Es el parámetro más importante. Regla general:
| RAM VPS | innodb_buffer_pool_size |
|---|---|
| 2 GB | 512M |
| 4 GB | 1G |
| 8 GB | 3G |
| 16 GB | 8G |
Debe ser ~50-70% de la RAM disponible para el servidor de BD.
Usar MySQLTuner
MySQLTuner analiza tu configuración y sugiere mejoras:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
perl mysqltuner.pl
Ejecuta después de 24-48h de uso normal para recomendaciones precisas.
Reiniciar MariaDB
Después de cambios:
systemctl restart mariadb
Instalar y configurar Redis
Redis es un almacén en memoria que reduce drásticamente las consultas a la base de datos.
Instalar Redis en DirectAdmin
cd /usr/local/directadmin/custombuild
./build set redis yes
./build redis
./build set php1_release 8.2
./build php_redis
Configuración de Redis
Edita /etc/redis/redis.conf:
maxmemory 256mb
maxmemory-policy allkeys-lru
save ""
appendonly no
maxmemory: Ajusta según RAM disponible (256MB-1GB típico).
allkeys-lru: Elimina las claves menos usadas cuando se llena.
Habilitar Redis por usuario en DirectAdmin
- Ve a User Level → Advanced Features → Redis
- Activa Redis para el usuario
- Anota el socket:
/home/usuario/.redis/redis.sock
Configurar Redis en WordPress (con LiteSpeed Cache)
- Instala el plugin LiteSpeed Cache
- Ve a LiteSpeed Cache → Cache → Object
- Configura:
| Opción | Valor |
|---|---|
| Object Cache | ON |
| Method | Redis |
| Host | /home/usuario/.redis/redis.sock |
| Port | 0 |
- Guarda y verifica “Connection Test: Passed”
VPS DirectAdmin Administrado
Potencia y eficiencia al mejor precio con DirectAdmin. Soporte 24/7 en español.
Configurar LiteSpeed/OpenLiteSpeed
LiteSpeed es significativamente más rápido que Apache. DirectAdmin soporta ambas versiones.
Instalar OpenLiteSpeed
cd /usr/local/directadmin/custombuild
./build set webserver openlitespeed
./build openlitespeed
./build rewrite_confs
Ventajas de LiteSpeed
| Característica | Apache | LiteSpeed |
|---|---|---|
| Consumo RAM | Alto | Bajo |
| Conexiones concurrentes | Limitadas | Miles |
| Event-driven | No | Sí |
| Caché integrada | No | Sí (LSCache) |
| Compatibilidad .htaccess | Sí | Sí |
Configurar LiteSpeed Cache (WordPress)
- Instala el plugin LiteSpeed Cache desde WordPress
- Configuración recomendada:
Cache → Cache:
| Opción | Valor |
|---|---|
| Enable Cache | ON |
| Cache Logged-in Users | OFF |
| Cache Commenters | OFF |
| Cache REST API | ON |
Cache → TTL:
| Opción | Valor |
|---|---|
| Default Public Cache | 604800 (1 semana) |
| Default Private Cache | 1800 |
| Default Front Page | 604800 |
Page Optimization:
| Opción | Valor |
|---|---|
| CSS Minify | ON |
| JS Minify | ON |
| HTML Minify | ON |
| Load CSS Asynchronously | ON (probar) |
| Load JS Deferred | ON |
Purgar caché LiteSpeed
Desde WordPress:
- Barra admin → LiteSpeed Cache → Purge All
Desde SSH:
rm -rf /home/usuario/lscache/*
Optimizaciones adicionales de PHP
Configuración php.ini recomendada
Edita el php.ini del usuario o versión PHP:
; Memoria y tiempo
memory_limit = 256M
max_execution_time = 300
max_input_time = 300
max_input_vars = 5000
; Uploads
upload_max_filesize = 64M
post_max_size = 64M
; Seguridad
expose_php = Off
display_errors = Off
log_errors = On
; Sesiones
session.gc_maxlifetime = 1440
session.cookie_httponly = 1
session.cookie_secure = 1
; Realpath cache
realpath_cache_size = 4096K
realpath_cache_ttl = 600
Extensiones PHP recomendadas
Verifica que estén activas:
php -m | grep -E "opcache|redis|imagick|gd|curl|mbstring|xml"
Instalar extensiones faltantes:
cd /usr/local/directadmin/custombuild
./build set_php imagick yes
./build php_imagick
Compresión y headers
Habilitar compresión GZIP
En .htaccess o configuración LiteSpeed:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css text/javascript
AddOutputFilterByType DEFLATE application/javascript application/x-javascript
AddOutputFilterByType DEFLATE application/json application/xml
AddOutputFilterByType DEFLATE application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
Cache de recursos estáticos
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType font/woff2 "access plus 1 year"
</IfModule>
Monitorización del rendimiento
Métricas clave a vigilar
| Métrica | Valor ideal | Acción si excede |
|---|---|---|
| CPU | <70% media | Revisar procesos, optimizar código |
| RAM | <80% uso | Aumentar RAM o reducir max_children |
| Disk I/O | <50% | Usar NVMe, optimizar queries |
| TTFB | <200ms | Revisar caché, BD, PHP |
| Load Average | < nº CPUs | Identificar cuellos de botella |
Comandos útiles de monitorización
Ver carga del sistema:
htop
Ver conexiones MySQL activas:
mysqladmin processlist
Ver uso de memoria por proceso:
ps aux --sort=-%mem | head -20
Analizar queries lentas:
tail -f /var/log/mysql-slow.log
Ver estadísticas PHP-FPM:
curl http://127.0.0.1/status?full
Herramientas de benchmark
Apache Bench:
ab -n 1000 -c 50 https://tudominio.com/
Siege:
siege -c 25 -t 60s https://tudominio.com/
Checklist de optimización
Revisa que hayas aplicado todas las optimizaciones:
- LiteSpeed u OpenLiteSpeed instalado
- Compresión GZIP activa
- Headers de caché configurados
- PHP 8.1+ con PHP-FPM
- OPcache activado y configurado
- max_children ajustado a RAM
- memory_limit adecuado
- MariaDB 10.6+
- innodb_buffer_pool_size optimizado
- Slow query log activo
- MySQLTuner ejecutado
- Redis instalado y funcionando
- Object cache en WordPress activo
- LiteSpeed Cache configurado
- CDN configurado (opcional)
FAQ: Preguntas frecuentes
¿Cuánta mejora de rendimiento puedo esperar?
Con todas las optimizaciones aplicadas correctamente, puedes esperar mejoras de 3-10x en tiempo de carga y capacidad de usuarios concurrentes. El TTFB típicamente baja de 800ms a menos de 200ms.
¿LiteSpeed es mejor que Apache?
Sí, significativamente. LiteSpeed maneja más conexiones concurrentes con menos recursos y tiene caché integrada a nivel de servidor. Para WordPress, la diferencia puede ser de 3-5x en rendimiento.
¿Cuánta RAM debo asignar a la base de datos?
Entre 50-70% de la RAM disponible para el servidor de base de datos. En un VPS de 4GB dedicado a web+BD, unos 1-1.5GB es razonable. En servidores dedicados solo a BD, puede ser hasta 80%.
¿Redis u Object Cache mejoran el rendimiento de WordPress?
Sí. Redis almacena en memoria los resultados de consultas frecuentes a la base de datos. En sitios con muchas consultas (WooCommerce, membership), puede reducir la carga de BD un 50-80%.
¿Cómo sé si OPcache está funcionando correctamente?
Usa opcache-gui o phpinfo(). Busca un hit rate superior al 95%. Si es menor, aumenta memory_consumption o max_accelerated_files. También verifica que opcache.enable=1 en php.ini.
¿Puedo usar estas optimizaciones con cPanel?
Sí, la mayoría aplican igual. La diferencia está en las rutas de configuración y herramientas (EasyApache vs CustomBuild). Los conceptos de PHP-FPM, OPcache, MariaDB y Redis son los mismos.
¿Cada cuánto debo revisar la configuración?
Revisa MySQLTuner mensualmente o tras cambios significativos de tráfico. Monitoriza CPU/RAM diariamente con alertas. Ajusta PHP-FPM si cambias la carga del servidor.
¿Qué hago si el servidor sigue lento tras optimizar?
Revisa: 1) Plugins WordPress problemáticos, 2) Queries SQL lentas (slow log), 3) Ataques o bots (logs Apache/LiteSpeed), 4) Límites del hardware (necesitas más RAM/CPU), 5) Red/latencia del datacenter.
Conclusión
Optimizar un VPS con DirectAdmin requiere ajustar múltiples componentes. Los mayores impactos vienen de:
- Cambiar a LiteSpeed - El cambio más impactante
- Configurar OPcache correctamente - Reduce tiempo PHP 50-80%
- Ajustar innodb_buffer_pool_size - Acelera todas las consultas
- Añadir Redis - Elimina consultas repetitivas
No apliques todos los cambios de golpe. Implementa uno, mide el impacto, y continúa con el siguiente.
Guías relacionadas del cluster VPS DirectAdmin
Profundiza en DirectAdmin:
- Guía completa DirectAdmin: primeros pasos
- DirectAdmin vs cPanel: cuál elegir
- Cómo instalar WordPress en DirectAdmin
- Caso de estudio: reseller migra a DirectAdmin
VPS DirectAdmin Administrado
Potencia y eficiencia al mejor precio con DirectAdmin. Soporte en español.