java程序后台报错java.net.SocketException: Too many open files
问题描述:
今天一个同事反映程序有问题,让帮忙查看后台日志,发现后台日志报错的信息如下:
java.net.SocketException: Too many open files
at java.net.Socket.createImpl(Socket.java:460)
at java.net.Socket.connect(Socket.java:587)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:163)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:184)
at com.asiainfo.goods.wo.store.scheduler.util.FtpUtil.downloadFileByFileName(FtpUtil.java:270)
at com.asiainfo.goods.wo.store.scheduler.job.TargetUserJob.dealWithFtpByRequestId(TargetUserJob.java:186)
at com.asiainfo.goods.wo.store.scheduler.job.TargetUserJob.execute(TargetUserJob.java:80)
at com.asiainfo.goods.presale.scheduler.job.QuartzJobFactory.execute(QuartzJobFactory.java:68)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
2018-04-08 18:45:00 [com.asiainfo.goods.wo.store.scheduler.job.TargetUserJob]-[ERROR]:216 - file doesnot exist===TARGETCUSTU00011201
804081800575321.zip
问题分析:
通过以上的错误提示可以知道,是程序打开太多的文件导致的.
解决过程:
1.查看当前系统用户下设置的打开文件的上限
[aiprd@host-10-191-5-227 log]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 256705
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 20000
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
备注:当前用户下,每个进程最多可以打开65536个文件描述符.
2.查看应用程序进程当前已经打开的进程数
[aiprd@host-10-191-5-227 log]$ lsof -p 2526 | wc -l
65785
备注:当前应用程序打开的文件65785显然是超过了65536的限制,导致进程后续无法打开新的文件.
3.通过lsof命令针对单独的进程查看发现大量的deleted的文件

备注:很多文件已经不存在了,但是,文件的描述符还是打开的.
[aiprd@host-10-191-5-227 log]$ lsof -p 2526 | grep deleted | wc -l
65274
备注:deleted的文件有65274个.可见,大部分的文件描述符占用都是deleted的文件.
4.将应用程序进程关闭,释放打开的文件
[aiprd@host-10-191-5-227 log]$ kill -9 2526
[aiprd@host-10-191-5-227 log]$ lsof -p 2526 | wc -l
0
5.重启应用程序,并且查看打开的文件
[aiprd@host-10-191-5-227 log]$ ps -ef | grep scheduler_hdfs | grep -v grep | awk '{print $2}'
29639
[aiprd@host-10-191-5-227 log]$ lsof -p 29639 | wc -l
485
[aiprd@host-10-191-5-227 log]$ lsof -p 29639 | grep deleted | wc -l
0
备注:应用程序重启之后,之间打开的文件都释放掉了.后台程序可以正确的进行处理.
文档创建时间:2018年4月8日21:25:33
java程序后台报错java.net.SocketException: Too many open files的更多相关文章
- MapReduce 程序运行报错 java.lang.ClassNotFoundException解决方法
在创建自定义的Mapper时候,编译正确,但上传到集群执行时出现错误: 11/16/05 22:53:16 INFO mapred.JobClient: Task Id : attempt_20111 ...
- 后台报错java.lang.IllegalArgumentException: Invalid character found in the request target.
报错: Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang ...
- Java Web项目报错java.lang.NullPointerException at org.apache.jsp.front.index_jsp._jspInit(index_jsp.java:30)
环境:myeclipse+tomcat6+jdk6 今天搭建了一个Java Web项目,访问index.jsp时报如下错误: 严重: Servlet.service() for servlet jsp ...
- 关于 64位系统 java连接access 报错java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
报错的原因是url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=E:/公司/2000.mdb"; 这样是不行 ...
- java 连接Kafka报错java.nio.channels.ClosedChannelExcep
Java 客户端连接Kafka报如下错误 java.nio.channels.ClosedChannelExcep 是由于Kafka server.properties中的advertised.hos ...
- Java连接MongoDB报错“java.lang.IllegalArgumentException: clusterListener can not be null”的解决办法
我使用的MongoDB版本是3.6.9. 下面是一个很基础的示例代码,功能就是连接MongoDB: package com.zifeiy.snowflake.handle.etl.mongodb; i ...
- java转换编码报错java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern
Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex cha ...
- java 连接 elasticsearch 报错java.lang.NoClassDefFoundError: org/apache/http/auth/Credentials 解决
您的问题是您在应用程序类路径中缺少必需的JAR(这导致ClassNotFound异常).如果您下载了包含IP Camera驱动程序(webcam-capture-driver-ipcam-0.3.10 ...
- java连接sqlserver2008报错 java.sql.SQLException: 对象名 '表名' 无效.
注意:c3p0的数据库配置方式为: <named-config name="sqlsvr"> <property name="driverClass&q ...
随机推荐
- SourceInsight-查看java中接口对应的实现类
1.双击选中需要查看的接口名称,然后右击选择“Show in Relation Window” 2.然后在右侧会弹出一个Relation的窗口 如果没有列出对应的实现类,可以在接口名上再次右击,依次选 ...
- 使用自定义的按钮替换默认的<input type='file'>
可以通过让默认的input type = 'file'按钮透明度变为0,并且让它刚好覆盖在自定义的按钮上,来实现此效果: 将它写成一个jQuery插件: (function($){ $.fn.brow ...
- In search of the perfect URL validation regex
To clarify, I’m looking for a decent regular expression to validate URLs that were entered as user i ...
- 破解swf文件
但我们在网页上看到漂亮的flashs,想看下别人是怎么做的,怎么办? 答曰:我们需要两个工具 swf_reader_2.3 (把浏览器中的flash下载到本地的swf文件)下载地址http://dow ...
- 从零开始,跟我一起做jblog项目(三)从Maven到Gradle
http://www.cnblogs.com/newflydd/p/4972922.html?utm_source=tuicool&utm_medium=referral ********** ...
- web.xml中init-param中的param-name
转载自:http://www.cnblogs.com/hzj-/articles/1689836.html <context-param>的作用:web.xml的配置中<contex ...
- 阅读ANSI C,寻找乐趣和裨益——const char **与char **为何不兼容
#include<stdio.h> void foo1(const char**p) { } void foo2(const char*p) { } int main(int argc,c ...
- JAVA-一个简单的JSP程序(HelloWorld)
相关资料: <21天学通Java Web开发> 实例代码: 1.在虚拟目录下新建一个“HeoolWorld.jsp”文件.2.“HeoolWorld.jsp”文件内容如下: <htm ...
- iphone 6plus 下app里的状态栏和界面会被放大的问题//以及设置APP闪屏页/APP图标流程
//设置APP闪屏页/APP图标流程如下 2.6Plus界面显示变大以及APP图标变大是由于上面图片的AppIcon以及LaunchImage造成的,主要是由于找不到对应的3x图片,或者改3x图片尺寸 ...
- 【Unity】动态调用其他脚本的函数
本文转载自:http://blog.csdn.net/smilingeyes/article/details/17767269 第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名( ...