tuxedo + c 出现fopen偶尔出错
系统中有N个服务,每个的都有操作文件,如:
fp=fopen(lrs_filename,"w")
偶然情况下 一个服务中的 fp=fopen(lrs_filename,"w") 会报错,语句肯定没问题。
一般停掉服务后,重启就OK了。
出现这种情况会有什么可能性呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
找bug,可能某个分支tpreturn退出没fclose,文件个数超过系统限制,会core。
“最大数限制是否过小”
例如hp-ux文件数可以2048,够用了。
你可以配置多个server,core掉其中一个,还有服务在,系统会自动重启server。
应该是打开文件描述符过多引起的.可能两个原因:
1) 你的应用代码是是否有fopen()对应的 fclose() ? 若有的话,是否在 fopen()执行之后,fclose()肯定能够执行得到?
解决办法: 检查代码,看看在 tpreturn()之前,是否 fclose()肯定会执行到? 若没有,则加上相应的代码.
2) 你的系统的打开文件的最大数限制是否过小? 若你的服务并发数较大,可能会在某一时刻达到最大数限制,引起你上面描述的错误.
解决办法: 更改系统的打开文件数最大限制;(具体参考各个操作系统)
可以看一下: http://www.linuxdiyf.com/bbs/thread-107204-1-1.html