Problemas de red
Otro aspecto que a menudo afecta al rendimiento es la red. Cuanto mejor conozca el comportamiento de su programa, más fácil resultará determinar si la red podría ser el origen del cuello de botella del rendimiento.
Si cree que el rendimiento de su programa probablemente está relacionado con la E/S de red, netstat es una herramienta útil. El mandato netstat proporciona información sobre las rutas de la red, los sockets activos de cada protocolo de red y estadísticas, como por ejemplo el número de paquetes que se reciben y se envían.
Utilice netstat para ver cuántos sockets están en estado CLOSE_WAIT o ESTABLISHED. Se pueden regular los parámetros TCP/IP para mejorar el rendimiento del sistema. Por ejemplo, el ajuste de /proc/sys/net/ipv4/tcp_keepalive_time reduce el tiempo de espera de socket en el estado TIMED_WAIT antes de cerrar un socket.
Si está ajustando el sistema de archivos /proc/sys/net, los cambios afectan a todas las aplicaciones que se ejecutan en el sistema. Para cambiar un socket o conexión individual, utilice las llamadas de API de socket de Java™ en el objeto de socket adecuado. Utilice el mandato netstat -p
o lsof, para encontrar el PID del proceso que es propietario de un socket concreto. Utilice el mandato kill -QUIT <pid>
para generar un archivo javacore que contenga los datos sobre el objeto del socket en el rastreo de la pila.
Disponer de estadísticas de resumen que estén relacionadas con la red resulta de utilidad para investigar los programas que posiblemente tienen un rendimiento bajo debido a problemas de TCP/IP. Cuanto mejor entienda la capacidad del hardware más fácil resultará ajustar de forma fiable los parámetros de determinados componentes del sistema que mejorarán el rendimiento de su aplicación. También puede determinar si el hecho de ajustar el sistema mejora claramente el rendimiento o bien necesita actualizaciones del sistema.