handling file descriptors java -


whenever our application handles large amount of http request, error "too many open files" being displayed on logs , sure error connected socket , creates new file descriptor instance see error below:

[java.net.socket.createimpl(socket.java:447), java.net.socket.getimpl(socket.java:510),  java.net.socket.setsotimeout(socket.java:1101),  org.apache.http.conn.scheme.plainsocketfactory.connectsocket(plainsocketfactory.java:122),  org.apache.http.impl.conn.defaultclientconnectionoperator.openconnection(defaultclientconnecti onoperator.java:148),  org.apache.http.impl.conn.abstractpoolentry.open(abstractpoolentry.java:149),  org.apache.http.impl.conn.abstractpooledconnadapter.open(abstractpooledconnadapter.java:121),  org.apache.http.impl.client.defaultrequestdirector.tryconnect(defaultrequestdirector.java:561), org.apache.http.impl.client.defaultrequestdirector.execute(defaultrequestdirector.java:415), 

when saw on internet should use

entityutils.consume(entity); httpclient.getconnectionmanager().shutdown(); 

the errors reduced not many, have feeling consuming of resources not enough clear of file descriptors. right looking different answers asides on changing ulimit because application deployed on other server can't configure if changes needed.

since using linux, there configurations might changed solve problem. first of all, happening? after close socket in java, operating systems sets time_wait state , because still might sent socket, os maintains open time make sure packets received (basically packets still on way , need kind of response must received).

as far know it's not optimal solution problem, works. should set tcp_tw_recycle , tcp_tw_reuse 1, allow fast re-usage of sockets os. how done, depends on linux version have. instance in fedora like:

echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle 

to set temporarily (untill reboot). find out how set permanently, cuz i'm not strong @ linux administration.

edit: i'm mentioning once again, not optimal solution, try think can changed in application before messing os configuration.


Comments

Popular posts from this blog

c# - How to get the current UAC mode -

postgresql - Lazarus + Postgres: incomplete startup packet -

angularjs - ng-repeat duplicating items after page reload -