Skip to content

Commit

Permalink
修改
Browse files Browse the repository at this point in the history
  • Loading branch information
arkingc committed Jun 20, 2018
1 parent ba7af94 commit 2c560c3
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions interview/temp/进程线程.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,29 @@
```
重新登录,执行ulimit -s 即可看到改为新栈空间大小
> `ulimit`命令只对当前终端生效。如果需要永久生效:1)将命令写至`profile`和`bashrc`中,相当于在登录时自动动态修改限制;2)在`/etc/security/limits.conf`中添加记录(需重启生效,并且在`/etc/pam.d`中的session有使用到limit模块)
* [linux下进程的最大线程数、进程最大数、进程打开的文件数](http://www.cnblogs.com/niocai/archive/2012/04/01/2428154.html)
* [linux查看修改线程默认栈空间大小](https://www.cnblogs.com/baiduboy/p/6121197.html)
> [线程的限制](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B.md#1%E7%BA%BF%E7%A8%8B%E9%99%90%E5%88%B6)
### 2)进程数量的限制
* **最大理论数**
- 每个进程都要在**全局段描述表GDT**中占据两个表项
+ 每个进程的**局部段描述表LDT**都作为一个独立的段而存在,在全局段描述表GDT中要有一个表项指向这个段的起始地址,并说明该段的长度以及其他一些参数
+ 每个进程还有一个**TSS结构(任务状态段)**也是一样
所以,每个进程都要在全局段描述表GDT中占据两个表项
- GDT容量?
+ 段寄存器中用作GDT表下标的位段宽度是13位,所以GDT中可以有2^13=8192个描述项
+ 除一些系统的开销(例如GDT中的第2项和第3项分别用于内核 的代码段和数据段,第4项和第5项永远用于当前进程的代码段和数据段,第1项永远是0,等等)以外,尚有8180个表项可供使用。**所以理论上系统中最大的进程数量是`8180/2=4090`**
* **可创建的实际数**
- linux内核通过**进程标识符PID**来标识进程,为了与老版本的Unix或者Linux兼容,PID的最大值默认设置为32768。可以通过`cat /proc/sys/kernel/pid_max`查看PID的最大值:
```bash
chenximing@chenximing-MS-7823:~$ cat /proc/sys/kernel/pid_max
32768
```
- 可以通过下面方式修改最大PID
+ 首先,`ulimit -u 新值`
+ 然后,还需设置内核参数`kernel.pid_max`:`sysctl -w kernel.pid_max=新值`

0 comments on commit 2c560c3

Please sign in to comment.