句柄过多导致SSH失败

现象描述

scp文件的时候,突然有一个节点拷贝失败了。以为免密被修改了,结果一问说原因是:句柄过多。

以前这种情况接触较少,就顺带查了一下资料。

句柄的定义

这个标题隐含的一个前提就是:句柄数是有一个上限的。

那什么是句柄,看看维基百科的定义:

A resource handle can be an opaque identifier, in which case it is often an integer number (often an array index in an array or “table” that is used to manage that type of resource), or it can be a pointer that allows access to further information. Common resource handles include file descriptors, network sockets, database connections, process identifiers
(PIDs), and job IDs. PIDs and job IDs are explicitly visible integers; while file descriptors and sockets (which are often implemented as a form of file descriptor) are represented as integers, they are typically considered opaque. In traditional implementations, file descriptors are indices into a (per-process) file descriptor table, thence a (system-wide) file table.

简单说,就是 对软件使用的资源一种抽象的引用。这里的资源可以是数据库链接、进程标识、文件描述符等等。

说实话,还是有一点晦涩。

再看看通俗点的解释:

句柄其实就是和你的身份证号码。

对象就比如你对象,句柄就好比你对象的手机号码,你不必时时刻刻关心你对象在哪里干嘛,你只要有需要的时候打ta电话就能找到,连释放的时候都可以一个电话说:我们分手了。

句柄就是个数字,一般和当前系统下的整数的位数一样,比如32bit系统下就是4个字节。
这个数字是一个对象的唯一标示,和对象一一对应。
这个对象可以是一个块内存,一个资源,或者一个服务的context(如 socket,thread)等等。

阿里的同学可以理解为抓手(笑)
最早的windows开发书籍,handle是被翻译成”把手”的。虽然不好听,但是个人认为相当传神。
1.虽然你握住的只是把手,却能拉动整扇门,而且你根本不用在意那门长什么样子
2.一扇门如果有多个把手,被不同的人(进程)握住,门往哪儿走就不好说了

也就是说,这玩意本身就是抽象出来的概念,简单的理解成 把手 就好了,不同平台用的东西也不太一样。

句柄不够引起的常见错误

不够用的时候一般报错:Can’t open so many files 或者 Two many open files。会导致一些功能无法使用,比方说SSH失败、无法创建链接。

因为本质上Linux里一切皆文件,想建链接就要再开一个文件,如果句柄不够用了,那就GG了。

查看句柄数的命令

那么,句柄数是多少呢?可以通过ulimit -n来查看单个进程能打开的最大文件句柄数量

wswang@DESKTOP-HITRQF5:~$ ulimit -n
1024

系统设置的最大文件句柄数可以通过配置来看

wswang@DESKTOP-HITRQF5:~$ more /proc/sys/fs/file-max
1048576

查看当前打开的句柄数

wswang@DESKTOP-HITRQF5:~$ lsof|awk '{print $2}'|wc -l
127

找到占用句柄最多的进程

wswang@DESKTOP-HITRQF5:~$ lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more
     30 8
     24 82
     23 78
     20 77
     17 80
     15 83
     13 81
     11 79
     10 1
      5 7
      1 PID

查看占用句柄最多的进程

wswang@DESKTOP-HITRQF5:~$ ps -ef | grep 8
wswang       8     7  0 09:56 tty1     00:00:00 -bash
wswang      84     8  0 16:22 tty1     00:00:00 ps -ef
wswang      85     8  0 16:22 tty1     00:00:00 grep --color=auto 8

修改句柄相关设置

修改之前,有几个参数的含义需要注意:

1. hard nofile(/etc/security/limits.conf)   可打开的文件描述符的最大数(超过会报错)
2. soft nofile(/etc/security/limits.conf)   可打开的文件描述符的最大数(超过会警告)
3. /proc/sys/fs/file-max    系统最多可以分配的文件句柄。
4. /proc/sys/fs/nr_open 单进程的最大句柄数限制。

这就意味着有大小关系: 3>4>1>2,修改设置的时候不能破坏这个关系

修改用户相关的配置,直接在配置文件里修改即可,一般修改 /etc/security/limits.conf 就好

*  soft  nofile  65536
*  hard  nofile  65536

随后注销后重新登录,执行 ulimit -a 使参数生效就好了。

修改系统的句柄限制,通过执行”echo 100000000 > /proc/sys/fs/file-max”命令来动态修改该值;也可以通过修改”/etc/sysctl.conf”文件来永久修改该值。

Original: https://www.cnblogs.com/wswang/p/16669375.html
Author: wswang
Title: 句柄过多导致SSH失败

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585785/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • php获取图片的主要颜色值RGB

    public function dominant_color() { $image = 'D:/Python/flow/test_photos/12240303_80d8…

    Linux 2023年6月7日
    0113
  • 记一次echo server出现的问题

    1. 我做了什么 最近在学习如何用select函数实现echo server。期间遇到了一个关于缓冲区的问题,在这里分享给大家。 在使用read/recv, write/send类…

    Linux 2023年6月7日
    097
  • CentOS7安装MYSQL8.X详细教程

    1-首先查看系统是否存在mysql,无则不返回 rpm -qa|grep mysql 2-安装wget yum -y install wget 3-抓取mariadb并删除包,无则…

    Linux 2023年5月27日
    080
  • Spring事务管理,声明式事务和编程式事务实现

    数据库操作过程中,对于增删改等操作,因为涉及到数据库状态的变更,为保证数据安全,需要进行事务管理;Spring事务管理有两种方式,即声明式事务管理和编程式事务管理; 连接池配置: …

    Linux 2023年6月16日
    0196
  • Linux 配置Java环境变量

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 注:目前在官网下载的时候需要登陆,这边分享一个账号,方便下载 账号:2696671285@qq.com密码:Ora…

    Linux 2023年6月14日
    083
  • 使用 Powershell 删除N天前的文件

    在 Linux 中删除N天前的文件可以使用以下命令: find /path/to -maxdepth 1 -name "filename" -mtime +1 …

    Linux 2023年6月14日
    078
  • Linux编译安装、压缩打包与定时任务服务

    一、编译安装 即使用源代码编译安装的方式,编译打包软件。特点: 可以自定制软件; 可以按需构建软件; 编译安装案例 1、下载源代码包(这里以Nginx软件包源代码为例) wget …

    Linux 2023年5月27日
    090
  • 青春浙江微信平台如何退出?如何重新登录?微信如何清除浏览器缓存,如何清除浏览器cookies?

    青春浙江不能退出重新登录,有同学可能寻找解决方法,给大家贴出来:bug 解决办法:1. debugmm.qq.com/?forcex5=true 打开调试2. http://deb…

    Linux 2023年5月27日
    089
  • docker:nginx+confd动态生成配置

    docker:nginx+confd动态生成配置当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦而且可能出错的事情。我们可以通过 nginx+confd+&#…

    Linux 2023年6月13日
    075
  • Arrays.binarySearch方法

    Arrays .binarySearch(int[] arr,int b) 1,数组arr必须排序后调用查找b在arr数组中的下标是多少。 2,存在:返回在数组中的下标 不存在:返…

    Linux 2023年6月8日
    070
  • [ Shell ] 通过 Shell 脚本导出 CDL 网表

    通过 si 导出电路网表,实际上在 Virtuoso 中通过菜单 File – Export – CDL 和 Calibre LVS 中 Export fr…

    Linux 2023年6月7日
    0150
  • CTF中的一些图形密码

    1.传统猪圈密码 猪圈密码又称为亦称朱高密码、共济会暗号、共济会密码或共济会员密码;是一种以特定符号来替换字母的加密方式在线解密网址:http://moersima.00cha.n…

    Linux 2023年6月6日
    0116
  • cpp-变量

    1.枚举类型 枚举类型是用户自定义的类型,在定义时要列举出该枚举类型所有的数值。 定义格式如下: [enum] enumName {val1, val2, val3} 其中的通常为…

    Linux 2023年6月7日
    096
  • 1.2

    数字信号为什么不能远程传播?高频率->传的短 容易被干扰 答案是可以的。 数字信号传输编码的目的:保证数据传送的可靠性 数据传输的关键指标: 延迟和吞吐量 posted @2…

    Linux 2023年6月6日
    091
  • 如何解决 QMediaPlayer 占用歌曲导致 PermissionError: [Error 13] 的问题

    问题描述 当我们使用 QMediaPlayer 播放歌曲时,歌曲文件的句柄会被占用。如果想使用 mutagen 库对正在播放地歌曲进行数据写入,就会出现下述问题: Tracebac…

    Linux 2023年6月7日
    090
  • [云原生]Kubernetes-集群搭建(第2章)

    一、前置知识点 二、kubeadm部署方式介绍 三、安装要求 四、最终目标 五、准备环境 六、环境初始化 6.1 设置系统主机名以及Hosts文件的相互解析 6.2 安装依赖文件(…

    Linux 2023年6月13日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球