这表明运行 WLS 的 Java 进程使用 884 个句柄,但只有少数(65 个)句柄引用打开的文件。
通过使用上述任一工具,您可以确定应当关闭的文件是否仍处于打开状态。接着,您应当按照下面说明的方式检查如何关闭文件以及如何释放它的文件描述符。 返回页首
如何以及何时发布文件描述符? 文件描述符是在文件关闭或进程终止时被淘汰的。如果 close() 系统调用没有返回失败代码,则为将来要分配文件描述符的 open() 调用提供相关的文件描述符。当与某个打开文件的描述相关联的所有文件描述符已经关闭时,该打开文件的描述会被释放。
您不应当依赖垃圾回收和对象终止功能来释放非 Java 资源(如文件描述符)。这就是为什么应当使用 close() 调用以及在出现错误时处理其输出结果的原因。 已关闭的套接字传输到 TIME_WAIT 以确保所有的数据在连接期间被传输,最终确认 (ACK) 应当终止数据传输,此状态会延迟释放分配给该套接字的文件描述符。在 Unix 系统上,此 TIME_WAIT 期间的持续时间在名为 tcp_time_wait _interval 的内核参数中定义。在 Windows NT、Windows 2000 和 Windows XP 上,此期间在注册表中名为 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters 的系统项中定义为 TcpTimedWaitDelay 。
下面的 URL 提供关于 Unix 内核参数的详细说明: http://www.unixadm.net/networking/tune.html 返回页首
已知的 WebLogic Server 问题
增加文件描述符的数量通常将能够解决这种问题,但是您还将需要确保 WebLogic Server 作为一种应用程序不使用过多的文件,还要确保打开的文件能够正确关闭,以便释放文件描述符。
报告给 BEA 客户支持部门的所有问题都与缺少文件描述符或者描述符表溢出有关。此问题总是在操作系统通知 Java 进程不能分配新文件描述符时发生。在这种情况下,您需要增加 fd 的数量。 返回页首
文件描述符和设置
什么是文件描述符? 文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文 。
如何创建文件描述符? 进程获取文件描述符最常见的方法是通过本机子例程 open 或 create 获取或者通过从父进程继承。后一种方法允许子进程同样能够访问由父进程使用的文件。文件描述符对于每个进程一般是唯一的。当用 fork 子例程创建某个子进程时,该子进程会获得其父进程所有文件描述符的副本,这些文件描述符在执行 fork 时打开。在由 fcntl、dup 和 dup2 子例程复制或拷贝某个进程时,会发生同样的复制过程。
第二个异常在 JVM 进程缺乏文件描述符时出现(尽管在执行 forkAndExec() 子例程时丆需要新的文件描述符来复制父进程的文件描述符)。对于每个进程,操作系统内核在 u_block 结构中维护文件描述符表,所有的文件描述符都在该表中建立索引。
如何在不同平台上定义文件描述符的数量 文件描述符极限以及可分配给进程的最大大小由资源限制来定义。这些值应当按照在 WebLogic Server 文档中建议的、特定于操作系统的文件描述符值来设置:
对于 WLS 8.1:调整硬件、操作系统和网络性能 对于 WLS 7.0:调整硬件、操作系统和网络性能 对于 WLS 6.1:调整硬件、操作系统和网络性能
Unix 和 Linux 都有文件描述符。 不过,二者的主要区别在于如何设置文件描述符的硬极限值、缺省值和配置过程。
Solaris /usr/bin/ulimit 实用程序定义允许单个进程使用的文件描述符的数量。它的最大值在 rlim_fd_max 中定义,在缺省情况下,它设置为 65,536。只有 root 用户才能修改这些内核值。
Linux 管理用户可以在 etc/security/limits.conf 配置文件中设置他们的文件描述符极限,如下例所示。
soft nofile 1024
hard nofile 4096
系统级文件描述符极限还可以通过将以下三行添加到 /etc/rc.d/rc.local 启动脚本中来设置:
# Increase system-wide file descriptor limit.
echo 4096 > /proc/sys/fs/file-max
echo 16384 > /proc/sys/fs/inode-max
Windows 在 Windows 操作系统上,文件描述符被称作文件句柄。在 Windows 2000 服务器上,打开文件的句柄极限设置为 16,384。此数量可以在任务管理器的性能摘要中监视。
HP-UX nfile 定义打开文件的最大数量。此值通常由以下公式来确定:((NPROC*2)+1000) ,其中 NPROC 通常为:((MAXUSERS*5)+64) 。 如果 MAXUSERS 等于 400,则经过计算得到此值为 5128。通常可以将此值设高一些。maxfiles 是每个进程的软文件极限,maxfiles_lim 是每个进程的硬文件极限。
AIX 文件描述符极限在 /etc/security/limits 文件中设置,它的缺省值是 2000。此极限可以通过 ulimit 命令或 setrlimit 子例程来更改。最大大小由 OPEN_MAX 常数来定义。 返回页首 |