Linux - 复盘一次句柄数引发的故障

news2024/11/28 4:50:28

文章目录

  • Pre
  • (内核、用户、进程)句柄数设置
  • 问题 shell
  • 修复

在这里插入图片描述


Pre

Linux - 深入理解/proc虚拟文件系统:从基础到高级


(内核、用户、进程)句柄数设置

在Linux系统中,进程打开的最大句柄数可以通过多种方式配置,涉及不同的层次和持久性:

  1. 临时调整

    • 使用ulimit命令可以在当前shell会话中临时调整用户进程的打开文件描述符的软限制(soft limit)。例如:
      ulimit -n 65536
      
    • 若要调整硬限制(hard limit),需要超级用户权限:
      sudo ulimit -Hn 65536
      
  2. 永久性调整

    • /etc/security/limits.conf:这个文件可以用来永久性地设置用户和组的资源限制,包括打开的文件描述符数。格式如下:
      * soft nofile 65536
      * hard nofile 65536
      
      其中*表示所有用户,可以替换为具体的用户名或用户组。softhard分别表示软限制和硬限制。

在这里插入图片描述

  1. 系统全局限制
    • /proc/sys/fs/file-max:这个文件反映了系统全局可打开的文件描述符总数。调整这个值需要修改内核参数,通常需要重启系统才能生效。在/etc/sysctl.conf中添加以下行可以实现:
      fs.file-max = 6553560
      
      然后运行sysctl -p使更改生效,或者在系统启动时自动应用。

在这里插入图片描述

请记住,修改这些设置可能会影响系统性能和稳定性,特别是在提高限制时,可能会消耗更多的系统资源。因此,在进行任何更改之前,最好先评估其影响,并确保有足够的资源来支持增加的句柄数。


问题 shell

#!/bin/bash
source /etc/profile
CURPATH=$(cd "$(dirname "$0")";pwd)
JVM=$(cat $CURPATH/xxx.ini)

artisanProcess="$CURPATH/artisan.jar"

# now set the path to java
# [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
# [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
# [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/appstore/programfiles/mbws_jdk
# [ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME


source /xxxx/xxxjdk.option
COMMON_JVM=$(cat /axxxx/xdded.option)

if [ -f $JAVA/bin/java ];then
  export JAVA_HOME=$JAVA
  export PATH=$JAVA_HOME/bin:$PATH
fi

if [ -z "$JAVA_HOME" ]; then
  JAVA_PATH=`dirname $(readlink -f $(which java))`
  if [ "x$JAVA_PATH" != "x" ]; then
      export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null`
  fi
  if [ -z "$JAVA_HOME" ]; then
        error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!"
        exit 1
  fi
fi

while [ 1 -eq 1 ]
do
        AdminProcNum=`ps -ef | grep $rpcProcess | grep -v grep | wc -l`
        echo "AdminProcNum:"$AdminProcNum
        if [ $AdminProcNum -lt 1 ]
        then
                cd $CURPATH
                sudo sysctl -w fs.file-max=999999
                sudo sysctl -w net.ipv4.tcp_tw_reuse=1
                sudo sysctl -w net.ipv4.tcp_fin_timeout=15
                sudo sysctl -w net.core.netdev_max_backlog=4096
                sudo sysctl -w net.core.somaxconn=40960
                sudo sysctl -w net.ipv4.tcp_max_syn_backlog=40960
                sudo sysctl -w net.ipv4.tcp_syncookies=1
                sudo sysctl -w net.ipv4.tcp_syn_retries=2
                sudo sysctl -w net.ipv4.tcp_synack_retries=2
                sudo ulimit -u 999999
                sudo ulimit -n 999999
                nohup $JAVA/bin/java $JVM $COMMON_JVM -jar $artisanProcess >  /dev/null 2>&1 &
                cho $! > $CURPATH/tpid
                cd -
        fi
        sleep 10
done

为了至此降权操作,增加了sudo

 sudo sysctl -w fs.file-max=999999
 sudo sysctl -w net.ipv4.tcp_tw_reuse=1
 sudo sysctl -w net.ipv4.tcp_fin_timeout=15
 sudo sysctl -w net.core.netdev_max_backlog=4096
 sudo sysctl -w net.core.somaxconn=40960
 sudo sysctl -w net.ipv4.tcp_max_syn_backlog=40960
 sudo sysctl -w net.ipv4.tcp_syncookies=1
 sudo sysctl -w net.ipv4.tcp_syn_retries=2
 sudo sysctl -w net.ipv4.tcp_synack_retries=2
 sudo ulimit -u 999999
 sudo ulimit -n 999999

导致ulimit -n 999999 不生效

cat /proc/$pid/limits

在这里插入图片描述


修复

方式一: 去掉sudo

方式二: 如下

在这里插入图片描述

对于系统服务,特别是使用 Systemd 的系统,还可以在服务单元文件(位于 /etc/systemd/system/ 或 /lib/systemd/system/)中通过 LimitNOFILE= 设置最大打开文件数。例如:

[Service]
LimitNOFILE=999999

在这里插入图片描述

修改配置文件后,可能需要重启相关服务或用户会话使设置生效。如果是修改了 /etc/security/limits.conf,通常需要用户重新登录才能看到变化。对于 Systemd 管理的服务,则需执行 systemctl daemon-reload 后重启服务。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1816078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0605 实际集成运算放大器的主要参数和对应用电路的影响

6.5.1 实际集成运放的主要参数 6.5.2 集成运放应用中的实际问题 6.5.2 集成运放应用中的实际问题

【启程Golang之旅】网络编程与反射

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt

《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有比较两种比较新的流媒体协议,分别是SRT和RIST。 其中SRT全称为Secure Reliable Transport&#xf…

微信小程序毕业设计-驾校管理系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

WEB基础--Mybatis

了解Mybatis 什么是Mybatis 市面上最流行的技术架构:SSM 他们代表了 Spring业务层框架,SpringMvc WEB层框架以及MyBatis数据库持久层框架。 MyBatis 作为一个数据库持久层框架,是基于ORM规范(对象关系映射) 。类似我们以前的JDBC 和 JPA。…

【目标检测】基于深度学习的车牌识别管理系统(含UI界面)【python源码+Pyqt5界面 MX_002期】

系统简介: 车牌识别技术作为经典的机器视觉任务,具有广泛的应用前景。通过图像处理方法,车牌识别技术能够对车牌上的字符进行检测、定位和识别,从而实现计算机对车牌的智能化管理。在现实生活中,车牌识别系统已在小区停…

第二届京津冀现代商贸物流金融创新发展百人大会将于6月16日在廊坊举行

物流是实体经济的“筋络”,联接生产和消费、内贸和外贸,必须有效降低全社会物流成本,增强产业核心竞争力,提高经济运行效率。《京津冀协同发展规划纲要》赋予河北“三区一基地”的功能定位,建设全国现代商贸物流重要基…

vxeTable怎么导出excel文件

文章目录 一、代码示例二、调用导出事件参数详解下载引用 三、过滤某列数据导出 一、代码示例 <vxe-buttonclick"exportDataEvent"circleicon"vxe-icon-download">导出</vxe-button><vxe-tableborderroundstripeheight"auto"ref&…

融合商品计划与供应链管理:打造高效协同供应链生态

在当今竞争激烈的市场环境中&#xff0c;企业要想保持持续的竞争优势&#xff0c;除了拥有创新的产品和服务外&#xff0c;还需要具备高效协同的供应链管理能力。本文将探讨如何将商品计划与供应链管理紧密结合&#xff0c;以打造高效协同的供应链生态&#xff0c;从而提升企业…

3d模型转换器怎么用?---模大狮模型网

在当今数字化时代&#xff0c;3D技术被广泛应用于各行各业&#xff0c;从动画制作到工程设计再到游戏开发&#xff0c;都离不开3D模型。然而&#xff0c;由于不同软件之间的兼容性问题&#xff0c;我们常常需要将一个格式的3D模型转换成另一个格式。在这种情况下&#xff0c;3D…

CMA、CNAS软件检测报告如何收费?软件测评中心出具报告需多久?

众所周知&#xff0c;各行各业都需要资质认证&#xff0c;正如教师会有教师资格证&#xff0c;医师会有医师资格证&#xff0c;律师会有律师证&#xff0c;软件产品亦如此。对于软件测试报告来说CMA和CNAS资质认证就是获得行业甚至国家认可的重要依据。 CMA和CNAS软件检测报告…

ant组件库日期选择器汉化

ant组件库日期选择器默认英文 如何汉化 跟着官网走不能完全实现汉化。 这里提供一个解决方案&#xff0c;首先&#xff0c;通过pnpm下载moment包。 然后引入和注册文件&#xff1a; import zhCN from ant-design-vue/es/locale/zh_CN;import moment from moment;moment.loca…

导出 Whisper 模型到 ONNX

前言 在语音识别领域&#xff0c;Whisper 模型因其出色的性能和灵活性备受关注。为了在更多平台和环境中部署 Whisper 模型&#xff0c;导出为 ONNX 格式是一个有效的途径。ONNX&#xff08;Open Neural Network Exchange&#xff09;是一个开放格式&#xff0c;支持不同的深度…

Adobe Premiere 专业视频编辑软件资源下载安装!pr 2024最新版软件分享

Adobe Premiere&#xff0c;作为一款非线性视频编辑软件&#xff0c;它打破了传统线性编辑的限制&#xff0c;为用户提供了更加灵活和自由的创作空间。 在电影制作领域&#xff0c;Adobe Premiere的出色表现赢得了众多导演和剪辑师的青睐。其强大的编辑功能使得影片的剪辑过程更…

单细胞RNA测序(scRNA-seq) 理解Seurat对象存储信息含义和基本操作

单细胞测序技术是在单个细胞水平上&#xff0c;对基因组、转录组和表观基因组水平进行分析测序技术。bulk RNA-seq获得的是组织或器官等大量细胞中表达信号的均值&#xff0c;无法获取细胞之间的差异信息&#xff08;即丢失了细胞的异质性&#xff09;&#xff0c; 而单细胞测序…

快速上手 GreatSQL 8.0.32-25 with openEuler 24.03 LTS

5 月底&#xff0c;openEuler 24.03 LTS 发布&#xff0c;详情戳&#xff1a; 恭喜&#xff01;openEuler 24.03 LTS 版本发布&#xff1a;首个AI原生开源操作系统 在诸多亮点特性中&#xff0c;有一条值得注意&#xff1a; 集成 GreatSQL 数据库&#xff0c;适用于金融级应用场…

JAVA面试题:Redis分布式锁

Redis分布式锁 分布式锁使用的场景 集群情况下的定时任务,抢单,幂等性等场景 抢券场景 查询库存 -> 扣减库存 多个并发线程同时查询库存,出现超卖问题 添加互斥锁 所有线程执行操作之前必须尝试获取锁 保证一次只有一个线程能走查询库存->扣减库存的流程 Redis分…

模糊控制器实现对某个对象追踪输入

MATLAB是一个十分便捷的软件&#xff0c;里面提供了许多集成的组件&#xff0c;本文利用simulink实现模糊控制器实现对某个对象追踪输入。 这里的对象根据自己的需求可以修改&#xff0c;那么搭建一个闭环控制系统并不是难事儿&#xff0c;主要是对于模糊控制器参数的设置&…

记C#优化接口速度过程

前提摘要 首先这个项目是接手的前一任先写的项目&#xff0c;接手后&#xff0c;要求对项目一些速度相对较慢的接口进行优化&#xff0c;到第一个速度比较慢的接口后&#xff0c;发现单接口耗时4-8秒&#xff0c;是的&#xff0c;请求同一个接口&#xff0c;在参数不变的情况下…

【Linux】运维-Kubernetes(k8s)应用介绍及使用-了解

一、介绍 Kubernetes&#xff0c;也被称为K8s或Kube&#xff0c;是谷歌推出的业界最受欢迎的容器编排器。 K8s是一个架构良好的分布式系统的例子。它将集群中的所有机器都视为单个资源池的一部分。 K8s与其他成熟的分布式系统一样&#xff0c;有两层&#xff1a;头节点和工作节…