Detectar o prevenir Commons Net FtpClient de bloqueo en lectura
-
20-09-2019 - |
Pregunta
Estoy utilizando la clase FTPClient
neto Comunes para sondear periódicamente un sitio ftp e intentar descargar un archivo. De vez en cuando el hilo está bloqueando indefinidamente cuando intenta leer desde el sitio y me preguntaba si alguien más había encontrado con este problema y podría ofrecer alguna solución?
Estoy utilizando el método de FTPClient
retrieveFileStream(String)
para obtener un identificador para un InputStream, que luego intento de leer. A continuación se muestra una traza de la pila parcial de la rosca bloqueado.
"FTP File Poll Thread" prio=10 tid=0x083b0800 nid=0x6324 runnable [0x65b5b000..0x65b5beb0]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
- locked <0x5c851928> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at java.io.PushbackInputStream.read(PushbackInputStream.java:122)
at org.apache.commons.net.io.FromNetASCIIInputStream.__read(FromNetASCIIInputStream.java:75)
at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:170)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
Solución 2
El kludge Terminé usando aquí era para programar una tarea de generar una alerta si la operación FTP llevó más tiempo de X segundos. Que de hecho me encuentro javanioftp en Sourceforge, pero en mi situación que no garantiza la sobrecarga desarrollo de conmutación clientes.
Otros consejos
java.io es el bloqueo, es necesario utilizar el paquete java.nio. Nunca se utiliza FTP con java.nio, pero asuma que debe trabajar porque HTTP puede trabajar con java.nio.
Regards