Thank you Oleg, I will take a look on this.
> 在 2018年6月11日,下午10:27,Oleg Kalnichevski <[email protected]> 写道: > > On Mon, 2018-06-11 at 21:12 +0800, zhangminglei wrote: >> Hi, Oleg, >> >> Thank you for your response, But my question is why this program >> never stopped ? And always running… >> > > The first two requests cause all available connections to get leaked. > All subsequent requests block indefinitely waiting for connections to > become available in the connection pool. > > Oleg > >> Minglei. >> >>> 在 2018年6月11日,下午8:27,Oleg Kalnichevski <[email protected]> 写道: >>> >>> On Fri, 2018-06-08 at 15:30 +0800, zhangminglei wrote: >>>> Hi, friends. >>>> >>>> I am using HttpClient for a few tests. And I use the below code >>>> to >>>> run without success. But the process never stoped. >>>> I use jstack for this and found it always wait for something. >>>> Could >>>> you help me please ? Thanks. >>>> >>>> parking to wait for <0x000000076c1d0980> (a >>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionOb >>>> ject >>>> ) >>>> >>>> Best >>>> Minglei >>>> >>>> public class HttpClientWithSync { >>>> >>>> public static void main(String[] args) { >>>> >>>> String url = "https://www.baidu.com/"; >>>> >>>> String[] strs = new String[] {url, url, url}; >>>> >>>> CloseableHttpClient httpclient = >>>> HttpClients.createDefault(); >>>> >>>> for (int i = 0; i < 3; i++) { >>>> HttpGet httpget = new HttpGet(strs[i]); >>>> System.out.println(); >>>> try { >>>> System.out.println("Waiting for the contents, hurry! >>>> hurry ! hurry!....."); >>>> >>>> // take a while and block the main thread. >>>> HttpResponse response = httpclient.execute(httpget); >>>> >>>> if (response.getStatusLine().getStatusCode() == >>>> HttpStatus.SC_OK) { >>>> System.out.println("============ Get the entity >>>> ============ "+ response.getEntity()); >>>> } >>>> // after getting the value from the url and then do >>>> this >>>> or do not if something unexpected to happen. >>>> System.out.println("Do some other stuff"); >>>> } catch (IOException e) { >>>> e.printStackTrace(); >>>> } >>>> } >>>> try { >>>> httpclient.close(); >>>> } catch (IOException e) { >>>> e.printStackTrace(); >>>> } >>>> } >>>> } >>>> >>> >>> Your code is leaking connections. >>> >>> Please see >>> >>> http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/fund >>> amen <http://hc.apache.org/httpcomponents-client- >>> 4.5.x/tutorial/html/fundamen> >>> tals.html#d5e145 >>> >>> Oleg >>> >>> >>>> >>>> The full thread dump are >>>> >>>> 2018-06-08 11:02:08 >>>> Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.161-b12 >>>> mixed >>>> mode): >>>> >>>> "Attach Listener" #12 daemon prio=9 os_prio=31 >>>> tid=0x00007fce8904a000 >>>> nid=0x1207 waiting on condition [0x0000000000000000] >>>> java.lang.Thread.State: RUNNABLE >>>> >>>> "Service Thread" #10 daemon prio=9 os_prio=31 >>>> tid=0x00007fce8c04b800 >>>> nid=0x5503 runnable [0x0000000000000000] >>>> java.lang.Thread.State: RUNNABLE >>>> >>>> "C1 CompilerThread3" #9 daemon prio=9 os_prio=31 >>>> tid=0x00007fce8c002800 nid=0x5303 waiting on condition >>>> [0x0000000000000000] >>>> java.lang.Thread.State: RUNNABLE >>>> >>>> "C2 CompilerThread2" #8 daemon prio=9 os_prio=31 >>>> tid=0x00007fce89084000 nid=0x5103 waiting on condition >>>> [0x0000000000000000] >>>> java.lang.Thread.State: RUNNABLE >>>> >>>> "C2 CompilerThread1" #7 daemon prio=9 os_prio=31 >>>> tid=0x00007fce8c002000 nid=0x4f03 waiting on condition >>>> [0x0000000000000000] >>>> java.lang.Thread.State: RUNNABLE >>>> >>>> "C2 CompilerThread0" #6 daemon prio=9 os_prio=31 >>>> tid=0x00007fce8c001000 nid=0x4d03 waiting on condition >>>> [0x0000000000000000] >>>> java.lang.Thread.State: RUNNABLE >>>> >>>> "Monitor Ctrl-Break" #5 daemon prio=5 os_prio=31 >>>> tid=0x00007fce8a83b800 nid=0x4b03 runnable [0x0000700007e38000] >>>> 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.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) >>>> at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) >>>> at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) >>>> - locked <0x000000076adce880> (a java.io.InputStreamReader) >>>> at java.io.InputStreamReader.read(InputStreamReader.java:184) >>>> at java.io.BufferedReader.fill(BufferedReader.java:161) >>>> at java.io.BufferedReader.readLine(BufferedReader.java:324) >>>> - locked <0x000000076adce880> (a java.io.InputStreamReader) >>>> at java.io.BufferedReader.readLine(BufferedReader.java:389) >>>> at >>>> com.intellij.rt.execution.application.AppMainV2$1.run(AppMainV2.j >>>> ava: >>>> 64) >>>> >>>> "Signal Dispatcher" #4 daemon prio=9 os_prio=31 >>>> tid=0x00007fce8881c000 nid=0x4903 runnable [0x0000000000000000] >>>> java.lang.Thread.State: RUNNABLE >>>> >>>> "Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fce89003800 >>>> nid=0x3903 in Object.wait() [0x0000700007c32000] >>>> java.lang.Thread.State: WAITING (on object monitor) >>>> at java.lang.Object.wait(Native Method) >>>> - waiting on <0x000000076ab08ec0> (a >>>> java.lang.ref.ReferenceQueue$Lock) >>>> at >>>> java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) >>>> - locked <0x000000076ab08ec0> (a >>>> java.lang.ref.ReferenceQueue$Lock) >>>> at >>>> java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) >>>> at >>>> java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) >>>> >>>> "Reference Handler" #2 daemon prio=10 os_prio=31 >>>> tid=0x00007fce8b004000 nid=0x3703 in Object.wait() >>>> [0x0000700007b2f000] >>>> java.lang.Thread.State: WAITING (on object monitor) >>>> at java.lang.Object.wait(Native Method) >>>> - waiting on <0x000000076ab06b68> (a >>>> java.lang.ref.Reference$Lock) >>>> at java.lang.Object.wait(Object.java:502) >>>> at >>>> java.lang.ref.Reference.tryHandlePending(Reference.java:191) >>>> - locked <0x000000076ab06b68> (a java.lang.ref.Reference$Lock) >>>> at >>>> java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) >>>> >>>> "main" #1 prio=5 os_prio=31 tid=0x00007fce8a008000 nid=0x1c03 >>>> waiting >>>> on condition [0x0000700007110000] >>>> java.lang.Thread.State: WAITING (parking) >>>> at sun.misc.Unsafe.park(Native Method) >>>> - parking to wait for <0x000000076c1d0980> (a >>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionOb >>>> ject >>>> ) >>>> at >>>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) >>>> at >>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionOb >>>> ject >>>> .await(AbstractQueuedSynchronizer.java:2039) >>>> at >>>> org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(Abstra >>>> ctCo >>>> nnPool.java:377) >>>> at >>>> org.apache.http.pool.AbstractConnPool.access$200(AbstractConnPool >>>> .jav >>>> a:67) >>>> at >>>> org.apache.http.pool.AbstractConnPool$2.get(AbstractConnPool.java >>>> :243 >>>> ) >>>> - locked <0x000000076d160008> (a >>>> org.apache.http.pool.AbstractConnPool$2) >>>> at >>>> org.apache.http.pool.AbstractConnPool$2.get(AbstractConnPool.java >>>> :191 >>>> ) >>>> at >>>> org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leas >>>> eCon >>>> nection(PoolingHttpClientConnectionManager.java:282) >>>> at >>>> org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.ge >>>> t(Po >>>> olingHttpClientConnectionManager.java:269) >>>> at >>>> org.apache.http.impl.execchain.MainClientExec.execute(MainClientE >>>> xec. >>>> java:191) >>>> at >>>> org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec. >>>> java >>>> :185) >>>> at >>>> org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:8 >>>> 9) >>>> at >>>> org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec. >>>> java >>>> :111) >>>> at >>>> org.apache.http.impl.client.InternalHttpClient.doExecute(Internal >>>> Http >>>> Client.java:185) >>>> at >>>> org.apache.http.impl.client.CloseableHttpClient.execute(Closeable >>>> Http >>>> Client.java:83) >>>> at >>>> org.apache.http.impl.client.CloseableHttpClient.execute(Closeable >>>> Http >>>> Client.java:108) >>>> at >>>> org.apache.flink.streaming.connectors.fs.HttpClientWithSync.main( >>>> Http >>>> ClientWithSync.java:37) >>>> >>>> "VM Thread" os_prio=31 tid=0x00007fce88819000 nid=0x3503 >>>> runnable >>>> >>>> "GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007fce8a014000 >>>> nid=0x2503 runnable >>>> >>>> "GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007fce8a014800 >>>> nid=0x2703 runnable >>>> >>>> "GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007fce89004800 >>>> nid=0x2903 runnable >>>> >>>> "GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007fce88800800 >>>> nid=0x2b03 runnable >>>> >>>> "GC task thread#4 (ParallelGC)" os_prio=31 tid=0x00007fce88808800 >>>> nid=0x2d03 runnable >>>> >>>> "GC task thread#5 (ParallelGC)" os_prio=31 tid=0x00007fce88809000 >>>> nid=0x2f03 runnable >>>> >>>> "GC task thread#6 (ParallelGC)" os_prio=31 tid=0x00007fce89005800 >>>> nid=0x3103 runnable >>>> >>>> "GC task thread#7 (ParallelGC)" os_prio=31 tid=0x00007fce89006000 >>>> nid=0x3303 runnable >>>> >>>> "VM Periodic Task Thread" os_prio=31 tid=0x00007fce888c7000 >>>> nid=0x5703 waiting on condition >>>> >>>> JNI global references: 364 >>>> >>>> >>> >>> ----------------------------------------------------------------- >>> ---- >>> To unsubscribe, e-mail: [email protected] >>> <mailto:[email protected]> >>> For additional commands, e-mail: [email protected] >>> g <mailto:[email protected]> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > <mailto:[email protected]> > For additional commands, e-mail: [email protected] > <mailto:[email protected]>
