错误日志中出现"打开的文件特别多:文件系统拒绝提供服务“的错误信息_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4496 | 回复: 0   主题: 错误日志中出现"打开的文件特别多:文件系统拒绝提供服务“的错误信息        下一篇 
yanpeng
注册用户
等级:上等兵
经验:127
发帖:68
精华:0
注册:2011-12-26
状态:离线
发送短消息息给yanpeng 加好友    发送短消息息给yanpeng 发消息
发表于: IP:您无权察看 2011-12-26 13:07:29 | [全部帖] [楼主帖] 楼主

适用于:

Oracle HTTP Server –版本: 10.1.2.0.2 到 10.1.3.5.0 – 发行版本: AS10gR2 到 AS10gR3

Oracle Solaris on SPARC (64-bit)
Oracle Solaris on x86-64 (64-bit)
Oracle Solaris on SPARC (32-bit)
Sun Solaris SPARC (64-bit)
Sun Solaris x86-64 (64-bit)
Sun Solaris SPARC (32-bit)
Solaris Operating System (SPARC) (64-bit)
Solaris Operating System (x86-64)
HTTP Server


问题描述:

    当用httpd.conf文件指定的文档权限尝试访问静态网页时Apache/Apache/logs/error_log文件中有错误信息:

[error] [client 138.77.23.156] [ecid: 1090701619555, 1] (24)打开的文件特多:文件权限拒绝服务使用/usr/local/oracle/product/oas/10.1.2.0.2/Apache/Apache/htdocs/index.html.en 
[error] [client 138.77.23.156] [ecid: 72058839358375268,2] (24) 打开的文件特多:文件权限拒绝服务使用/usr/local/oracle/product/oas/10.1.2.0.2/Apache/Apache/htdocs/index. html.en

浏览器上会出现http403禁止访问

原因

Solaris 操作系统只允许打开256个标准输入输出流, 而文件描述符却小于256.因此应用程序在处理大量fopen()请求时很快就会用完这些文件描述符。对32位机的应用程序来说,扩大这个限制还是不可行的,因为这样会导致程序出现兼容性问题(在SunOS 4.x以后兼容性已经不再是问题了)。文件句柄dup被用来处理大于256的文件描述符,以此来为fopen释放资源. 但是程序的标准输入输出流最大值仍然被限制为256.如果用尽了这些文件描述符将导致前面提到的错误。 

解决方案

1) 确保操作系统配置文件/etc/system设定的资源限制允许如下:
* 设置硬限制值(rlim_fd_max) 和软限制值 (rlim_fd_cur)以此允许进程并发处理多于1024的文件描述符

set rlim_fd_max=2048
set rlim_fd_cur=1536


* rlim_fd_cur 是"ulimit" 的值 , 可以使用命令 "ulimit -n" 查看其值
2) 通过命令 "opmnctl" 和"dcmctl" 来检查文件最多打开数目

以下命令为"nofiles(descriptors)"设定了一个足够大的值:

% ulimit -a
time(seconds) unlimited
file(blocks) unlimited
data(kbytes) unlimited
stack(kbytes) unlimited
coredump(blocks) unlimited
nofiles(descriptors) 1536
vmemory(kbytes) unlimited


3) 重新测试一遍,检查错误是否还存在.
4)如果仍然有错误,那么请做如下修改:

a) 使目录中包含默认的 "opmnctl" 脚本并且备份:

% cd $ORACLE_HOME/opmn/bin/opmnctl
% cp opmnctl opmnctl.orig


b) 使用适当的编辑器比如vi 或emacs编辑默认的"opmnctl" 脚本,将ulimit -n 1024 
替换为         

MAX_FILE_DES=`ulimit -n`
if [ "${MAX_FILE_DES}" -lt "1024" ]
then
ulimit -n 1024
fi


c) 保存到"opmnctl" 文件.

5) 如果以上修改后仍然出现错误那么请加上以下几行到apachectl 脚本.

ulimit -n 3000
LD_PRELOAD_32=/usr/lib/extendedFILE.so.1 ; export LD_PRELOAD_32


以上apachectl 脚本的修改是 Solaris 10操作系统的一个重要应用.




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论