`
brofe
  • 浏览: 233414 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解决Linux下“java.net.SocketException: Too many open files”异常

    博客分类:
  • OS
阅读更多
背景:

项目上线后发现Telnet模块在稳定运行一段时间后会自动断开,无法登陆,后台抛出:“java.net.SocketException: Too many open files”异常。

环境:
Linux版本:cat /proc/version

Linux version 2.6.18-164.el5 (mockbuild@x86-003.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Aug 18 15:51:48 EDT 2009

Weblogic:10.3
JDK:jrockit-jdk1.6.0_29-R28.2.2-4.1.0


原因有以下两个:

1、打开的Socket客户端并没有正常关闭,此处可能是自动超时功能有问题或者网络突然断开等。

2、Linux默认设置的文件最大打开数太小(默认值:1024,使用:ulimit -n 命令查看)。

基于以上两点,故从以下三个方面着手解决:1、操作系统Linux 2、应用服务器Weblogic 3、程序

配置Linux文件最大打开数:


/etc/security/limits.conf:在该文件的最后加入,最大文件打开数:

* soft nofile 65535
* hard nofile 65535

/etc/pam.d/login:在该文件的最后加入:

session required /lib/security/pam_limits.so

重新登录后使用命令查看:ulimit -n,是否和设置保持一致



3、修改Weblogic最大文件句柄数:(重启服务后生效)
bea/wlserver_10.3/common/bin/commEnv.sh

# limit the number of open file descriptors
resetFd() {
  if [ ! -n "`uname -s |grep -i cygwin || uname -s |grep -i windows_nt || \
       uname -s |grep -i HP-UX`" ]
  then
    ofiles=`ulimit -S -n`
    maxfiles=`ulimit -H -n`
    if [ "$?" = "0" -a  `expr ${maxfiles} : '[0-9][0-9]*$'` -eq 0 -a `expr ${ofiles} : '[0-9][0-9]*$'` -eq 0 ]; then   
      ulimit -n 65535
    fi
  fi
}


4、优化 Linux TCP 配置:

/etc/sysctl.conf

# 2012-04-09 begin

## 允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1

## 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1

##  修改系統默认的 TIMEOUT 时间
net.ipv4.tcp_fin_timeout = 30

## 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时
net.ipv4.tcp_keepalive_time = 1800

## TCP发送keepalive探测以确定该连接已经断开的次数
net.ipv4.tcp_keepalive_probes = 5

## 探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。
net.ipv4.tcp_keepalive_intvl = 15

## 表示SYN队列的长度,默认为1024,可以容纳更多等待连接的网络连接数
net.ipv4.tcp_max_syn_backlog = 4096

## 最大文件句柄数
fs.file-max=65535

# 2012-04-09 end

# /sbin/sysctl -p 使上述配置生效命令



5、Java Socket程序中,增加如下配置:
socket.setTcpNoDelay(true); // 关闭Nagle算法, 立即发包
socket.setKeepAlive(true);


6、常用Linux命令:(个人备忘)
1、查看进程:ps -ef|grep [java、tomcat、weblogic]
2、查看某端口TCP连接占用数:netstat -pnt | grep :6666 |wc -l
3、查看某端口TCP连接占用信息:lsof -i :6666
4、查看TCP连接状态以及数量:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
5、查看所有进程占用的文件句柄数:lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
6、查看某进程所属服务:ps -aef|grep 24204


9、优化结果
总共83把手持设备,现在24小时作业每天的TCP连接数保持在:70左右。以前一到600多系统就宕机了。
分享到:
评论

相关推荐

    JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES解决方法

    JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES解决方法 JAVA.NET.SOCKETEXCEPTION TOO MANY OPEN FILES错误是一种常见的网络编程错误,发生在Java应用程序中, especialmente 在 Linux 操作系统中。该错误的出现是...

    java.net.SocketException: No route to host 异常原因

    NULL 博文链接:https://zhoudan241.iteye.com/blog/1432014

    在Win7系统下抛出java.net.SocketException的解决办法

    ### 在Win7系统下抛出java.net.SocketException的解决办法 #### 问题背景及原因分析 在使用MyEclipse开发工具结合JBoss服务器进行项目开发的过程中,遇到一个常见但令人头疼的问题:当启动JBoss服务器时,控制台...

    java.net.SocketException Connection reset 解决方法

    "java.net.SocketException Connection reset 解决方法" 在 Java 编程中,SocketException 是一种常见的异常,特别是在网络编程中。Conexion reset by peer 是一种特殊的 SocketException,它发生在客户端和服务器...

    java.net.SocketException: Connection reset 解决方法

    总的来说,处理`java.net.SocketException: Connection reset`需要理解TCP连接的工作原理,并且在编写网络程序时要注重连接管理,合理控制并发连接数,以及在异常情况下采取适当的恢复策略。优化网络请求的频率和...

    Linux下打开的文件过多错误

    Linux下运行tomcat或者was出现java.net.SocketException: 打开的文件过多错误 tomcat报“too many open files”的错误,解决办法如下:

    http接口调用报错.rar

    接口调用报错:java.net.SocketException: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory

    Java Socket常见异常处理

    Java Socket编程中,异常处理是确保程序稳定性和健壮性的重要环节。以下是对常见的Java Socket异常的详细解析和处理建议: 1. **java.net.BindException: Address already in use: JVM_Bind** 这个异常表明尝试...

    connection reset解决方案(亲测可用).md

    connection reset解决方案(亲测可用).md

    Too many open files 解决方法

    在将Web服务器从Windows环境迁移到Linux环境后,遇到了一个常见的问题:“java.net.SocketException: Too many open files”。这种异常通常发生在高并发环境下,例如网站访问量显著增加时。在Windows环境中长时间...

    fastdfs使用java

    在Java中使用FastDFS,首先需要在项目中引入FastDFS的Java客户端库。配置client.conf文件,设置tracker服务器的地址和其他相关参数。接着创建FastdfsClient和FastdfsUtil类,前者用于与FastDFS服务器通信,后者封装...

    java.net.SocketException(解决方案).md

    项目中碰到的,记录一下解决方案

    Socket长连接异常处理

    java.net.SocketException: Connection reset by peer: Socket write error 该异常可能发生在客户端和服务器端,原因是因为一端的 Socket 被关闭,而另一端继续发送数据。解决方法是确保在关闭连接前完成所有的数据...

    Ice-3.7.4.msi for windows版

    Caused by: java.net.ConnectException: Connection refused at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:574) at ...

    Google I/O 2013推荐Android 网络通信框架Volley

    5. **错误处理**:Volley提供了一套完整的错误处理机制,包括重试策略和错误回调,可以帮助开发者更好地理解和处理网络异常。 6. **强大的请求类型**:Volley支持GET、POST等多种HTTP方法,还可以处理HTTP头和POST...

    Hive2Hive-master.rar

    在Java中,Socket类和ServerSocket类分别用于客户端和服务端的通信建立。 2. **Hive数据同步需求**: 在大数据环境中,数据的实时同步是非常关键的。例如,当一个Hive集群中的数据发生变化时,可能需要将这些变化...

    如何解决线程太多导致java socket连接池出现的问题

    3. 错误信息:当Socket连接池出现问题时,可能会出现错误信息,如"java.net.SocketException: No buffer space available (maximum connections reached?): listen failed"。 解决方法 要解决线程太多导致Socket...

    System.SR.dll 无法显示错误信息

    System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集 ---> System.Net.Sockets.SocketException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集 ...

    C# 服务器发送邮件失败实例分析

    错误展示: 我在本地是可以发送的但部署到服务器上后就不能发送了。...首先说下邮件发送的端口:25/465/587 25端口 25端口是为SMTP协议服务开放的,是这三个端口中最老的一个。25端口也称为消息中继端

Global site tag (gtag.js) - Google Analytics