Categoría: SysAdmin Linux
Instalar las Librerias FreeTDS (Video)
Configuración de Aspectos Básicos del cPanel/WHM (Video)
Configuración Inicial del WHM usando el Web Wizard (Video)
Crear Subdominios y NameServers (Video)
Crear una Máquina Virtual con CentOS y cPanel (Video)
El comando screen para múltiples ventanas de SSH
Para obtener diversas ventanas abiertas en SSH podemos ejecutar el comando screen. La primera vez que lo ejecutemos se activará dicha funcionalidad. Cada vez que lo ejecutemos posteriormente se abrirá una nueva ventana.
Los comandos disponibles para usar screen son:
Comando | Descripción |
screen -S MiSesion | Crear sesión de screen con nombre asignado |
CTRL+a c | Crear ventana |
CTRL+a 0-9 | Cambiar de ventana |
CTRL+a n | próxima ventana |
CTRL+a A | Nombre de Ventana |
CTRL+a k | Mata un programa |
CTRL+a Shift+” | Lista las ventanas |
CTRL+a Shift+s | dividir una screen en dos regiones |
CTRL+a TAB | mover a región siguiente |
CTRL+a Shift+c | crea una ventana en la region |
CTRL+a Shift+x | cerrar región actual |
CTRL+a Shift+q | cerrar todas las regiones menos la actual |
CTRL+a d | Minimizar consola |
screen -r | retornar a la consola |
Optimizar un Servidor de Alto Tráfico
Si se están alcanzando los límites de un servidor ejecutando Apache, sirviendo una gran cantidad de contenido dinámico, puede cambiarse el mismo por un hardware más poderoso o primero intentar algunas técnicas para mejorar su rendimiento. Este punto cita las técnicas que pueden permitir esto último.
Problemas Comunes:
- Swapping – Demasiados procesos en ejecución utilizando demasiada RAM
- CPU ” Consultas a Bases de Datos mal optimizadas, código de programación mal optimizado, procesos fuera de control
- Red – Límites de hardware, Ataques
Soluciones Básicas:
- Utilizar el comando top d2c y ps axu para comprobar si hay procesos que utilizan mucha CPU o RAM.
- Usar netstat -anp | sort -u para comprobar si hay problemas de red.
Mejorar el Uso de la RAM por el Apache
Los procesos del Apache pueden utilizar grandes cantidades de memoria RAM si no están bien optimizados.
- Si el Apache sirve 100% archivos estáticos, cada proceso httpd utilizará alrededor de 2-3 megas de RAM.
- Si el Apache sirve 99% archivos estáticos y 1% archivos dinámicos, cada proceso httpd utilizará desde 3-20 megas de RAM (dependiendo de la complejidad de las páginas dinámicas).
Esto ocurre porque un proceso crece para dar cabida a todo lo que debe servir y nunca disminuye nuevamente a menos que ese proceso muera. En forma sencilla, a menos que se tengan muy pocas páginas dinámicas y una fluctuación de tráfico importante, la mayoría de los procesos httpd ocuparán una cantidad de RAM igual al script dinámico más grande en el sistema. Un servidor web inteligente debería tratar esto automáticamente, sin embargo, se tiene varias opciones para mejorar el uso de la RAM de forma manual.
Reducir los procesos desperdicio mediante la adecuación de KeepAlive:
Se trata de un equilibrio. KeepAliveTimeout es la cantidad de tiempo que se permite un proceso cuando no hace nada, pero sigue ocupando espacio. Esos segundos se suman en gran medida. Pero usando KeepAlive puede aumentarse la velocidad tanto para usted como para el cliente (si se desactiva KeepAlive el servicio de archivos estáticos como las imágenes puede ser mucho más lento). Lo mejor es tener KeepAlive en On y KeepAliveTimeout con un valor bajo (como 1 ó 2 segundos).
Límitar los procesos totales con MaxClients:
Si se usa Apache para servir contenido dinámico, las conexiones simultáneas se hacen muy limitadas. Si se supera un determinado número, el sistema comienza a realizar intercambios caníbales, haciéndose más lento y más lento hasta que muere. Use el ensayo y error para averiguar cuántos procesos de Apache pueden manejar el servidor y establecer dicho valor en MaxClients.
Nota:
la documentación del Apache sobre esto es engañosa – si se alcanza este límite, los clientes no serán “bloqueados”, simplemente se colocarán en la cola y su acceso se vuelve más lento. Basándose en el valor de MaxClients, se pueden estimar los valores que se necesitan para StartServers, MinSpareServers y MaxSpareServers.
Forzar el reinicio de procesos con MaxRequestsPerChild:
Obligar que los procesos mueran después de un tiempo hace que luego empiecen con un bajo uso de RAM, y esto en muchas situaciones puede reducir el uso de la memoria total. A menor contenido dinámico que se tenga, más útil será este método. Esto crea un juego de aumento-disminución, con los archivos dinámicos constantemente aumentando el uso total de la RAM y el reinicio de procesos constantemente reducirlo. Experimente con la directiva MaxRequestsPerChild – incluso valores tan bajos como 20 pueden funcionar bien. Pero no la coloque demasiado baja, porque la creación de nuevos procesos causa sobrecarga. Es posible averiguar la mejor configuración de carga mediante la ejecución del comando ps axu –sort:rss .
Nota:
El uso de este método es delicado. Si la única manera de mantener el servidor en ejecución es mediante el uso de este parámetro, finalmente se caerá en problemas. Dicho esto, modificando MaxRequestsPerChild es posible aumentar MaxClients tanto como en un 50%.
Mayor Afinación del Apache:
Para sitios de propósito mixto (como galerías de imágenes, sitios de descarga, etc.), a menudo puede mejorarse el rendimiento mediante la ejecución de dos demonios de apache diferentes en el mismo servidor. Esto es una opción avanzada solo para servidores dedicados a sitios de muy alta carga
Uso de CPU y RAM de PHP:
Compilar scripts PHP es generalmente más caro que ejectuarlos. ¿Por qué no usar una herramienta sencilla que los mantenga precompilados?. Se recomienda el uso de Turck MMCache. Algunas alternativas son PHP Accelerator, APC y Zend Accelerator. Esto causará un aumento en la velocidad entre 2x a 10x.
Optimizar las consultas de la base de datos:
Esto se trata en detalle en diversas partes, algunas notas importantes son: una instrucción de consulta incorrecta, ejecutándose a menudo, puede hacer que un sitio se cuelgue. Si se optimiza solo una consulta no se puede ver gran mejora de velocidad de todo el servidor. Si se buscan y optimizan todas las consultas ineficientes puede llegarse a una mejora de velocidad del servidor equivalente a 5x. La característica log-slow-queries de MySQL puede ser muy útil.
Cómo reportar logs de consultas lentas:
Ejecutar:
# nano /etc/rc.d/init.d/mysqld
Buscar esta línea:
SAFE_MYSQLD_OPTIONS="--defaults-file=/etc/my.cnf"
Cambiar a:
SAFE_MYSQLD_OPTIONS="--defaults-file=/etc/my.cnf--log-slow-queries=/var/log/slow-queries.log"
Como se puede ver, se añade la opción de registrar todas las consultas lentas a /var/log/slow-queries.log
Cierre y guarde el archivo.
Ahora ejecutar:
touch /var/log/slow-queries.log
chmod 644 /var/log/slow-queries.log
Ahora debe re-arrancarse mysql:
service myslqd restart
mysqld registrará todas las consultas lentas a este archivo.
Las Cargas del Servidor (Server Loads)
El promedio de carga de un servidor trata de medir el número de procesos activos en cualquier momento. Como una medida del uso del CPU, el promedio de carga es muy simple y no tiene una definición precisa, sin embargo es muy útil. Promedios altos en las cargas significa que el sistema esta siendo usado con intensidad y que su tiempo de respuesta correspondiente será lento. ¿Qué se considera alto?, Idealmente, la carga no debería ser mayor a 3, sin embargo, podría serlo por momentos cortos.
Cuando se muestra la carga del servidor se reflejan 3 valores que se refieren a la carga reportada hace 1, 5 y 15 minutos.
¿Como verificar la carga del servidor?
Existen diversas maneras de verificar la carga del servidor. La primera de ellas es ingresar al WHM y ver las cargas en la esquina superior derecha.
A su vez, a través del SSH se pueden ver las cargas con:
Método 1 – usando el comando uptime:
El comando uptime muestra lo siguiente:
uptime
9:40am up 9 days, 10:36, 4 users, load average: 0.02, 0.01, 0.00
Este comando muestra el tiempo transcurrido desde que se reinició la última vez el sistema, el número de procesos de usuario activos y el promedio de las cargas.
Método 2 – usando el comando procinfo:
El comando procinfo muestra lo siguiente:
procinfo
Linux 2.0.36 (root@tsv) (gcc 2.7.2.3)
#1 Wed Jul 25 21:40:16 EST 2010 [tsv]
Memory: Total Used Free Shared Buffers Cached Mem:
95564 90252 5312 31412 33104 26412
Swap: 68508 0 68508
Bootup: Sun Jul 21 15:21:15 2010
Load average: 0.15 0.03 0.01 2/58 8557
El promedio de carga se muestra en la esquina inferior derecha.
Método 3 – usando el comando w:
El comando w muestra lo siguiente:
w
9:40am up 9 days, 10:35, 4 users, load average: 0.02, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
mir ttyp0 :0.0 Fri10pm 3days 0.09s 0.09s bash
neil ttyp2 12-35-86-1.ea.co 9:40am 0.00s 0.29s 0.15s w
Note que la primera línea es exactamente igual a la mostrada por uptime.
Método 4 – usando el comando top – preferido:
El comado top hace un ranking de los procesos de acuerdo a la cantidad de tiempo del CPU que consumen, mostrando lo siguiente:
top
4:09am up 12:48, 1 user, load average: 0.02, 0.27, 0.17
58 processes: 57 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 0.5% user, 0.9% system, 0.0% nice, 98.5% idle
Mem: 95564K av, 78704K used, 16860K free, 32836K shrd, 40132K buff
Swap: 68508K av, 0K used, 68508K free 14508K cached
PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
5909 neil 13 0 720 720 552 R 0 1.5 0.7 0:01 top
1 root 0 0 396 396 328 S 0 0.0 0.4 0:02 init
2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd
3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd
...
El comando top muestra también el tiempo de funcionamiento del servidor (uptime), la información de la memoria y el listado de los procesos que pueden ordenarse por uso del CPU, entre otros.
¿Qué se considera una carga alta, normal o media?
La respuesta a este punto es subjetiva, sin embargo, para dar una idea de lo que debería ser, una carga excelente es aquella igual o menor a 1.0. Una carga normal oscila entre 2.0 y 4.0 y una carga un poco mayor puede considerarse un poco alta. Si se nota que la respuesta del servidor se esta volviendo lenta, verifique primero la carga.
Existen situaciones particulares en las cuales un dominio de un servidor presenta cargas muy altas (ej. Día de la final del beisbol nacional en el portal del equipo campeón). Esas situaciones temporales se auto regularán cuando pase el evento que causa la carga muy alta. Gracias al sistema SIM los servidores están configurados para reiniciar sus procesos automáticamente cuando no se reportan por cargas muy altas.
Cuando las cargas promedio de un servidor están por encima de 2.0 es conveniente considerar colocar un servidor más poderoso ya que es de alto uso. Vale decir que estas cargas promedio no deberían tomarse cuando el sistema esta realizando el procesamiento de los logs, respaldos o estadísticas.
Comandos Básicos
La siguiente lista de comandos pretende ser de utilidad como referencia rápida para utilizar comandos de sistema. Se ha agrupado en dos: los comandos de sistema corrientes y los relacionados con la administración.
Comandos Básicos:
Comando |
Descripción |
Ejemplos |
ls |
listar contenido de directorios |
ls, ls -l, ls -fl, ls –color |
cp |
copiar ficheros/directorios |
cp -rfp directorio /tmp, cp archivo archivo_nuevo |
rm |
borrar ficheros/directorios |
rm -f fichero, rm -rf directorio, rm -i fichero |
mkdir |
crear directorios |
mkdir directorio |
rmdir |
borrar directorios, deben estar vacios |
rmdir directorio |
mv |
renombrar o mover ficheros/directorios |
mv directorio directorio, mv fichero nuevo_nombre, mv fichero a_directorio |
date |
gestion de fecha de sistema, se puede ver y establecer |
date, date 10091923 |
history |
muestra el historial de comandos introducidos por el usuario |
history | more |
more |
muestra el contenido de un fichero con pausas cada 25 lineas |
more fichero |
grep |
filtra los contenidos de un fichero |
cat fichero | grep cadena |
cat |
muestra todo el contenido de un fichero sin pausa alguna |
cat fichero |
chmod |
cambia los permisos de lectura/escritura/ejecucion de ficheros/directorios |
chmod +r fichero, chmod +w directorio, chmod +rw directorio -R, chmod -r fichero |
chown |
cambia los permisos de usuario:grupo de ficheros/directorios |
chown root:root fichero, chown pello:usuarios directorio -R |
tar |
archivador de ficheros |
tar cvf fichero.tar directorio , tar xvf fichero.tar, tar zcvf fichero.tgz directorio, tar zxvf fichero.tgz |
gunzip |
descompresor compatible con ZIP |
gunzip fichero |
rpm |
gestor de paquetes de redhat. Para instalar o actualizar software de sistema. |
rpm -i paquete.rpm, rpm -qa programa, rpm –force paquete.rpm, rpm -q –info programa |
mount |
montar unidades de disco duro, diskette, cdrom |
mount /dev/hda2 /mnt/lnx, mount /dev/hdb1 /mnt -t vfat |
umount |
desmontar unidades |
umount /dev/hda2, umount /mnt/lnx |
wget |
programa para descargar ficheros por http o ftp |
wget https://www.tecnoestudios.com/documento.pdf |
lynx |
navegador web con opciones de ftp, https |
lynx www.tecnoestudios.net, lynx –source https://www.tecnoestudios.com/script.sh | sh |
ftp |
cliente FTP |
ftp ftp.tecnoestudios.net |
whois |
whois de dominios |
whois tecnoestudios.net |
who |
muestra los usuarios de sistema que han iniciado una sesion |
who, w, who am i |
|
envio y lectura de correo electronico |
mail pepe@tecnoestudios.net < fichero, mail -v pepe@tecnoestudios.net < fichero |
sort |
ordena el contenido de un fichero |
cat /etc/numeros | sort, ls | sort |
ln |
para crear enlaces, accesos directos |
ln -s /directorio enlace |
tail |
muestra el final (10 lineas) de un fichero |
tail -f /var/log/maillog, tail -100 /var/log/maillog | more |
head |
muestra la cabecera (10 lineas) de un fichero |
head fichero, head -100 /var/log/maillog | more |
file |
nos dice de que tipo es un fichero |
file fichero, file * |
Comandos de Administración
Comando |
Descripción |
Ejemplos |
sysctl |
Configurar los parámetros del kernel en tiempo de ejecución |
sysctl -a |
ulimit |
muestra los limites del sistema (maximo de ficheros abiertos, etc..) |
ulimit |
adduser |
añadir usuario de sistema |
adduser pepe, adduser -s /bin/false pepe |
userdel |
eliminar usuario de sistema |
userdel pepe |
usermod |
modificar usuario de sistema |
usermod -s /bin/bash pepe |
df |
espacio en disco disponible, muy útil |
df, df -h |
uname |
Información sobre el tipo de unix (linux) en el que estamos, kernel, etc. |
uname, uname -a |
netstat |
la información sobre las conexiones de red activas |
netstat, netstat -ln, netstat -l, netstat -a |
ps |
toda la información sobre procesos en ejecución |
ps, ps -axf, ps -A, ps -auxf |
free |
muestra el estado de la memoria RAM y el SWAP |
free |
ping |
herramienta de red para comprobar entre otras cosas si llegamos a un host remoto |
ping www.tecnoestudios.net |
traceroute |
herramienta de red que nos muestra el camino que se necesita para llegar a otra maquina |
traceroute www.tecnoestudios.net |
du |
uso de disco. Muestra el espacio que está ocupado en disco |
du *, du -sH /*, du -sH /etc |
ifconfig |
configuración de interfaces de red, modems, etc. |
ifconfig, ifconfig eth0 ip netmask 255.255.255.0 |
route |
gestiona las rutas a otras redes. |
route, route -n |
iptraf |
muestra en una aplicacion de consola TODO el trafico de red IP, UDP, ICMP. Permite utilizar filtros, y es SUMAMENTE UTIL para diagnostico y depuración de firewalls |
iptraf |
tcpdump |
vuelca el contenido del trafico de red |
tcpdump, tcpdump -u |
lsof |
muestra los ficheros (librerías, conexiones) que utiliza cada proceso |
lsof, lsof -i, lsof | grep fichero |
lsmod |
Muestra los módulos de kernel que están cargados |
lsmod |
modprobe |
Trata de instalar un modulo, si lo encuentra lo instala pero de forma temporal |
modprobe ip_tables, modprobe eepro100 |
rmmod |
Elimina modulos del kernel que estan cargados |
rmmod <nombre de modulo> |
sniffit |
Sniffer o husmeador de todo el trafico de red. No suele venir instalado por defecto. |
sniffit -i |
Combinaciones Útiles
Los comandos son muy útiles, pero con el conocimiento básico del shell y sus comandos tenemos armas muy poderosas que muestran todo el potencial del interprete de comandos Unix. A continuación se muestran algunos ejemplos avanzados de comandos que se usan con cierta frecuencia.
Combinación |
Descripción |
comando | grep filtro |
A la salida de cualquier comando le podemos aplicar grep para que solo nos muestre la información que nos interesa. |
mail pepe@tecnoestudios.net < fichero.conf |
Con esto nos enviamos rápidamente un fichero de sistema a nuestra cuenta. |
mail -v testing@tecnoestudios.net |
Con el parametro -v, al terminar de escribir (. enter), veremos la traza del correo hasta el servidor, si es aceptado o no. |
find / -name ‘filtro’ -print |
Find es un buscador de ficheros muy potente y con muchos parámetros, todos los que nos podamos imaginar (tamaños, fechas, tipos de archivos, etc..) |
Usos de more
/cadena: podemos hacer busqueda de cadena
f: adelante
b: volver arriba
v: iniciar vi en la línea que estamos