打开的文件过多 Cloud Foundry 中的错误

Too many open files Error in Cloud Foundry

提问人:Kumar 提问时间:5/22/2023 更新时间:6/8/2023 访问量:122

问:

我有一个java(基于tomcat / spring)的云多租户应用程序,它运行在Cloud Foundry上,它使用云数据库。我们用于连接池,每个租户最多 8 个连接。我们在 中配置了 60 秒的最大等待时间。我们在任何给定时间缓存 300 个租户的连接。tomcat jdbctomcat jdbc

最近我们遇到了错误。Too many open files

当我们检查时,我们有一些有趣的发现:lsof

  1. 输出中的每个 jar 有 191 个条目。这是否意味着正在为每个请求打开 jar 文件?lsof
  2. 状态中有许多套接字连接(到 Cloud Database 和 Load Balancer - 在某些调用中,我们有一个对另一个微服务的 http 调用)。CLOSE_WAIT

我们进一步检查了我们的 dynatrace,发现以下内容:

  1. 我们有一些调用在 10 分钟后(重新连接或验证)期间因管道损坏错误而失败。我不确定为什么没有得到尊重,插座是在断管后关闭的。getConnectionborrowConnectionmax wait
  2. 最终和(不知道,为什么再次加载 jar)开始失败并出现错误。getConnectionjar loadingToo many open files

我们也没有看到任何连接泄漏,因为它会导致不是当前的连接泄漏。PoolExhaustedException

关于出了什么问题的任何想法/提示?

Java Cloud-Foundry 文件句柄 Resource-Leak

评论

0赞 Daniel Mikusa 5/23/2023
很难说到底发生了什么,但除非你的应用正在做一些特别需要磁盘的东西,否则“打开的文件太多”通常意味着打开的网络连接太多。Linux 也将它们视为“文件”,因此开放的网络连接将计入限制。看 ,它有一个部分,它会告诉你你的应用程序实例可以有多少个打开的文件。我无法与您的环境交谈,但通常有数千个,因此几百个数据库连接或打开的 jar 文件通常只占总数的一小部分。VCAP_APPLICATIONlimits
0赞 Daniel Mikusa 5/23/2023
您是否期望您的应用程序非常繁忙?如果它有大量流量,您可能刚刚达到需要扩展和添加更多实例的地步。每个实例都有自己的文件限制,因此您可以通过添加更多实例来扩展最大打开文件数。
0赞 Kumar 5/23/2023
@DanielMikusa:我通过在应用程序上做ssh来检查。限制为 ~32000。我们已经进行了扩展。该应用至少有 3 个实例,最多有 6 个实例。
0赞 Kumar 5/23/2023
@DanielMikusa:访问数据库泄漏文件时管道破裂错误可以处理吗?
0赞 Daniel Mikusa 5/23/2023
我建议跑步看看.进入容器时,环境并不总是与运行应用的环境相同。我不知道这是否会影响您检查限制的方式,但我知道报告的内容始终是正确的。cf envVCAP_APPLICATIONcf sshVCAP_APPLICATION

答: 暂无答案