线上tomcat 网络无法访问问题排查

线上Tomcat启动后无法访问,报错'Unable to open socket file',升级JDK无效。日志显示jar未加载,如jsp-api和servlet-api。进一步排查发现'打开的文件过多'的问题,通过'lsof'命令发现异常数量的连接。原因在于HttpClient未正确调用close方法,导致大量闲置连接积累。
摘要由CSDN通过智能技术生成

线上某台机器tomcat启动无法访问,通过jstack报错。

Unable to open socket file: target process not responding or HotSpot VM not loaded

因为这个错误提示误导我以为JDK的问题,升级JDK到1.7问题依旧。

 

这个时候查看日志发现:

INFO: validateJarFile(/home/admin/tlog-proxy/target/tlog-proxy.war/WEB-INF/lib/jsp-api-2.1-glassfish-2.1.v20091210.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class

2015-12-03 02:43:53,332 org.apache.catalina.loader.WebappClassLoader validateJarFile

INFO: validateJarFile(/home/admin/tlog-proxy/target/tlog-proxy.war/WEB-INF/lib/servlet-api-2.5-20081211.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class

2015-12-03 02:44:03,987 org.apache.catalina.startup.HostConfig deployDirectory

INFO: Deployment of web application directory /home/admin/tlog-proxy/.default/deploy/tlog-proxy.war has finished in 10,908 ms

2015-12-03 02:44:03,990 org.apache.coyote.AbstractProtocol start

INFO: Starting ProtocolHandler ["http-bio-7001"]

2015-12-03 02:44:04,051 org.apache.catalina.startup.Catalina start

INFO: Server startup in 11069 ms

2015-12-03 02:44:09,258 org.apache.tomcat.util.net.JIoEndpoint$Acceptor run

SEVERE: Socket accept failed

java.net.SocketException: 打开的文件过多

        at java.net.PlainSocketImpl.socketAccept(Native Method)

        at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)

        at java.net.ServerSocket.implAccept(ServerSocket.java:530)

        at java.net.ServerSocket.accept(ServerSocket.java:498)

        at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)

        at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:220)

        at java.lang.Thread.run(Thread.java:745)

 

lsof | grep java | wc -l发现超过1万,正常应该只有几百。然后查看发现是抓取任务太多导致。

 

事后排查抓取任务才几百个,为啥会创建出上万个连接呢,最后排查发现HttpClient没有调用 close

 

public void close() {

if (client != null) {

client.getConnectionManager().closeIdleConnections(0, TimeUnit.SECONDS);

}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值