You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Anton Krosnev (JIRA)" <ji...@apache.org> on 2016/04/01 11:18:25 UTC

[jira] [Commented] (HTTPCORE-420) Connections left open after HTTP synchronous server shutdown

    [ https://issues.apache.org/jira/browse/HTTPCORE-420?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15221421#comment-15221421 ] 

Anton Krosnev commented on HTTPCORE-420:
----------------------------------------

The problem is actually in org.apache.http.impl.bootstrap.Worker.run(). The Worker thread is supposed to be stopped by Thread.interrupted() when server.shutdown is called, but it blocks on socket.read() after the response is returned, check the stack below. Worker threads remain in this state until the connection is closed or new request is sent via the same socket or the JVM is terminated. 

{quote}
Thread [HTTP-worker-1] (Suspended)	
	org.apache.http.impl.DefaultBHttpServerConnection.receiveRequestHeader() line: 132	
	org.apache.http.protocol.HttpService.handleRequest(org.apache.http.HttpServerConnection, org.apache.http.protocol.HttpContext) line: 307	
	org.apache.http.impl.bootstrap.Worker.run() line: 66	
	java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) line: 1142	
	java.util.concurrent.ThreadPoolExecutor$Worker.run() line: 617	
	java.lang.Thread.run() line: 745
{quote}

> Connections left open after HTTP synchronous server shutdown
> ------------------------------------------------------------
>
>                 Key: HTTPCORE-420
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-420
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 4.4.3
>         Environment: java version "1.8.0_65"
> Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
> Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
> Linux 3.0.101-0.47.71-default #1 SMP Thu Nov 12 12:22:22 UTC 2015 (b5b212e) x86_64 x86_64 x86_64 GNU/Linux
>            Reporter: Anton Krosnev
>            Assignee: Oleg Kalnichevski
>             Fix For: 4.4.5
>
>
> I have observed the following problem on Linux  with Apache HttpComponents 4.4.1 synchronous server: After calling server.shutdown(42, TimeUnit.MICROSECONDS),  if there are Keep-alive connections opened (there is no request processing), these sockets are not closed. Only ServerSocket is closed:
> {quote}
> netstat -aon | grep 58276
> TCP    127.0.0.1:50658        127.0.0.1:58276        ESTABLISHED     18012
> TCP    127.0.0.1:58276        127.0.0.1:50658        ESTABLISHED     18012
> {quote}
> In attempt to start again HTTP server on the same port a BindingException is thrown:
> {quote}
> Caused by: java.net.BindException: Address already in use
> at java.net.PlainSocketImpl.socketBind(Native Method)
> at java.net.PlainSocketImpl.socketBind(PlainSocketImpl.java:521)
> at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:414)
> at java.net.ServerSocket.bind(ServerSocket.java:326)
> at java.net.ServerSocket.<init>(ServerSocket.java:192)
> at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:170)
> at org.apache.http.impl.bootstrap.HttpServer.start(HttpServer.java:116)
> {quote}
> On Windows the behavior is the same , however there is no BindingException and the server starts process requests without any problems.
> One can reproduce the problem using example code from https://github.com/anton-k11/apache-tests/tree/master
> # Start the server and the client. 
> # Client will send several requests to the server. 
> #* Client will open 2 connections to the server. 
> # After 1 min. the server will be shutdown. 
> #* Check the open connections on port 9090, the 2 connections between client and server are still open. 
> # After 1 min. a new Server is started on the same port 9090.
> #* On Linux this brakes with:
> {quote}
>  java.net.BindException: Address already in use
>         at java.net.PlainSocketImpl.socketBind(Native Method)
>         at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
>         at java.net.ServerSocket.bind(ServerSocket.java:375)
>         at java.net.ServerSocket.<init>(ServerSocket.java:237)
>         at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:231)
>         at org.apache.http.impl.bootstrap.HttpServer.start(HttpServer.java:116)
>         at org.apache.http.examples.server.TestHttpServer.main(TestHttpServer.java:49)
> {quote}
> #* On Windows this work just fine and the server is started successfully.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org