Linux运维:ulimit命令修改打开文件的句柄数

2024-05-28 23:48

本文主要是介绍Linux运维:ulimit命令修改打开文件的句柄数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • ulimit命令语法
    • 参数说明:
    • 查看本机设置的参数:
  • ulimit修改打开文件的句柄数
    • 场景
    • 解释:
    • 修改
      • 1.修改file-max
      • 2.修改ulimit的open file
    • 注意事项
      • daemon进程无效
      • 服务已启动动态调整无效

ulimit命令语法

ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]

参数说明:

参数英文说明中文解释
-aall显示目前资源限制的设定。
-ccore file size<core文件上限>设定core文件的最大值,单位为区块。
-ddata seg size<数据节区大小> 程序数据节区的最大值,单位为KB。
-ffile size<文件大小>  shell所能建立的最大文件,单位为区块。
-Hhard设定资源的硬性限制,管理员设置的上限。
-Ssoft软设定资源的弹性限制,小于hard设置的上限。
-mmax locked memory设置内存中一些对程序性能影响较大的数据lock,指定可使用内存的上限,单位为KB。
-mmax memory size<内存大小>  指定可使用内存的上限,单位为KB。
-nopen files<文件数目>  指定同一时间最多可开启的文件数。
-ppipe size<缓冲区大小>  指定管道缓冲区的大小,单位512字节。
-sstack size<堆栈大小>  指定堆栈的上限,单位为KB。
-tcpu time<CPU时间>  指定CPU使用时间的上限,单位为秒。
-umax user processes<程序数目>  用户最多可开启的程序数目。
-vvirtual memory<虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

查看本机设置的参数:

[root@hadoop-master 2477]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7146
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 102400
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7146
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ulimit修改打开文件的句柄数

场景

linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够。这就需要修改ulimit和file-max。特别是提供大量静态文件访问的web服务器,缓存服务器(如squid), 更要注意这个问题。
网上的教程,都只是简单说明要如何设置ulimit和file-max, 但这两者之间的关系差别,并没有仔细说明

解释:

1. file-max
man proc,可得到file-max的描述:/proc/sys/fs/file-max
This file defines a system-wide limit on the number of open files for all processes. (See
also setrlimit(2), which can be used by a process to set the per-process limit,
RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages
about running out of file handles, try increasing this value:
即file-max是设置 系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。
也就是说,这项参数是系统级别的。2. ulimit
Provides control over the resources available to the shell and to processes started by it, on systems that allow such control.
即设置当前shell以及由它启动的进程的资源限制。
显然,对服务器来说,file-max, ulimit都需要设置,否则就可能出现文件描述符用尽的问题

修改

1.修改file-max

# echo  102400 > /proc/sys/fs/file-max 
# sysctl -w "fs.file-max=102400",前面2种重启机器后会恢复为默认值
# vim /etc/sysctl.conf, 加入以下内容,重启生效
fs.file-max=102400
net.nf_conntrack_max=1024000
net.netfilter.nf_conntrack_max=1024000

2.修改ulimit的open file

系统默认的ulimit对文件打开数量的限制是1024
方式一(临时修改,推出后恢复默认值):

# ulimit -HSn 102400  //这只是在当前终端有效,退出之后,open files又变为默认值。当然也可以写到/etc/profile中,因为每次登录终端时,都会自动执行/etc/profile

方式二(永久修改,需要重启主机):

# vim /etc/security/limits.conf  //加入以下配置,重启即可生效
* hard nofile 102400
* soft nofile 102400

按照第二种方式重启后,再看,发现句柄数已经改变了

[root@hadoop-master 2477]# ulimit -n
102400

注意事项

daemon进程无效

为了让一个程序的open files数目扩大,可以在启动脚本前面加上ulimit -HSn 102400命令。但当程序是一个daemon时,可能这种方法无效,因为没有终端。

服务已启动动态调整无效

如果某项服务已经启动,再动态调整ulimit是无效的,特别是涉及到线上业务就更麻烦了。
这时,可以考虑通过修改/proc/’程序pid’/limits来实现动态修改!!!(笔者通过VIM修改后报没有权限,目前无法通过这种方式修改),可以通过启动前修改的方式达到修改的目的。
例如:首先修改本地的打开文件数,从2048修改为1024

[root@hadoop-master shell-asy]# ulimit -n 
2048
[root@hadoop-master shell-asy]# ulimit -n 1024
[root@hadoop-master shell-asy]# ulimit -n
1024

然后启动服务,并查看ulimit参数

[root@hadoop-master shell-asy]# nohup sh start-syn.sh &
[2] 4542
[root@hadoop-master shell-asy]# nohup: 忽略输入并把输出追加到"nohup.out"[root@hadoop-master shell-asy]# cat /proc/4542/limits
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             7146                 7146                 processes 
Max open files            1024                 1024                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       7146                 7146                 signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us  

发现我们需要修改的文件句柄数已经修改了
句柄数修改

这篇关于Linux运维:ulimit命令修改打开文件的句柄数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012044

相关文章

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Linux修改pip临时目录方法的详解

《Linux修改pip临时目录方法的详解》在Linux系统中,pip在安装Python包时会使用临时目录(TMPDIR),但默认的临时目录可能会受到存储空间不足或权限问题的影响,所以本文将详细介绍如何... 目录引言一、为什么要修改 pip 的临时目录?1. 解决存储空间不足的问题2. 解决权限问题3. 提