解决接口调用报错newSocketStream(..)failed:Too many open files问题

 更新时间:2024年07月10日 09:33:59   作者:.猫的树  
这篇文章主要介绍了解决接口调用报错newSocketStream(..)failed:Too many open files问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题描述

在调用微服务接口时,出现报错

newSocketStream(..) failed: Too many open files

具体错误信息如下:

原因分析

报错字面意思是程序打开的文件数过多

程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。

第一时间想到的是程序异常报错,进程未正常结束或者请求次数异常增大,但是实际上这些情况并未发生。

接着只能求助于网上的大神,查询问题,基本上都是说句柄数超出系统限制

解决方案

于是按照网上的解决方法操作:

  • 先查看进程描述符ulimit -a
  • 查看当前系统打开的文件数量lsof | wc -l
  • 查看某一进程的打开文件数量lsof -p pid | wc -l
  • 增大允许打开的文件数ulimit -n 1024000

增大允许打开的文件数:

1.临时(重启后失效): ulimit -n 1024000(非root用户限制到4096)

2.永久生效(需要重启)vim /etc/security/limits.conf #在最后加入 * soft nofile 1024000 * hard nofile 1024000

在查看当前系统打开的文件数量,出现问题

出现这个问题的情况 ,一般有两种:

  • 系统中有容器在运行该进程
  • 启动进程后,删除了相关进程的文件,导致进程异常

到这里我其实已经发现问题似乎不是这个,再次查询程序进程打开文件数量,发现只有5个,确定不是应用程序文件打开过多的问题。

网上查询也实在没有啥好的解决方法(重启程序也试过了)

后面我查询运行程序的时候,发现了用户问题,有的是root启动的,有的又是非root用户

而报错的程序就是root用户启动的,于是怀着试一试的心态,将程序改为非root用户启动,结果接口访问成功了!!!!

总结

虽然问题解决了,但是我也是云里雾里的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java基于dom4j包实现对XML解析的方法

    java基于dom4j包实现对XML解析的方法

    这篇文章主要介绍了java基于dom4j包实现对XML解析的方法,结合实例形式分析了java针对xml格式数据的相关解析操作实现技巧,需要的朋友可以参考下
    2017-05-05
  • Java中子类调用父类构造方法的问题分析

    Java中子类调用父类构造方法的问题分析

    本篇文章介绍了,Java中子类调用父类构造方法的问题分析。需要的朋友参考下
    2013-04-04
  • 使用SpringEvent解决WebUploader大文件上传解耦问题

    使用SpringEvent解决WebUploader大文件上传解耦问题

    Spring Event是Spring框架内建的一种发布/订阅模式的实现,它允许应用内部不同组件之间通过事件进行通信,本文以WebUploader大文件上传组件为例,在大文件处理的场景中使用SpringEvent的事件发布机制,灵活的扩展对文件的处理需求,需要的朋友可以参考下
    2024-07-07
  • SpringBoot在容器中创建实例@Component和@bean有什么区别

    SpringBoot在容器中创建实例@Component和@bean有什么区别

    这篇文章主要介绍了SpringBoot在容器中创建实例@Component和@bean有什么区别,在Spring Boot中,@Component注解和@Bean注解都可以用于创建bean。它们的主要区别在于它们的作用范围和创建方式
    2023-03-03
  • 如何用Java将数据库的数据生成pdf返回给前端用户下载

    如何用Java将数据库的数据生成pdf返回给前端用户下载

    本文详细介绍了使用SpringBoot、iText库、MyBatis等技术从数据库中选取数据并生成PDF文件的后端处理流程,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • Javaweb基础入门HTML之table与form

    Javaweb基础入门HTML之table与form

    HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等
    2022-03-03
  • Java性能优化技巧汇总

    Java性能优化技巧汇总

    这篇文章主要介绍了Java性能优化技巧,汇总了提升java程序性能的常用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 基于JAVA文件中获取路径及WEB应用程序获取路径的方法

    基于JAVA文件中获取路径及WEB应用程序获取路径的方法

    下面小编就为大家带来一篇基于JAVA文件中获取路径及WEB应用程序获取路径的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java中两种抛出异常的方式示例详解

    Java中两种抛出异常的方式示例详解

    在Java中有两种抛出异常的方式,一种是throw,直接抛出异常,另一种是throws,间接抛出异常,本文给大家详细说明java中两种抛出异常的方式,感兴趣的朋友一起看看吧
    2023-08-08
  • springboot项目接入第三方qq邮箱验证登录的全过程

    springboot项目接入第三方qq邮箱验证登录的全过程

    互联网发展到现在,相必大家都知道发送邮件应该是网站的必备功能之一,下面这篇文章主要给大家介绍了关于springboot项目接入第三方qq邮箱验证登录的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04

最新评论