Skip to content

Commit 7c556fe

Browse files
committed
文章
1 parent 33d9abd commit 7c556fe

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
title: Linux的资源限制ulimit命令
3+
url: ulimit_Command_of_Linux
4+
tags:
5+
- Linux
6+
categories:
7+
- Linux
8+
date: 2018-11-08 15:32:00
9+
---
10+
11+
# 前言
12+
`ulimit`是一个`Linux`命令, 用于限制`shell`进程及其子进程的系统资源使用。通俗且不严谨的讲,就是限制登录用户能一次性打开多少个进程,多少个文件等等。
13+
> 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战。
14+
15+
<!-- more -->
16+
17+
# 参数说明
18+
`ulimit`限制分为`soft`软上限和`hard`硬上限, 使用`ulimit`命令默认修改`soft`软上限。
19+
- `soft`软上限: 任何进程都可以修改软上限,但是软上限不能超过硬上限
20+
- `hard`硬上限: 普通进程可以降低硬上限,只有`root`可以提高硬上限
21+
22+
命令格式: `ulimit [options] [limit]`
23+
24+
| `options`参数 | 含义 | 例子 |
25+
|:------------:|:----:|:----:|
26+
| `-H` | 设置硬资源限制, 一旦设置不能增加。| `ulimit -Hs 64` 限制硬资源, 线程栈大小为 64K。|
27+
| `-S` | 设置软资源限制, 设置后可以增加, 但是不能超过硬资源设置。| `ulimit -Sn 32` 限制软资源, 32 个文件描述符。|
28+
| `-a` | 显示当前所有的 limit 信息, 默认显示软上限。 | `ulimit -a` 显示当前所有的 limit 信息。|
29+
| `-c` | 最大的 core 文件的大小, 以 blocks 为单位。 | `ulimit -c unlimited` 对生成的 core 文件的大小不进行限制。|
30+
| `-d` | 进程最大的数据段的大小, 以 Kbytes 为单位。 | `ulimit -d unlimited` 对进程的数据段大小不进行限制。|
31+
| `-f` | 进程可以创建文件的最大值, 以 blocks 为单位。 | `ulimit -f 2048` 限制进程可以创建的最大文件大小为 2048 blocks。|
32+
| `-l` | 最大可加锁内存大小, 以 Kbytes 为单位。 | `ulimit -l 32` 限制最大可加锁内存大小为 32 Kbytes。|
33+
| `-m` | 最大内存大小, 以 Kbytes 为单位。 | `ulimit -m unlimited` 对最大内存不进行限制。|
34+
| `-n` | 可以打开最大文件描述符的数量。 | `ulimit -n 128` 限制最大可以使用 128 个文件描述符。|
35+
| `-p` | 管道缓冲区的大小, 以 Kbytes 为单位。 | `ulimit -p 512` 限制管道缓冲区的大小为 512 Kbytes。|
36+
| `-s` | 线程栈大小, 以 Kbytes 为单位。 | `ulimit -s 512` 限制线程栈的大小为 512 Kbytes。|
37+
| `-t` | 最大的 CPU 占用时间, 以秒为单位。 | `ulimit -t unlimited` 对最大的 CPU 占用时间不进行限制。|
38+
| `-u` | 用户最大可用的进程数。 | `ulimit -u 64` 限制用户最多可以使用 64 个进程。|
39+
| `-v` | 进程最大可用的虚拟内存, 以 Kbytes 为单位。 | `ulimit -v 200000` 限制最大可用的虚拟内存为 200000 Kbytes。|
40+
41+
# 配置方法
42+
43+
**对登录用户进行限制**
44+
1.`/etc/profile``/etc/bashrc``~/.bash_profile``~/.bashrc`文件中写入`ulimit`命令。
45+
1. 直接在控制台输入`ulimit`命令, 这是临时配置, 重启失效。
46+
47+
**对应用程序进行限制**
48+
1.`Tomcat`进行限制, 编写启动脚本
49+
```sh
50+
ulimit -s 512;
51+
startup.sh
52+
```
53+
54+
**对多个用户或用户组进行限制**
55+
1.`/etc/security/limits.conf`中输入`<domain> <type> <item> <value>`, 每一行一个限制。
56+
>domain 表示用户或者组的名字,还可以使用 * 作为通配符。Type 可以有两个值,soft 和 hard。Item 则表示需要限定的资源,可以有很多候选值,如 stack,cpu,nofile 等等,分别表示最大的堆栈大小,占用的 cpu 时间,以及打开的文件数。通过添加对应的一行描述,则可以产生相应的限制
57+
58+
**对系统全局的进程进行限制**
59+
1. 修改`/proc`下的文件
60+
61+
# 常用例子
62+
1. `ulimit -a`: 查看当前 `shell` 的所有资源限制,默认显示软限制
63+
1. `ulimit -Sa`: 查看当前 `shell` 的所有资源限制,`-S` 表示显示软限制
64+
1. `ulimit -Ha`: 查看当前 `shell` 的所有资源限制,`-H` 表示显示硬限制
65+
1. `ulimit -n`: 显示当前可打开的文件描述符数量,软限制
66+
1. `ulimit -Hn`: 显示当前可打开的文件描述符数量,硬限制
67+
1. `ulimit -n 10240`: 修改可打开的文件描述符数为 `10240`,默认软限制,除非指明参数 `H`
68+
1. `ulimit -Hn 51200`: 修改可打开的文件描述符数为 `51200`,硬限制(如果是提高硬限制,则需要 `root` 权限)
69+
1. `ulimit -s 102400`: 修改堆栈大小的软限制为 `102400 kbytes``100 MB`
70+
1. `ulimit -Hs unlimited`: 修改堆栈大小的硬限制为 `unlimited`,即不限制上限
71+
72+
# 参考资料
73+
- [通过 ulimit 改善系统性能](https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/index.html)
74+
- [Linux ulimit详解](https://www.zfl9.com/ulimit.html)

0 commit comments

Comments
 (0)