ulimit control

2023-11-04 01:58
文章标签 control ulimit

本文主要是介绍ulimit control,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux系统资源限制

1. 最大文件数

查看进程允许打开的最大文件句柄数:ulimit -n

查看进程所占的文件描述符: lsof -p xxx | wc -l

设置进程能打开的最大文件句柄数:ulimit -n xxx 

2. ulimit -n vs. file-max ?

简单的说, ulimit -n控制进程级别能够打开的文件句柄的数量, 而max-file表示系统级别的能够打开的文件句柄的数量。 

ulimit -n的设置在重启机器后会丢失,因此需要修改limits.conf的限制,limits.conf中有两个值softhardsoft代表只警告,hard代表真正的限制

Cat /etc/security/limits.conf代码  

*               soft    nofile          150000  

*               hard    nofile          150000  

这里我们把softhard设置成一样的。 

cat /proc/sys/fs/file-max”,或“sysctl -a | grep fs.file-max”查看系统能打开的最大文件数。查看和设置例如:

Shell代码  

[root@vm014601 ~]# sysctl -a |grep fs.file-max  

fs.file-max = 200592  

[root@vm014601 ~]# echo "fs.file-max = 2005920" >> /etc/sysctl.conf   

[root@vm014601 ~]# sysctl -p  

[root@vm014601 ~]# cat /proc/sys/fs/file-max                          

2005920  

file-nr是只读文件,第一个数代表了目前分配的文件句柄数;第二个数代表了系统分配的最大文件句柄数;比如线上系统查看结果:

Shell代码  

# cat /proc/sys/fs/file-max  

1106537  

# cat /proc/sys/fs/file-nr       

1088  0       1106537  

# lsof | wc -l  

1506  

可以看到file-nrlsof的值不是很一致,但是数量级一致。为什么会不一致?原因如下:

写道

lsof是列出系统所占用的资源,但是这些资源不一定会占用打开文件号的.

比如共享内存,信号量,消息队列,内存映射等,虽然占用了这些资源,但不占用打开文件号。

我曾经在前端机上很长时间都无法得到lsof | wc -l 的结果,这个时候可以通过file-nr粗略的估算一下打开的文件句柄数。

3. sysckernel.threads-max

指定了内核所能使用的线程(所有进程打开线程之和)的最大数目,通过命令 “cat /proc/sys/kernel/threads-max” 查看当前值。查看和设置例如:

Shell代码  

sysctl -a | grep threads  

vm.nr_pdflush_threads = 2  

kernel.threads-max = 229376  

本厂系统配置允许打开的线程数 > 229k

如果此值设小了会导致:-bash: fork: Resource temporarily unavailable

4. 为什么有限制?

为什么Linux内核对文件句柄数、线程和进程的最大打开数进行了限制?以及如果我们把它调的太大,会产生什么样的后果?

原因1 - 资源问题:the operating system needs memory to manage each open file, and memory is a limited resource - especially on embedded systems.

原因2 - 安全问题:if there were no limits, a userland software would be able to create files endlessly until the server goes down.

最主要的是资源问题,为防止某一单一进程打开过多文件描述符而耗尽系统资源,对进程打开文件数做了限制。

5. 设置成多少比较合适?

网上有朋友给了估算公式:file-max number = RAM size/10k

I am not a kernel expert, but as far as I can see, the default for file-max seems to be RAM size divided by 10k. As the real memory used per file handler should be much smaller (size of struct file plus some driver dependent memory), this seems a quite conservative limit. – jofel Apr 19 at 16:43

那么一个12G RAM 的前端机可以打开接近1M的文件。真的可以打开1百万个文件吗?

为了试验,基于MINA写了一个NIO服务,在一个服务上创建了50万活跃率约为1%TCP连接。观察内存使用 < 4.5G可以粗略认为单个socket连接使用内存小于10K。因此可以用上面的公式来简单估算。

这篇关于ulimit control的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

file-max与ulimit的关系与差别

http://zhangxugg-163-com.iteye.com/blog/1108402 http://ilikedo.iteye.com/blog/1554822

2024年 Biomedical Signal Processing and Control 期刊投稿经验最新分享

期刊介绍 《Biomedical Signal Processing and Control 》期刊旨在为临床医学和生物科学中信号和图像的测量和分析研究提供一个跨学科的国际论坛。重点放在处理在临床诊断,患者监测和管理中使用的方法和设备的实际,应用为主导的研究的贡献。 生物医学信号处理和控制反映了这些方法在工程和临床科学的界面上被使用和发展的主要领域。期刊的范围包括相关的评论论文(review p

解决Vue请求 ‘No 'Access-Control-Allow-Origin' header is present on the requested resource’错误

如果我们用VueResouce直接请求,这样写(以豆瓣api为例): this.$http.get('https://api.douban.com//v2/movie/top250').then((response) => {this.movie = response.data;console.log(this.movie); }); 就会报错: 因为这是一个跨域的请求,不能直接

C# 窗体中Control以及Invalidate,Update,Refresh三种重绘方法的区别

在 C# 中,Control 类是 Windows Forms 应用程序中所有控件的基类。它提供了控件的基本功能和属性,这些功能和属性被所有继承自 Control 类的子类所共享。这意味着 Control 类是构建 Windows Forms 应用程序中用户界面元素的基础。 以下是 Control 类的一些关键特性和方法: 属性: Size:获取或设置控件的宽度和高度。Location:获

新路程------linux内核和busybox配置ulimit使能core dump

今天学习了如何配置内核和busybox使能coredump 首先内核确认CONFIG_ELF_CORE=y 然后busybox确认FEATURE_INIT_COREDUMPS [=y] 然后到内核根目录下执行~ # touch /.init_enable_core生成这个文件 然后把busybox 拷贝进/usr目录 执行 ./busybox sh -c 'ulimit -c un

【RoCE】Flow Control

概览 RoCE可以实现lossless无损网络环境,在二层网络上做到可靠网络传输,从而对原本在光纤网络环境下的应用在以太网环境下提供相同的服务,而不必对应用逻辑和上层协议更改。实现无损的方法有Global Pause, PFC, Dropless Receive Queue。 1.什么是802.3x Flow Control(Global Pause)? 以太网标准(802.3)设计

【Linux】在 bash shell 环境下,当一命令正在执行时,按下 control-Z 会?

目录 题目分析答案 题目 分析 ctrl-c: 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序;ctrl-z: 发送 SIGTSTP信号给前台进程组中的所有进程,常用于挂起一个进程;ctrl-d: 不是发送信号,而是表示一个特殊的二进制值,表示 EOF,作用相当于在终端中输入exit后回车; 答案 正确答案:C

ulimit linux文件配置

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于Unix、Linux这样的操作系统。 习惯上,标准输入(standard input)的文件描述符是 0,标准输

centos出现这个错误:Job for sshd.service failed because the control process exited with error code.

这是因为SElinux启用了,关闭就好了。 在/etc/selinux/config文件中如下修改,设置SELINUX=disabled: # This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:#       enforcing - SE