linux : ulimit 命令使用说明、参数解说

ulimit -a 用来显示当前的各种用户进程限制
Linux 对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,
设置个Linux用户的最大进程数,一些需要设置为无限制:

数据段长度:ulimit -d unlimited最大内存大小:ulimit -m unlimited堆栈大小:ulimit -s unlimited

用这个命令的时候主要是为了产生 core 文件,就是程序运行发行段错误时的文件:ulimit -c  unlimited 生成 core 文件。

 

功能说明:控制 shell 程序的资源。

语  法:ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]PS: 可选参数直接写在同一行,现在换行只是为了方便查看参数定义

补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。

参  数:

   -a  显示目前资源限制的设定。 -c <core文件上限>  设定core文件的最大值,单位为区块。 -d <数据节区大小>  程序数据节区的最大值,单位为KB。 -f <文件大小>  shell所能建立的最大文件,单位为区块。 -H  设定资源的硬性限制,也就是管理员所设下的限制。 -m <内存大小>  指定可使用内存的上限,单位为KB。 -n <文件数目>  指定同一时间最多可开启的文件数。 -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 -s <堆叠大小>  指定堆叠的上限,单位为KB。 -S  设定资源的弹性限制。 -t <CPU时间>  指定CPU使用时间的上限,单位为秒。 -u <程序数目>  用户最多可开启的程序数目。 -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

1,说明: ulimit用于shell启动进程所占用的资源. 

2,类别: shell内建命令

3,语法格式: ulimit [-acdfHlmnpsStvw] [size]

4,参数介绍:


-H 设置硬件资源限制.-S 设置软件资源限制.-a 显示当前所有的资源限制.-c size:设置core文件的最大值.单位:blocks-d size:设置数据段的最大值.单位:kbytes-f size:设置创建文件的最大值.单位:blocks-l size:设置在内存中锁定进程的最大值.单位:kbytes-m size:设置可以使用的常驻内存的最大值.单位:kbytes-n size:设置内核可以同时打开的文件描述符的最大值.单位:n-p size:设置管道缓冲区的最大值.单位:kbytes-s size:设置堆栈的最大值.单位:kbytes-t size:设置CPU使用时间的最大上限.单位:seconds-v size:设置虚拟内存的最大值.单位:kbytes

5,简单实例:
1]在RH8的环境文件/etc/profile中,我们可以看到系统是如何配置ulimit的:

CODE:

#grep ulimit /etc/profile
ulimit -S -c 0 > /dev/null 2>&1

这条语句设置了对软件资源和对core文件大小的设置

2] 如果我们想要对由shell创建的文件大小作些限制, 如:

CODE:

#ll h
-rw-r--r-- 1 lee lee 150062 3月 22 02:39 h
#ulimit -f 100 #设置创建文件的最大块(一块=512字节)
#cat h>newh
File size limit exceeded
#ll newh
-rw-r--r-- 1 lee lee 51200 4月 8 11:47 newh

文件h的大小是150062字节,而我们设定的创建文件的大小是512字节x100块=51200字节
当然系统就会根据你的设置生成了51200字节的newh文件.

3] 可以像实例1]一样,把你要设置的ulimit放在/etc/profile这个环境文件中.

当系统中的一些程序在遇到一些错误以及crash时,系统会自动产生core文件记录crash时刻系统信息,包括内存和寄存器信息,用以程序员日 后debug时可以使用。这些错误包括段错误、非法指令、总线错误或用户自己生成的退出信息等等,一般地,core文件在当前文件夹中存放。

core文件有时可能在你发生错误时,并没有出现在你当前的文件夹中,发生这种情况的原因有两个:一个是当前终端被设置为不能弹出core文件;另一种则是core文件被指定了路径。

对于前者,我们可以使用ulimit命令对core文件的大小进行设定。一般默认情况下,core文件的大小被设置为0,这样系统就不dump出core文件了。这时,使用命令:ulimit -c unlimited进行设置,就可以把core文件的大小设置为无限大,同时也可以使用数字来替代unlimited,对core文件的上限制做更精确的设定。

除了可以设置core文件的大小之外,还可以对core文件的名称进行一些规定。这种设置是对/proc/sys/kernel/core_pattern和/proc/sys/kernel/core_uses_pid这两个文件进行修改。改动这两个文件的方法如下:

echo <pattern> > /proc/sys/kernel/core_pattern

echo <"0"/"1"> /proc/sys/kernel/core_uses_pid

并且注意,只有超级用户才可以修改这两个表。

core_pattern接受的是core文件名称的pattern,它包含任何字符串,并且用%作为转移符号生成一些标示符,为core文件名称加入特殊含义。已定义的标示符有如下这些:

%%:相当于%%p:相当于<pid>%u:相当于<uid>%g:相当于<gid>%s:相当于导致dump的信号的数字%t:相当于dump的时间%e:相当于执行文件的名称%h:相当于hostname

除以上这些标志位外,还规定:

1、末尾的单个%可以直接去除;2、%加上除上述以外的任何字符,%和该字符都会被去除;3、所有其他字符都作为一般字符加入名称中;4、core文件的名称最大值为64个字节(包括'\0');5、core_pattern中默认的pattern为core;6、为了保持兼容性,通过设置core_uses_pid,可以在core文件的末尾加上%p;7、pattern中可以包含路径信息。

------------------------------------------------  我是分隔线 ------------------------------------------------------------------

下面的资料是从互联网上整理的来的

1. 可以用ulimit -a 查看一下栈的大小。
在内核2.6.20下, stack size 为8192 kbytes
如果这里没有限制,就栈的大小就只受内存的限制。2G是上限。

2. core 文件
 * 开启或关闭core文件的生成

ulimit -c 可以查看是否打开此选项,若为0则为关闭;ulimit -c 0可手动关闭ulimit -c 1000 为设置core文件大小最大为1000kulimit -c unlimited 设置core文件大小为不限制大小

很多系统在默认的情况下是关闭生成core文件的,这个命令可以加到你的profile中去。

3.设置Core Dump的核心转储文件目录和命名规则

在默认的情况下,很多系统的core文件是生成在你运行程序的目录下,或者你在程序中chdir后的那个目录,然后在core文件的后面加了一个 pid。在实际工作中,这样可能会造成很多目录下产生core文件,不便于管理,实际上,在2.6下,core文件的生成位置和文件名的命名都是可以配置 的。

/proc/sys/kernel/core_uses_pid 可以控制产生的core文件的文件名中是否添加pid作为扩展。如果添加则文件内容为1,否则为0


proc/sys/kernel/core_pattern可以设置格式化的core文件保存位置或文件名,比如原来文件内容是core-%e 
可以这样修改:
echo "/tmp/core-%e-%p" > core_pattern
将会控制所产生的core文件会存放到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
以下是参数列表:  

    %p - insert pid into filename 添加pid%u - insert current uid into filename 添加当前uid%g - insert current gid into filename 添加当前gid%s - insert signal that caused the coredump into the filename 添加导致产生core的信号%t - insert UNIX time that the coredump occurred into filename添加core文件生成时的unix时间%h - insert hostname where the coredump happened into filename 添加主机名%e - insert coredumping executable name into filename 添加命令名


当然,你可以用下列方式来完成
sysctl -w kernel.core_pattern=/tmp/core-%e-%p

这些操作一旦计算机重启,则会丢失,如果你想持久化这些操作,可以在 /etc/sysctl.conf文件中增加:
kernel.core_pattern=/tmp/core%p

加好后,如果你想不重启看看效果的话,则用下面的命令:
sysctl -p /etc/sysctl.conf

------------------------------------------------  我是分隔线 ------------------------------------------------------------------

高手指教
    问题1:现有一程序P 长期在服务器上运行,目前经常是每1天死掉一次(段错误)。
    目前解决方法:用SecureCRT开一个终端,并在服务其上设置ulimit -c nulimited,然后启动程序P。

用ulimite -a 命令查询结果如下:

         core file size       (blocks, -c) unlimiteddata seg size           (kbytes, -d) unlimitedfile size             (blocks, -f) unlimitedpending signals                 (-i) 1024max locked memory    (kbytes, -l) 32............

         表明core文件可以生成。
         并测试利用kill -6 pid能够core文件。

   目前的困难:当运行ulimit -c nulimited终端 (并且该终端将程序P启动到后台了 ./P &)关闭,程序P死掉后并没有生成 core文件。经试验后发现ulimit 命令与终端有关。

   问题2:如何设置能够生成core 文件,与终端无关。即,程序启动,关闭终端,当程序死掉(段错误)后能够生成core文件。

在 /etc/security/limits.conf (中设置 redhat衍生系linux)或 /etc/profile中的:
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
注释掉上面一行。
还有其他UNIX类操作系统也有自己的配置文件可以设置。

------------------------------------------------  我是分隔线 ------------------------------------------------------------------

gdb core 多线程。在linux环境下调试多线程,总觉得不像.NET那么方便。这几天就为找一个死锁的bug折腾好久,介绍一下用过的方法吧。

多线程如果dump,多为段错误,一般都涉及内存非法读写。可以这样处理,使用下面的命令打开系统开关,让其可以在死掉的时候生成core文件。   
ulimit -c unlimited
这样的话死掉的时候就可以在当前目录看到core.pid(pid为进程号)的文件。接着使用gdb:
gdb ./bin ./core.pid 
进去后,使用bt查看死掉时栈的情况,在使用frame命令。

还有就是里面某个线程停住,也没死,这种情况一般就是死锁或者涉及消息接受的超时问题(听人说的,没有遇到过)。遇到这种情况,可以使用:
gcore pid (调试进程的pid号)
手动生成core文件,在使用pstack(linux下好像不好使)查看堆栈的情况。如果都看不出来,就仔细查看代码,看看是不是在 if,return,break,continue这种语句操作是忘记解锁,还有嵌套锁的问题,都需要分析清楚了。

------------------------------------------------  我是分隔线 ------------------------------------------------------------------
5.举例
在Linux下写程序的时候,如果程序比较大,经常会遇到“段错误”(segmentation fault)这样的问题,这主要就是由于Linux系统初始的堆栈大小(stack size)太小的缘故,一般为10M。我一般把stack size设置成256M,这样就没有段错误了!命令为:
ulimit   -s 262140 
如果要系统自动记住这个配置,就编辑/etc/profile文件,在 “ulimit -S -c 0 > /dev/null 2>&1”行下,添加“ulimit   -s 262140”,保存重启系统就可以了! 

 可以把你要设置的 ulimit 放在 /etc/profile 这个环境文件中.
用途   设置或报告用户资源极限。
语法   ulimit [ -H ] [ -S ] [ -a ] [ -c ] [ -d ] [ -f ] [ -m ] [ -n ] [ -s ] [ -t ] [ Limit ]
描述   ulimit 命令设置或报告用户进程资源极限,如 /etc/security/limits 文件所定义。文件包含以下缺省值极限: 

fsize = 2097151
core = 2097151
cpu = -1
data = 262144
rss = 65536
stack = 65536
nofiles = 2000 

当新用户添加到系统中时,这些值被作为缺省值使用。当向系统中添加用户时,以上值通过 mkuser 命令设置,或通过 chuser 命令更改。 
极限分为软性或硬性。通过 ulimit 命令,用户可将软极限更改到硬极限的最大设置值。要更改资源硬极限,必须拥有 root 用户权限。 
很多系统不包括以上一种或数种极限。 特定资源的极限在指定 Limit 参数时设定。Limit 参数的值可以是每个资源中指定单元中的数字,或者为值 unlimited。要将特定的 ulimit 设置为 unlimited,可使用词 unlimited。 


注:在 /etc/security/limits 文件中设置缺省极限就是设置了系统宽度极限, 而不仅仅是创建用户时用户所需的极限。 
省略 Limit 参数时,将会打印出当前资源极限。除非用户指定 -H 标志,否则打印出软极限。当用户指定一个以上资源时,极限名称和单元在值之前打印。如果未给予选项,则假定带有了 -f 标志。 
由于 ulimit 命令影响当前 shell 环境,所以它将作为 shell 常规内置命令提供。如果在独立的命令执行环境中调用该命令,则不影响调用者环境的文件大小极限。以下示例中正是这种情况: 

nohup ulimit -f 10000
env ulimit 10000 

一旦通过进程减少了硬极限,若无 root 特权则无法增加,即使返回到原值也不可能。 
关于用户和系统资源极限的更多信息,请参见 AIX 5L Version 5.3 Technical Reference: Base Operating System and Extensions Volume 1 中的 getrlimit、setrlimit 或 vlimit 子例程。
标志

-a     列出所有当前资源极限。-c     以 512 字节块为单位,指定核心转储的大小。-d     以 K 字节为单位指定数据区域的大小。-f     使用 Limit 参数时设定文件大小极限(以块计),或者在未指定参数时报告文件大小极限。缺省值为 -f 标志。-H     指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限。-m     以 K 字节为单位指定物理存储器的大小。-n     指定一个进程可以拥有的文件描述符的数量的极限。-s     以 K 字节为单位指定堆栈的大小。-S     指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者。-t     指定每个进程所使用的秒数。

退出状态 
返回以下退出值:

0     成功完成。>0     拒绝对更高的极限的请求,或发生错误。

示例 
要将文件大小极限设置为 51,200 字节,输入: 
ulimit -f 100

 

非常抱歉,这篇文章来自草稿整理:太久了,不清楚各个段落转自何处了 ...

如果你看到原文可以给我留言,我会再补上,谢谢。

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

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

相关文章

给技术人上的管理课:平衡和集中

摘要&#xff1a;大中型团队管理是技术人转型的巨大挑战&#xff0c;这个阶段的管理工作&#xff0c;仍然可以归为技术范畴&#xff0c;依靠的大抵是管理人的筋肉力量。是否会管理&#xff0c;要看能否管好超出自己筋肉力量规模的团队。此中的关键&#xff0c;在于把握平衡和集…

理解分布式id生成算法--雪花算法(SnowFlake)

分布式ID生成算法的有很多种&#xff0c;Twitter的SnowFlake就是其中经典的一种。 注&#xff1a; 1B就是1个字节。Byte、KB、B、MB、GB之间的关系是&#xff1a;Bit——比特 &#xff1b; B ——字节&#xff1b;KB——千字节&#xff1b;MB——兆字节&#xff1b;GB——吉字节…

[ZJOI2010]贪吃的老鼠

P2570 [ZJOI2010]贪吃的老鼠 在Ta的博客查看 显然二分&#xff0c;最大流判定 要满足两个条件&#xff1a; (1) 在任一时刻&#xff0c;一只老鼠最多可以吃一块奶酪&#xff1b; (2) 在任一时刻&#xff0c;一块奶酪最多被一只老鼠吃。 先按照奶酪的边界进行离散化&#xff0c…

IP: 169.254.0.0/16 地址用途

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 一直困惑169.254.0.0/16是干嘛的&#xff0c;每次笔记本dhcp获取地址失败后&#xff0c;就会随机在这个B类地址段获取一个地址&#…

值得借鉴的30条好习惯

我有幸一直能生活在比较好的圈子中&#xff0c;我的优秀的同学、舍友&#xff0c;乃至我现在创业后遇到的优秀创业者&#xff0c;从他们身上看到和学到一些好的习惯。 我一直觉得&#xff0c;好的习惯&#xff0c;是成功和进步的重要一点。我随手总结一些给大家&#xff0c;零散…

【PKUSC2019】线弦图【计数】【树形DP】【分治FFT】

Description 定义线图为把无向图的边变成点&#xff0c;新图中点与点之间右边当且仅当它们对应的边在原图中有公共点&#xff0c;这样得到的图。 定义弦图为不存在一个长度大于3的纯环&#xff0c;纯环的定义是在环上任取两个不相邻的点&#xff0c;它们之间都没有边&#xff0…

注解 @PostConstruct 与 @PreDestroy 详解及实例

简介 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Java EE5 引入了PostConstruct和PreDestroy这两个作用于Servlet生命周期的注解&#xff0c;实现Bean初始化之前和销毁之前的自定义操…

别让6种不良心理偷走你的好人缘

众所周知&#xff0c;拥有正常、健康的交际圈对于人的身心健康都是很有帮助的。但是若想维系好自己的交际圈&#xff0c;也是很不容易的&#xff0c;甚至在不经意间产生的某些心理&#xff0c;就会直接给大家的人际交往带来影响。那么接下来&#xff0c;小编就先为大家归纳一下…

PHP 安装xdebug

xdebug官网: https://xdebug.org 安装步骤如下: 使用 phpinfo() 打印出PHP相关信息, 全选, 复制 打开 xdebug 网站: https://xdebug.org/wizard.php 在图中输入框中粘贴你复制的信息, 点击 Analyse my phpinfo() output 在结果中点击下载, 然后按照它提示的步骤进行操作即可…

apt-clone:备份已安装的软件包并在新的 Ubuntu 系统上恢复它们

当我们在基于 Ubuntu/Debian 的系统上使用 apt-clone&#xff0c;包安装会变得更加容易。如果你需要在少量系统上安装相同的软件包时&#xff0c;apt-clone 会适合你。 如果你想在每个系统上手动构建和安装必要的软件包&#xff0c;这是一个耗时的过程。它可以通过多种方式实现…

分布式消息中间件 : Rocketmq

简述 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 分布式消息中间件&#xff0c;主要是实现分布式系统中解耦、异步消息、流量销锋、日志处理等场景。生产中用的最多的消息队…

PV、UV、UIP、VV、CPC、CPM、RPM、CTR指的是什么?

PV(PageView)&#xff1a;网站浏览量&#xff0c;指页面的浏览次数&#xff0c;用以衡量网站用户访问的网页数量。用户没打开一个页面便记录1次PV&#xff0c;多次打开同一页面则浏览量累计&#xff1b;UV(UniqueVistor)&#xff1a;独立访客数&#xff0c;指1天内访问某站点的…

linux opencl(AMD) Example

最近对并行计算很感兴趣。不过搞MPI对我来说暂时没什么用&#xff0c;基于GPU的并行计算倒是挺实用。网上的资料都是CUDA的。实质上我对CUDA一点兴趣都没有。无论别人的架构多么先进&#xff0c;我这个只有AMD显卡的小孩都是旁观者而已。在这里记录一下一个opencl程序的编译过程…

php使用supervisor管理进程脚本

supervisor是用python开发的一个在linux系统下的进程管理工具&#xff0c;可以方便的监听&#xff0c;启动&#xff0c;停止一个或多个进程。当一个进程被意外杀死后&#xff0c;supervisor监听到后&#xff0c;会自动重新拉起进程。 一、supervisor的安装 1、通过easy_install…

重写规则和重载规则

重写规则&#xff1a; 发生在有继承关系的类之间&#xff08;同一类就是重载了&#xff09;相同的方法名&#xff0c;参数列表&#xff0c;返回类型可见性&#xff08;public,protected,private&#xff09;不能被缩小异常不能被放大规则与c中不一样静态类型不能被重写方法重载…

消息中间件:RocketMQ 介绍(特性、术语、原理、优缺点、消息顺序、消息重复)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 消息中间件的作用 1. 应用解耦 2. 异步处理 比如用户注册场景&#xff0c;注册主流程完成以后&#xff0c;需要调用邮件系统发送邮件…

C# JsonHelper类

记录一下&#xff0c;方便下次用。 public class JsonHelper{#region Json/// <summary>/// JavaScriptSerializer/// </summary>/// <typeparam name"T"></typeparam>/// <param name"obj"></param>/// <returns&…

[译】Redux入门教程(一)

前言 老外写技术文章真是叼&#xff0c;这是国外的一个程序员写的一个简单易懂,循序渐进的Redux教程&#xff0c;本着共享的精神&#xff0c;就翻译出来给大家一起看&#xff0c;文章最后有链接&#xff0c;不想看我翻译的直接去看原文吧。 下面是原教程的英文目录 这篇先更三分…

使用 Intellij Idea 打包 java 工程为可执行 jar 包

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 其实还有个简单多了方法&#xff0c;见&#xff1a; 超简单方法&#xff1a; Intellij Idea 把 java 工程打成可运行的 jar 步骤&#x…

QuickStart系列:docker部署之Gitlab本地代码仓库

gitlab是可以在本地搭建的使用git作为源代码管理的仓库。 运行环境&#xff1a; win10vmware14docker7docker 1. 使用命令拉取镜像&#xff08;非必须&#xff0c;耗时比较久&#xff0c;这里以ce为准&#xff0c;ce是社区版&#xff0c;ee是企业版&#xff09;&#xff1a; do…