unlimited

更新时间:2022-12-31 22:49:20 阅读: 评论:0


2022年12月31日发(作者:北京物资学院怎么样)

[Linux]常⽤命令之【ulimit(资源限制)】

0常见问题

[WARN]2018-06-1516:55:20,831--NewI/Orverboss#1([id:0x55007b59,/0.0.0.0:20880])--[verSocketPipelineSink][DUBBO]Failedtoacceptaconnection.,dubboversion:2.8.3.2,currenthost:12

ption:Toomanyopenfiles(打开⽂件数过多)

0(NativeMethod)~[na:1.7.0_09-icedtea]

(:226)~[na:1.7.0_09-icedtea]

verSocketPipelineSink$(:244)~[:na]

ker(:1110)[na:1.7.0_09-icedtea]

PoolExecutor$(:603)[na:1.7.0_09-icedtea]

(:722)[na:1.7.0_09-icedtea]

Toomanyopenfiles这个问题主要指的是进程企图打开⼀个⽂件,或者叫句柄,但是现在进程打开的句柄已经达到了上限,已经⽆法打开新句柄了。

常见的原因:(参考lsof的type属性)

1)⽂件IO流未及时关闭:⽂件夹、【⽂件】等

2)⽹络IO流未及时关闭:【TCP】/UDP/【Socket】/WebSocket/数据库连接等

1ulimit概述

在linux下⼀切皆⽂件,开启⼀个进程就是打开⼀个⽂件,控制ulimit⼤⼩作⽤等同于限制进程及其⼦进程的资源使⽤

1.1概述

系统性能⼀直是⼀个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作?

ulimit是Linux在处理这些问题时,经常使⽤的⼀种简单⼿段。

ulimit是⼀种Linux系统的内建功能,它具有⼀套参数集,⽤于为由它⽣成的shell进程及其⼦进程的资源使⽤设置限制。

ulimit:显⽰(或设置)⽤户可以使⽤的资源的限制(limit),这限制分为【软限制(当前限制)】和【硬限制(上限)】。

其中:硬限制是软限制的上限值,应⽤程序在运⾏过程中使⽤的系统资源不超过相应的软限制,任何的超越都导致进程的终⽌。

ulimit不限制⽤户可以使⽤的资源,但可设置对可打开的最⼤⽂件数(maxopenfiles)和可同时运⾏的最⼤进程数(maxurprocess)等限制。

Exception:Toomanyopenfiles

-bash:fork:retry:没有⼦进程

ulimit⽤于限制shell进程/程序所占⽤的资源,⽀持以下资源类型的限制:

所创建的内核⽂件的⼤⼩

进程数据块的⼤⼩

Shell进程创建⽂件的⼤⼩

内存锁住的⼤⼩

常驻内存集的⼤⼩

打开⽂件描述符的数量(maxopenfiles)

分配堆栈的最⼤⼤⼩

CPU时间

单个⽤户的最⼤线程数

Shell进程所能使⽤的最⼤虚拟内存

同时,它⽀持对【硬资源】和【软资源】的限制

作为临时限制,ulimit可以作⽤于通过使⽤其命令登录的shell会话,在会话终⽌时便结束限制,并不影响于其他shell会话。

⽽对于长期的固定限制,ulimit命令语句⼜可以被添加到由登录shell读取的⽂件中,作⽤于特定的shell⽤户。

1.2语法

ulimit

[-a]#显⽰/设置⽬前设定的所有资源类型的资源限制;显⽰当前的各种⽤户进程限制

[-c]#显⽰/设定core⽂件的最⼤值,单位为区块(blocks)

[-H]#指定设置某个给定资源的硬极限。如果⽤户拥有root⽤户权限,可以增⼤硬极限。任何⽤户均可减少硬极限

#设定资源的硬性限制,也就是管理员所设下的限制。

[-d<数据节区/数据段⼤⼩>]#显⽰/设定⼀个进程程序的数据段的最⼤值,单位为KB

Eg:ulimit-dunlimited

[-f<⽂件⼤⼩>]#shell所能创建的⽂件⼤⼩的最⼤值,单位为区块(blocks)

[-m<内存⼤⼩>]#指定可使⽤内存的上限,单位为KB

Eg:ulimit-munlimited

[-l<物理内存⼤⼩>]#设置可锁住的物理内存的最⼤值

[-v<虚拟内存⼤⼩>]#设置Shell可使⽤的虚拟内存的最⼤值,单位:KB

Eg:ulimit-vunlimited

[-n<⽂件数⽬>]#指定每个进程最多可打开的⽂件数,默认值:1024

Eg:ulimit-n4096将每个进程可以打开的⽂件数⽬加⼤到4096,缺省为1024

[-p<缓冲区⼤⼩>]#指定管道缓冲区的⼤⼩,单位:block;1block=512byte

[-s<堆栈⼤⼩>]#指定堆栈的上限,单位为KB

Eg:ulimit-sunlimited

[-S]#设置为给定的资源设置软极限。软极限可增⼤到硬极限的值。如果-H和-S标志均未指定,极限适⽤于以上⼆者

[-t]#限制CPU运⾏时间;指定每个进程所使⽤的秒数,单位:conds

#ulimit-t:Themaximumamountofcputimeinconds/超过硬CPU限制就简单粗暴的让进程“被⾃杀”了。

Eg:ulimit-tunlimited

[-u<程序数⽬>]#⽤户最多可开启的程序数⽬/设定可以运⾏的最⼤并发进程数

2命令详解

查看:【系统(所有进程、所有⽤户)】所有资源限制项

ulimit-a

#查看系统⽤户所有限制项及其值

查看:【指定进程】的所有资源限制项

查看当前进程的可打开的最⼤资源数(Limit/SoftLimit/HardLimit/Units)

cat/proc//limits

ulimit-a

设置:【指定⽤户】打开⽂件的【最⼤限制数】

ulimit-n4096

#设置⽤户openfiles

⽤户可以打开⽂件的最⼤数⽬;

执⾏该命令⾮root⽤户只能设置到4096,想要设置到8192需要sudo权限或者root⽤户

查看:【系统(所有进程)】打开⽂件的【最⼤限制数】

cat/proc/sys/fs/file-max

#查看系统(所有进程)打开⽂件的【最⼤限制数】

查看:【系统(所有进程)】【当前实际】的打开⽂件数

lsof|wc-l

#查看系统当前打开的⽂件数量

会动态变化

查看:【各个进程】【当前实际】的打开⽂件数

lsof-n|awk'{print$2}'|sort|uniq-c|sort-nr|more

查看:【指定进程】【当前实际】的打开⽂件数

lsof-p|wc-l

#查看指定进程的打开⽂件数量【重要命令】

注:lsof只能以root权限执⾏;安装lsof:yuminstall-ylsof

查看:【指定进程】【当前实际】占⽤的⽂件句柄详情

lsof|grep

#进程名称/PID/进程所有者/⽂件描述符/⽂件类型

⽂件类型:

DIR:表⽰⽬录。

CHR:表⽰字符类型。

BLK:块设备类型。

UNIX:UNIX域套接字。

FIFO:先进先出(FIFO)队列。

IPv4:⽹际协议(IP)套接字。

DEVICE:指定磁盘的名称

SIZE:⽂件的⼤⼩

NODE:索引节点(⽂件在磁盘上的标识)

NAME:打开⽂件的确切名称

3场景⽰例

查看当前最终各类资源限制的情况:ulimit-a

暂时地⽣效:适⽤于通过ulimit命令登录shell会话期间。

永久地⽣效:通过将⼀个相应的ulimit语句添加到由登录shell读取的⽂件中,即特定于shell的⽤户资源⽂件

[永久配置⽣效的思路]

/home/urName/.*profile

/home/urName/.bash_profile[下列是样例配置]

ulimit-u10240

/etc/curity/[下列是样例配置]

elasticarchsoftnofile65536

elasticarchhardnofile65536

elasticarchsoftmemlockunlimited

elasticarchhardmemlockunlimited

*softnofile122800

*hardnofile122800

*softnproc122800

*hardnproc122800

/etc/curity/limits.d/

/etc/curity/limits.d/

/etc/curity/limits.d/

/etc/curity/limits.d/

/etc/curity/limits.d/

/etc/curity/limits.d/

/etc/curity/limits.d/

/etc/curity/limits.d/

/etc/curity/limits.d/

场景1:[永久⽣效]解除Linux系统的最⼤进程数/最⼤⽂件打开数限制

*代表针对所有⽤户

noproc代表最⼤进程数

nofile代表最⼤⽂件打开数

-H:hardlimit,严格的设定,必定不能超过这个设定的数值

-S:softlimit,警告的设定,可以超过这个设定值,但是若超过则有警告信息

vi/etc/curity/#新增如下4⾏后,重新登录OS

#*softnoproc11000

*hardnoproc11000

*softnofile4100

*hardnofile4100

场景2:[永久⽣效]配置环境变量=>使ulimit命令配置永久⽣效

[⽅式1-系统环境变量]修改所有linux⽤户的环境变量⽂件

vi/etc/profile

ulimit-u10000

ulimit-n4096

ulimit-dunlimited

ulimit-munlimited

ulimit-sunlimited

ulimit-tunlimited

ulimit-vunlimited

source/etc/profile#使环境变量的配置⽣效

cat/proc/sys/fs/file-max#查看系统句柄⽂件最⼤数

lsof|wc-l#查看现在已占⽤的⽂件句柄数

[⽅式2-(当前)⽤户的环境变量]

vi~/.bash_profile

ulimit-n1024

source~/.bash_profile

重新登陆

场景3:[暂时⽣效]

把Linux中某⽤户的最⼤进程数设为10000个

ulimit-u10240

设置每个进程可打开的⽂件数⽬为4096

default:1024

ulimit-n4096

对于需要做许多socket连接并使它们处于打开状态的Java应⽤程序⽽⾔,最好通过使⽤ulimit-nxx修改每个进程可打开的⽂件数,缺省值是1024。

设置其它资源为⽆限制(unlimited)【推荐】

数据段长度:ulimit-dunlimited

最⼤内存⼤⼩:ulimit-munlimited

堆栈⼤⼩:ulimit-sunlimited

CPU时间:ulimit-tunlimited

虚拟内存:ulimit-vunlimited

场景4:让SSH接受Login程式的登⼊,⽅便在ssh客户端查看ulimit-a资源限制

vi/etc/ssh/sshd_config

把UrLogin的值改为yes,并把#注释去掉

/etc/init.d/sshdrestart#重启sshd服务

X参考/推荐⽂献

本文发布于:2022-12-31 22:49:20,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/68314.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:fidelity
标签:unlimited
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图