Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

viernes, 9 de octubre de 2015

Un proceso de Apache me consume el 100% de CPU. ¿Quien? ¿Por qué?

El servidor HTTP Apache es un servidor web HTTP de código abierto, para plataformas Unix (BSDGNU/Linux, etc.), Microsoft WindowsMacintosh y otras, que implementa el protocolo HTTP/1.12 y la noción de sitio virtual. Cuando comenzó su desarrollo en 1995 se basó inicialmente en código del popular NCSA HTTPd 1.3, pero más tarde fue reescrito por completo. Su nombre se debe a que alguien quería que tuviese la connotación de algo que es firme y enérgico pero no agresivo, y la tribu Apache fue la última en rendirse al que pronto se convertiría en gobierno de EEUU, y en esos momentos la preocupación de su grupo era que llegasen las empresas y "civilizasen" el paisaje que habían creado los primeros ingenieros de internet. Además Apache consistía solamente en un conjunto de parches a aplicar al servidor de NCSA. En inglés, a patchy server (un servidor "parcheado") suena igual que Apache Server.

(Fuente Wikipedia)

En ocasiones vemos que tenemos las CPUs de nuestro servidor al 100%. Algo parecido a esto:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
www-data 21882 99.3  3.2 560668 130204 ?       R    12:44   9:35  \_ /usr/sbin/apache2 -k start

En estos casos, parece fundamental averiguar quién se está conectando al servidor y como está haciendo para provocar un uso de la CPU del 100% . Para ello podemos hacerlo facilmente mediante el PID del proceso (en el ejemplo el 21882). Una vez tenemos el PID, usando la herramienta netstat con el parámetro -p podemos localizar el origen del problema.

Netstat (network statistics) es una herramienta de línea de comandos que muestra un listado de las conexiones activas de una computadora, tanto entrantes como salientes. Existen versiones de este comando en varios sistemas como Unix,GNU/LinuxMac OS XWindows y BeOS.
La información que resulta del uso del comando incluye el protocolo en uso, las tablas de ruteo, las estadísticas de las interfaces y el estado de la conexión. Existen, además de la versión para línea de comandos, herramientas con interfaz gráfica (GUI) en casi todos los sistemas operativos desarrollados por terceros.
(Fuente Wikipedia)

Así pues, siguiendo con el ejemplo:

netstat -p | grep 21882

Con esto obtendremos todas las conexiones, listadas junto a su PID/program y mediante la tuberia se lo pasamos al comando grep para que filtre y nos muestre solo lo que coincida con 21882 (el PID de nuestro ejemplo). Veremos algo similar a esto:

tcp        0      0 localhost:55933         localhost:ldap          ESTABLECIDO 21882/apache2


Interpretando la lectura (en el ejemplo) sería que el proceso 21882 pertenece a una conexión del apache2 al servidor ldap que esta instalado en local. Bueno.. es una buena pista ¿no?


That u don't know what you've got 'til it's gone