Publicado el

El comando screen para múltiples ventanas de SSH

el-comando-screen-para-multiples-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
Publicado el

Optimizar un Servidor de Alto Tráfico

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.

Publicado el

Las Cargas del Servidor (Server Loads)

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.

Publicado el

Comandos Básicos

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

mail

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