Mostrando entradas con la etiqueta Proceso. Mostrar todas las entradas
Mostrando entradas con la etiqueta Proceso. Mostrar todas las entradas

martes, 12 de diciembre de 2017

Error común: "Too many open files", en Tomcat o PHP


Si Tomcat os devuelve un error HTTP 500 y en el 'catalina.out' encontráis algo de este tipo

[] org.apache.tomcat.util.net.JIoEndpoint$Acceptor run SEVERE: Socket accept failed
java.net.SocketException: Too many open files

es que tenéis un problema de ficheros abiertos; con

> ulimit -a

puedes ver tu configuración actual; repasa la variable "open files" que te da cuántos ficheros abiertos puede haber por proceso. Puedes modificarla con

> ulimit -n #

donde # es el nuevo valor; prueba con 4096 y reinicia el tomcat para que coja el cambio de esta variable de sistema

Para controlar cuántos ficheros tiene un proceso abierto, lo puedes hacer con  

> lsof -l | grep tomcat

Este tipo de fallo es aplicable a cualquier otra aplicación, no sólo a tomcat; también PHP requiere abrir muchos ficheros y puede  arrojar un error similar. Tenlo en cuenta cuando una aplicación se pare de repente después de rato funcionando bien.



Gracias!


martes, 20 de mayo de 2008

Matar procesos en Windows XP/2003

Imaginad que tenéis un script que te para y te vuelve a arrancar un servicio, pero por lo que sea, el proceso no se para de manera automática, sino que tarda unos segundos (o se quedan procesos pululando por el sistema). En este caso, rearrancar el servicio no te sirve de mucho porque o no se arranca bien, o te abre más instancias de las necesarias y siempre es un problema.

El caso es que lo ideal entre la parada y la arrancada del servicio sería matar los procesos que queden vivos de alguna manera. Yo he encontrado un comando (que por lo visto funciona en XP y en 2003 Server) que realiza esta tarea de una manera muy efectiva:

Desde la línea de comandos, la idea es matar el proceso. Sabiendo el nombre exacto (notepad.exe, winword.exe, firefox.exe, iexplore.exe), podemos matarlo y quedarnos más anchos que largos...
Inicio --> Ejecutar --> cmd (Aceptar)

Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:\Documents and Settings\Administrator> taskkill /IM nombre_del_proceso.exe

Y punto pelota.

De todas maneras, en algún caso me he encontrado con que no puede acabar con el proceso porque hay que forzarlo (usando la opción /F). En este caso, la forma correcta es:

taskkill /F /IM nombre_del_proceso.exe

O si lo queremos hacer con el Process ID (PID), lo hacemos así:

taskkill /PID pid_del_proceso_a_matar

Si queréis saber más utilidades de este comando, podéis usar la ayuda. La verdad es que es bastante versátil.