tuxedo + c 出现fopen偶尔出错

发布于 2022-08-06 19:28:53 字数 178 浏览 8 评论 2

系统中有N个服务,每个的都有操作文件,如:
fp=fopen(lrs_filename,"w")
偶然情况下 一个服务中的 fp=fopen(lrs_filename,"w") 会报错,语句肯定没问题。
一般停掉服务后,重启就OK了。
出现这种情况会有什么可能性呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

杀お生予夺 2022-08-13 14:15:32

找bug,可能某个分支tpreturn退出没fclose,文件个数超过系统限制,会core。

“最大数限制是否过小”
例如hp-ux文件数可以2048,够用了。

你可以配置多个server,core掉其中一个,还有服务在,系统会自动重启server。

疧_╮線 2022-08-12 14:12:29

应该是打开文件描述符过多引起的.可能两个原因:

1) 你的应用代码是是否有fopen()对应的 fclose() ? 若有的话,是否在 fopen()执行之后,fclose()肯定能够执行得到?
   解决办法:  检查代码,看看在 tpreturn()之前,是否 fclose()肯定会执行到? 若没有,则加上相应的代码.
      
2) 你的系统的打开文件的最大数限制是否过小? 若你的服务并发数较大,可能会在某一时刻达到最大数限制,引起你上面描述的错误.
   解决办法: 更改系统的打开文件数最大限制;(具体参考各个操作系统)
   可以看一下: http://www.linuxdiyf.com/bbs/thread-107204-1-1.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文