socketRead0: висит и жрет 100% cpu (commons-httpclient)
Господа, не встречались ли вы с такой ситуацией? (сабж)
Вот весь stacktrace:
socketRead0():-1, SocketInputStream {java.net}
read():129, SocketInputStream {java.net}
read1():254, BufferedInputStream {java.io}
read():313, BufferedInputStream {java.io}
read():181, ChunkedInputStream {org.apache.commons.httpclient}
read():111, FilterInputStream {java.io}
read():107, AutoCloseInputStream {org.apache.commons.httpclient}
readBytes():411, StreamDecoder$CharsetSD {sun.nio.cs}
implRead():453, StreamDecoder$CharsetSD {sun.nio.cs}
read():183, StreamDecoder {sun.nio.cs}
read():167, InputStreamReader {java.io}
fill():136, BufferedReader {java.io}
readLine():299, BufferedReader {java.io}
readLine():362, BufferedReader {java.io}
Программа работала несколько часов, затем повисла и висит уже несколько часов; поведение reproducible, такое стабильно случается через несколько часов после запуска. Во время своего жизненного цикла программа качает очень много страничек.
Используется MultiThreadedHttpConnectionManager с небесконечным и ненулевым таймаутом и на socket, и на connection.
Версия httpclient - 3.0.1.
socketRead0 в настоящий момент только в одной нити.
У java-процесса установлено несколько (штук 8) http-соединений (что странно, учитывая предыдущий пункт). Если закрыть то, про которое socketRead0, то ничего особенного не случается и программа продолжает висеть.
Гугль мне ничем помочь не смог.
Ежели вы встречались с такой проблемой - в чем может быть дело и какие можно, на крайний случай, придумать не слишком изуверские workaround'ы? Мне пока приходят в голову только готические ужасы типа "грузить в отдельной нити и stop'ить ее по таймеру". Можно, наверное, по таймеру пересоздавать HttpClient.
Вот весь stacktrace:
socketRead0():-1, SocketInputStream {java.net}
read():129, SocketInputStream {java.net}
read1():254, BufferedInputStream {java.io}
read():313, BufferedInputStream {java.io}
read():181, ChunkedInputStream {org.apache.commons.httpclient}
read():111, FilterInputStream {java.io}
read():107, AutoCloseInputStream {org.apache.commons.httpclient}
readBytes():411, StreamDecoder$CharsetSD {sun.nio.cs}
implRead():453, StreamDecoder$CharsetSD {sun.nio.cs}
read():183, StreamDecoder {sun.nio.cs}
read():167, InputStreamReader {java.io}
fill():136, BufferedReader {java.io}
readLine():299, BufferedReader {java.io}
readLine():362, BufferedReader {java.io}
Программа работала несколько часов, затем повисла и висит уже несколько часов; поведение reproducible, такое стабильно случается через несколько часов после запуска. Во время своего жизненного цикла программа качает очень много страничек.
Используется MultiThreadedHttpConnectionManager с небесконечным и ненулевым таймаутом и на socket, и на connection.
Версия httpclient - 3.0.1.
socketRead0 в настоящий момент только в одной нити.
У java-процесса установлено несколько (штук 8) http-соединений (что странно, учитывая предыдущий пункт). Если закрыть то, про которое socketRead0, то ничего особенного не случается и программа продолжает висеть.
Гугль мне ничем помочь не смог.
Ежели вы встречались с такой проблемой - в чем может быть дело и какие можно, на крайний случай, придумать не слишком изуверские workaround'ы? Мне пока приходят в голову только готические ужасы типа "грузить в отдельной нити и stop'ить ее по таймеру". Можно, наверное, по таймеру пересоздавать HttpClient.
