linux-ulimit控制shell程序的资源

ulimit

Linux对于每个用户,系统限制其最大进程数、文件句柄数等资源。为提高性能,可以根据设备资源情况,设置各linux用户的限制,可以用ulimit -a 来显示当前的各种用户限制。

参数解析:

core file size core文件的最大值没有限制,

data seg size 进程的数据段可以任意大

file size 文件可以任意大

pending signals 最多有62999个待处理的信号

max locked memory 一个任务锁住的物理内存的最大值为16384kB

max memory size 一个任务的常驻物理内存的最大值

open files 一个任务最多可以同时打开1024的文件

pipe size 管道的最大空间为4096字节

POSIX message queues POSIX的消息队列的最大值为819200字节

stack size 进程的栈的最大值为8192字节

cpu time 进程使用的CPU时间

max user processes 当前用户同时打开的进程(包括线程)的最大个数为62999

virtual memory 没有限制进程的最大地址空间

file locks 所能锁住的文件的最大个数没有限制

语法

ulimit [-aHS][-c ][-d ][-f ][-m ][-n ][-p ][-s ][-t ][-u ][-v ]

参数说明:

-S使用软 (`soft') 资源限制

-H使用硬 (`hard') 资源限制

-a所有当前限制都被报告

-b套接字缓存尺寸

-c创建的核文件的最大尺寸

-d一个进程的数据区的最大尺寸

-e最高的调度优先级 (`nice')

-f有 shell 及其子进程可以写的最大文件尺寸

-i最多的可以挂起的信号数

-k分配给此进程的最大 kqueue 数量

-l一个进程可以锁定的最大内存尺寸

-m最大的内存进驻尺寸

-n最多的打开的文件描述符个数

-p管道缓冲区尺寸

-qPOSIX 信息队列的最大字节数

-r实时调度的最大优先级

-s最大栈大小

-t最大的CPU时间,以秒为单位

-u最大用户进程数

-v虚拟内存尺寸

-x最大的文件锁数量

-P最大伪终端数量

-T最大线程数量

使用

打开终端,直接使用ulimit指定参数,修改对应的值就可以了,例如修改最大栈大小,修改之后可以使用ulimit查看结果,修改的结果只对当前终端生效,开启其他终端这些参数就会恢复默认。

ulimit -s 81920

永久生效:

0x00 将命令添加到启动终端加载的文件中,例如/etc/profile或者~/.bash_profile等文件中。

echo 'ulimit -s 262140' >> ~/.bash_profile

这种方法使用比较灵活,但是有时候一些参数没有权限修改,需要root权限。

0x01 可以在配置文件里面指定对应资源的最大限制。修改linux的软硬件限制文件/etc/security/limits.conf.

在文件尾部添加如下代码:

* soft nofile 10240

* hard nofile 10240

修改之后重新连接终端就可以生效了。

总结

在centos下可以针对用户或者组进行限制修改,在Ubuntu/Debian下只能指定*,不知道是哪里的问题?Debian系的系统用得比较少。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180115A0YR4Q00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券