Le processus reste bloqué en lecture de temps en temps
Il apparaît que le processus reste bloqué en lecture du flux réseau alors que celui-ci a été fermé par le proxy (pas de connexion ouverte entre le serveur et le proxy), mais pas sur le serveur, qui montre une connexion ouverte vers le proxy (??) un kill -3 <pid>
montre les threads actifs dont le thread principal :
"main" #1 prio=5 os_prio=0 tid=0xb6807c00 nid=0x45e2 runnable [0xb69a5000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:464)
at sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:68)
at sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1346)
at sun.security.ssl.SSLSocketImpl.access$300(SSLSocketImpl.java:73)
at sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:962)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
- locked <0x9fe87fc0> (a java.io.BufferedInputStream)
at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:552)
at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609)
at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696)
- locked <0x9fe88010> (a sun.net.www.http.ChunkedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3456)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at java.io.PushbackInputStream.read(PushbackInputStream.java:186)
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:238)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:194)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at java.nio.file.Files.copy(Files.java:2908)
at java.nio.file.Files.copy(Files.java:3027)
at fr.chpoitiers.mssante.extractionps.PSFetcherFromHttps.fetch(PSFetcherFromHttps.java:207)
at fr.chpoitiers.mssante.extractionps.app.ConsoleApp.main(ConsoleApp.java:176)
Après avoir repéré le port source, on peut (puisque le noyau est assez récent) tuer la connexion :
# ss -K src <ip> sport = 58774
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp ESTAB 0 0 [::ffff:<ip>]:58774 [::ffff:<ip-proxy>]:http-alt
ce qui permet de terminer le processus sur erreur. Ce n'est pas un bug de l'application mais un dysfonctionnement de connexion qu'il faut gérer avec des timeouts qui sont par défaut à 0.
Edited by Philippe MARASSE