`
langzhiwang888
  • 浏览: 183909 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

weblogic too many open files 问题解决集锦

 
阅读更多

####<2006-5-30 ????12?±38??20?? CST> <
rnel>> <> 
####<2006-5-30 ????12?±38??20?? CST> <
Kernel>> <> 
oo many open files> weblogic产生这个错误以后,就会拒绝服务,这时通过IE已经访问不了了。所以接下来就会出现apache报下面的错误:

[Tue May 30 13:00:57 2006] [error] CONNECTION_REFUSED [os error=0, line 1600 of ../nsapi/URL.cpp]: 218.206.70.193:7001 errno= 0这时访问apache会提示和weblogic的桥出了问题。

这个问题已经遇到很多次了,但通常都是夜间,第二天查看日志的时候,会发现那个时候确实访问量比较大。查看当时的连接情况可以看到,apache和java连接都700多。看了网上的说明,调整了系统参数、调整了weblogic的设置等,都不见效。
http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html
http://e-docs.bea.com/wls/docs81/perform/index.html

今天又出现这个情况了,不过是白天,和web应用的作者一起对weblogic的情况进行了观察。

通过weblogic控制台,可以看到Throughput这里大都是在处理1左右的访问,Queue Length这里却在不停的涨,开始就对Thread count做了修改,从50调整到了400,但是还是可以看到Thread会用完,一会Queue Length就又涨起来了。

分析一下就可以知道,情况应该是Queue的线程对访问的处理速度太慢,导致需要处理的队列越来越多。需要处理队列的增长速度比队列的处理速度慢,这样不管有多少线程,肯定最后都会导致不够用。

现在大家就开始考虑问题是不是出在应用这里了,应用执行速度慢,weblogic线程就会一直占着,就会导致线程用尽。而实际上确实是应用这里的问题。

应用对访问的处理速度很快,有访问进来就先放到队列,而队列的处理速度却是500ms处理一下,这样一秒也就处理2个。这样问题的原因就很明确了,1s内外部访问应用可能有10来次,而应用才处理2个,所以自然会将线程占满了。

调整队列处理速度之后问题就解决了,空闲线程一直是400。

=======================================================================

一,什么情况下,会新建和打开文件:
1,A JVM opens many files in order to read in the classes required to run your application. 
High volume applications can use a lot of files in many ways. 
2,each new socket requires a file. Clients and Servers communicate via TCP sockets.
3,Each browser's http request consumes TCP sockets when a connection is established to a Server.1,在文件关闭或进程终止时被关闭的。
2,如果想重用某个文件描述符,必须关闭与之关联的所有文件描述符(父进程和子进程:文件描述符可以继承,可由子进程使用)。
3,TIME_WAIT 结束时,才会释放 TCP 套接字文件描述符。
(在Unix系统中, TIME_WAIT在kernel参数tcp_time_wait_interval中设置.在Windows中,这个参数定义在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters的TcpTimedWaitDelay键值
中. 默认值是240秒 (tcp_time_wait _interval 和 TcpTimedWaitDelay))
4,打开新文件时将会重用关闭的文件描述符三,查看文件描述符的方法:
1,在UNIX平台,使用“文件列表” (lsof) 工具显示有关打开的文件和网络文件描述符的信息。
?? 针对特定的process ,语句就是: lsof -p <pid of process>
?? 这个命令可以在异常发生后检查打开文件的最大数,你也可以通过lsof –h 显示相应的语法和选项。
?? 此程序最新版本可通过以下网址获得:?? http://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/lsof/
2, 在WINDOWS平台,使用handle 工具报告有关打开文件句柄的信息。
?? 推荐使用Process Explorer 工具查看运行的进程和打开的文件列表.(google查一下)四, 解决之道:1,对于引发异常的进程,请定期通过工具或命令检查该进程打开的文件和/或连接。
2,将检查结果与操作系统对进程和总体的文件描述符限制进行比较。
3,根据检查结果和实际需要提高 OS 限制来弥补文件描述符不足。并使TIME_WAIT 期间缩短为一个切合 实际的值。注意事项:
1,如果未正确关闭文件,文件描述符可能未被释放。
2,如果子进程使用的描述符未关闭文件,将不能重用该文件描述符。(继承父进程文件描述符)
3, TIME_WAIT 结束前,TCP 套接字会使文件描述符保持打开状态。
4, 请不要依赖 GC 和对象清除功能来释放文件描述符五, 如何修改文件描述符:操作系统资源限制控制:单个进程最多可以打开的描述符数。1,Windows: 通过文件句柄,打开文件句柄设置为 16,384.2,Solaris: rlim_fd_cur 和 rlim_fd_max 
??? /usr/bin/ulimit 实用程序定义允许单个进程使用的文件描述符的数量。 它的最大值在 rlim_fd_max 中定义,在缺省情况下,它设置为 65,536。 只有ROOT用户才能修改这些内核值。3,HPUX: nfile, maxfiles 和 maxfiles_lim
nfile 定义打开文件的最大数量。 此值通常由以下公式来确定: ((NPROC*2)+1000),其中 NPROC 通常为: ((MAXUSERS*5)+64)。 如果 MAXUSERS 等于 400,则经过计算得到此值为 5128。 通常可以将此值设高一些。maxfiles 是每个进程的软文件极限,maxfiles_lim 是每个进程的硬文件极限。4,Linux: nofile 和 file-max
??? 管理用户可以在 etc/security/limits.conf 配置文件中设置他们的文件描述符极限,如下例所示。
??? soft nofile 1024
??? hard nofile 4096??? echo 4096 > /proc/sys/fs/file-max
??? echo 16384 > /proc/sys/fs/inode-max 5,AIX: OPEN_MAX
??? 文件描述符极限在 /etc/security/limits 文件中设置,它的缺省值是 2000。 此极限可以通过 ulimit 命令或 setrlimit 子例程来更改。 最大大小由 OPEN_MAX 常数来定义。

======================================================================

出现这个异常表明操作系统 (OS) 资源问题和操作系统与 JVM 进程用完文件描述符。解决方法指导原则
下面是一般指导原则和考虑事项:
  • 确定文件描述符的总数是否太少或者某些文件描述符是否未被正确释放。
这可以通过以下方法来诊断:在不同的时期检查文件描述符的总数,确定此数量是有所减少还是一直增加。
  • 如果此数量有所减少,则应当增加文件描述符的最大数量,以防止该问题再次发生
此变化可以和减少连接在断开之前保持 TIME_WAIT 状态的时间结合起来,在繁忙的服务器上,缺省值(240 秒)会延迟其它连接企图,从而将限制最大连接数量。
  • 如果此数量一直增加,则应当确定某些描述符的处理时间是否过长(文件没有正确地关闭)以及所创建的文件是否过多(例如,驱动程序库一直为每个新的 JDBC 连接加载文件)。
  • 加载 jar 文件还可能减少所使用的文件描述符的数量。每个 jar 文件都使用一个描述符,即使每个单独加载的单一类都将使用一个描述符时也是如此。

unix平台监控打开文件:

lsof -p <pid>

解决方法

增加文件描述符的数量通常将能够解决这种问题,但是您还将需要确保 WebLogic Server 作为一种应用程序不使用过多的文件,还要确保打开的文件能够正确关闭,以便释放文件描述符。

solaris上设置文件描述符:

/usr/bin/ulimit -H -n 8192

/usr/bin/ulimit -S -n 8192

曾经遇到前端的Apache TCP性能不佳造成大量TIME_WAIT状态的连接不能释放,造成WebLogic频繁出现Too many open files的问题。在重装主机升级了linux版本,调整了TCP参数后解决了此问题。

======================================================================

单位的系统是基于2EE架构的,采用的中间件是weblogic,操作系统是Solaris的,由多台服务器构成了应用集群。系统运行一端时间之后,出现了打开文件数过多(Too many open files)的错误,知道是什么错误,但不知道怎么改动,上网也找了一些资料都没有成功,最后在自己和别人的帮助下解决了这个问题,现在简单的说一下怎么做的,大家分享一下。

??? 当出现问题的时候我用ulimit -a查看了一下系统的打开文件数限制,结果只有256,于是就用调整了这个值,修改了/etc/system文件,增加了如下的内容:
set rlim_fd_cur=8192
set rlim_fd_max=65535

将打开文件数设为了8192,最大为65535。重启机器之后用ulimit -a看了一下,系统的已经变成了8192,以为问题能解决了,但过了一端时间之后有出现了同样的问题。网上好多说的改系统的打开文件数就行了,但我这儿却失败了,不知道为什么,如果有谁知道的可以指教一下。

??? 于是我又开始查找资料,使用了一个plimit命令查看了一下java进程的打开文件数只有1024,这是weblogic设的正常值,听一个工程师说如果打开文件数小于1024则weblogic设的值起作用,如果打开文件数大于1024,则会以操作系统的为准,但我遇到的问题却并非如此,进程的打开文件数还是1024,现在都没想明白。知道了这些之后,于是就把问题放在了如何永久修改java的打开文件数上,如果只是当前服务启动有效可以使用命令 plimit -n 最大打开数 pid(进程号) 实现,但这样每次重起WLS服务后都需要重新执行命令。

??? 因为我的环境是weblogic集群,修改了一个节点管理进程文件(在%bea home%\weblogic81\server\bin目录下)startNodeManager.sh,添加了行ulimit -n 65535,保存退出就ok了,但有一点要注意,就是必须重启服务器,否则更改不会有效。重启之后进程打开文件数就变成了65535,到目前为止没再出现上述问题。

??? 在另外一个tomcat+redhat的系统中也出现了上述的问题,正在解决中,如果解决了再和大家分享tomcat+redhat环境中如何解决该问题。如果有知道的朋友,可以留言告知,谢谢。

============================================================

我的操作系统是redhat,内核是Linux version 2.4.20,用tomcat作为中间件,出现了Too many open files错误。
通过ulimit -a查看结果为
open files (-n) 1024/proc/sys/fs/file-max值为209600网上说和file-max的值有关,但是我的都已经209600了,应该不会有问题的,
和ulimit -n看到的不一样,请问ulimit -a和file-max什么关系,怎么使ulimit -a查看到的open files信息是我想要设的值,怎么解决这个问题。同样的问题我在weblogic下也遇到过,修改了系统的最大打开文件数系统仍然出同样的错误,后来在weblogic的进程文件中加入了ulimit -n 65535,每次weblogic启动时,进程的打开文件数都是65535,没有再出现该问题。请问在tomcat中如何修改其进程的最大打开文件数,是在startup.sh中加入ulimit -n number语句吗?linux下怎么查看一个进程的最大打开文件数
lsof -p pid | wc -l
看到的好象是当前的打开文件数

===============================================================

我的weblogic经常报too many open files错误,BEA的人说是系统的问题。
我该怎么调整我的solaris8呢?
在/etc/system里,我的设置是
set rlim_fd_max=8192
set rlim_fd_cur=8192< 发表于: 2004-10-25 12:13 1、使用这个命令看一下!设置是否起作用。
# ulimit -n 
2048
2、检查你的java程序,可能是java程序没有关闭造成的!
最好从程序方面解决,要不性能会有影响!

分享到:
评论

相关推荐

    AIX关于Weblogic的报错_Too_many_open_files_的处理

    通过上述步骤,我们可以有效地解决AIX环境下Weblogic遇到的“Too many open files”问题。这不仅涉及了系统层面的资源限制调整,还包括了应用级别的优化措施。在实际操作过程中,还需要根据具体情况灵活调整,确保...

    WebLogic_Server经典实用问题集锦

    此外,还需要注意特定平台的干扰包问题,例如在AIX平台上可能需要删除或重命名某些干扰包文件,以解决安全参数协商失败的问题。 8. **事务控制示例代码**:文档中提供了事务控制的代码示例,展示了如何在代码中初始...

    weblogic 常见问题大集合

    weblogic 报 to many open file错误.docx weblogic.xml_部署描述符元素.docx Weblogic+10.3+集群配置手册.doc weblogic-debug模式启动.docx weblogic-debug模式启动.docx weblogic集群介绍.docx weblogic内存监控...

    解决任Weblogic 在Linux启动慢的问题

    解决 Weblogic 在 Linux 启动慢的问题 在 Linux 环境中,Weblogic 的启动速度可能会受到影响,表现为在输入用户名和密码前等待 2-3 分钟后再继续启动。这是由于 JVM 在 Linux 下的 Bug 导致的。下面我们将探讨解决...

    weblogic启动失败问题解决

    那么,如何解决 WebLogic 启动失败问题呢?下面我们将详细介绍。 问题原因 WebLogic 启动失败的主要原因是由于非正常的进程关闭导致的。在服务器突然 down 掉的情况下,所有进程都将非正常关闭,从而导致下次启动 ...

    weblogic安装部署以及常见问题解决

    在本文档中,我们将详细探讨64位WebLogic 11g的安装、部署过程以及如何解决在使用过程中遇到的一些常见问题。 ### (一) 安装 在Windows 64位操作系统上安装WebLogic Server时,需要注意以下几点: 1. **选择正确...

    Weblogic常见问题解答FAQ

    ### WebLogic Server 常见问题解答FAQ #### 概述 WebLogic Server是由BEA Systems公司开发的一款高性能的企业级应用服务器,适用于构建、部署和管理企业级Java应用程序。随着互联网技术的发展,WebLogic Server逐渐...

    weblogic管理手册

    "Too many open files"错误通常表示系统限制了可打开文件的数量,可通过修改系统级别的打开文件限制来解决,如在Unix/Linux系统中调整`ulimit`设置。 4. 虚拟主机: WebLogic支持虚拟主机以实现多站点共享同一...

    weblogic12c部署webservice错误问题WSSERVLET11

    然而,部署过程中可能会遇到各种问题,如在本问题中遇到的"weblogic12c部署webservice错误问题WSSERVLET11"。 错误信息"无法解析运行时描述符: java.lang.IllegalStateException: MASM0001:"指出在部署Web服务时...

    weblogic日常巡检,问题排查

    ### WebLogic 日常巡检与问题排查 #### 引言 WebLogic作为一款广泛使用的Java应用服务器,在企业级应用环境中扮演着重要的角色。为了确保WebLogic服务器能够稳定、高效地运行,定期进行健康检查(巡检)是非常必要...

    Weblogic实用教程及常用技巧集锦

    - **使用WebLogic诊断框架(WLDF)**:这是一个强大的工具,可以帮助识别和解决性能问题,通过编写诊断条件和操作来监控服务器行为。 6. **高级特性** - **集群与复制**:通过集群,可以实现应用的高可用性和负载...

    将应用部署在weblogic中于axis2冲突的问题及解决方案

    "将应用部署在Weblogic中与Axis2冲突的问题及解决方案" 问题描述 在将应用部署到Weblogic Server 10.3时,出现了一个错误,抛出ClassCastException异常,具体错误信息为: `java.lang.ClassCastException: ...

    weblogic部署项目jar冲突解决

    标题"weblogic部署项目jar冲突解决"指出的核心问题是JAR包冲突。这是因为不同的应用服务器可能内置了不同版本的库,或者在类加载机制上有差异,导致原本在Tomcat上运行良好的应用在WebLogic上出现问题。以下是一些...

    将应用部署到weblogic10及oracle linux遇到的问题及解决方案

    将应用部署到 WebLogic 10 及 Oracle Linux 遇到的问题及解决方案 在将应用部署到 WebLogic 10 及 Oracle Linux 的过程中,我们遇到了多种问题,这些问题都与 Java 语言和 WebLogic 服务器相关。在本文中,我们将...

    weblogic10在UNIX下部署,中文乱码问题的解决

    解决这个问题需要深入理解UNIX环境下的字符编码、WebLogic的配置以及应用程序的编码规范。以下是一些关键知识点的详细解释: 1. **UNIX字符编码**: UNIX系统通常使用UTF-8作为默认的字符集,但也有其他如ISO-8859...

    weblogic安装步骤以及报错解决

    但是,安装 Weblogic 可能会遇到各种问题,本文将提供详细的安装步骤和报错解决方案,以帮助用户顺利安装和使用 Weblogic。 一、配置 JDK 环境 在安装 Weblogic 之前,需要先配置 JDK 环境。首先,创建一个目录来...

Global site tag (gtag.js) - Google Analytics