这表明运行 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
常数来定义。
返回页首
|
相关推荐
在编程过程中,尤其是在使用C#进行文件系统操作时,可能会遇到这样一个问题:当你尝试删除一个目录,系统返回“System.IO.IOException: 目录不是空的”错误。这意味着该目录下仍有文件或子目录存在,因此无法直接...
- 缺乏资源管理:在Java中,如果打开文件后没有正确关闭,文件描述符会持续占用资源,直到进程结束或被显式关闭。 2. **操作系统设置**: - 在Linux系统中,可以通过`ulimit -n`命令查看当前用户可打开的最大文件...
在JDK6版本中,Java默认仅支持40位和128位的密钥长度,对于更高安全性的需求,如256位的AES(高级加密标准)密钥,就会抛出此异常。这是出于美国出口法规的限制,旨在控制加密技术的出口。然而,为了使用更长的密钥...
Java中的`CharConversionException`是`IOException`的一个子类,主要在字符编码转换过程中遇到问题时抛出。在你的问题中,错误提示是"java.io.CharConversionException: isHexDigit",这通常意味着在处理字符或字符...
如下异常: 2012-12-31 8:59:21 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.io.IOException: Stream closed … 百思不得其解,翻出 jsp ...
java安装路径Java\jre\lib\security下替换这两个架包,即可解决 java.security.cert.CertificateException: Unable to initialize, java.io.IOException: Short read of DER length
在Eclipse集成开发环境(IDE)中使用ANT进行项目构建时,可能会遇到特定的错误提示:“Javadoc failed java.io.IOException Cannot run program javadoc”。这个错误信息表明在生成Java文档的过程中出现了问题,具体...
报错:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.-附件资源
针对java.io.IOException: entity content is too long [180278508] for the configured buffer limit [157286400]异常,将 DEFAULT_BUFFER_LIMIT修改为150M
5. **Email-Ext 插件**:发送构建结果通知,包括成功、失败或异常情况,支持自定义邮件模板。 6. **Blue Ocean 插件**:提供现代化的用户界面,使得 Pipeline 的创建和管理更为直观。 7. **Pipeline as Code 插件*...
Java.io.IOException: The same input jar [E:\Android\myProgram\angel\libs\alipaySdk-20160825.jar] is specified twice. 首先 看一下我项目中关于此jar的配置,我在libs中导入了alipaySdk-20160825.jar,
it.sauronsoftware.jave.EncoderException: java.io.IOException: Cannot run program "C:\Users\moxiao\AppData\Local\Temp\jave-1\ffmpeg.exe": CreateProcess error=740, 请求的操作需要提升。 在最新的liunx ...
21. `java.io.FileNotFoundException`:当尝试打开不存在的文件时抛出的异常。 22. `java.io.OutputStream`:OutputStream是所有字节输出流的基类。 23. `java.util.regex.Pattern`:Pattern类用于编译正则表达式...
java.io.IOException: Server returned HTTP response code: 403 for URL 处理过程记录 BASIC AUTH2 POST接口,解决403问题
Http-Multipart-Data-Parser-master,如需要http post接口开发、http post传文件等操作可以参考,源码的最原始地址忘记了,这个是从上面down下来新版,各位可参考
Android Build 时报错: java.io.IOException: Could not parse XML from android/accounts/annotati...Android构建时报错: app:lintVitalRelease[Fatal Error] :3:214: 与元素类型 “item” 相关联的 “name” ...
ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.io.IOException: Failed to set permissions of path: \tmp\hadoop-admin \mapred\local\ttprivate to 0700 at org.apache...
主要介绍了 AndroidApk混淆编译时,报告Error:Execution failed for task ‘:gviews:transformClassesAndResourcesWithProguardForRelease’.错误解决办法的相关资料,需要的朋友可以参考下
在Java编程环境中,进行串口通信时,常常会遇到一个问题:缺少`gnu.io`包,导致无法正常编译或运行程序。这个问题主要出现在使用RXTX库进行串口操作的项目中。RXTX是一个开源的Java库,它提供了与硬件进行串行通信的...