1 文件描述符概念
Linux 系統(tǒng)中,把一切都看做是文件,當(dāng)進(jìn)程打開現(xiàn)有文件或創(chuàng)建新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符,文件描述符就是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引,用來指向被打開的文件,所有執(zhí)行I/O操作的系統(tǒng)調(diào)用都會(huì)通過文件描述符。
- 每個(gè)文件描述符會(huì)與一個(gè)打開的文件相對(duì)應(yīng)
- 不同的文件描述符也可能指向同一個(gè)文件
- 相同的文件可以被不同的進(jìn)程打開,也可以在同一個(gè)進(jìn)程被多次打開
2 文件描述符表
| 進(jìn)程級(jí)文件描述符表 | 系統(tǒng)級(jí)文件描述符表 (open file table) |
i-node表 | |
|---|---|---|---|
| 記錄內(nèi)容 | 1.文件描述符 2.文件指針(open file handle) |
1.當(dāng)前文件偏移量 2.狀態(tài)標(biāo)識(shí) 3.文件訪問模式(讀,寫,讀和寫) 4.對(duì)該文件i-node對(duì)象的引用 5.文件類型(常規(guī)文件、套接字、FIFO...) 6.訪問權(quán)限 7.一個(gè)指向該文件所持有的所有表的指針 8.文件的各種屬性 9.與信號(hào)驅(qū)動(dòng)相關(guān)的設(shè)置 |
1.文件類型 2.文件鎖 |

3 查看進(jìn)程文件描述符限制
cat /proc/pid號(hào)碼/limits

soft 指的是當(dāng)前系統(tǒng)生效的設(shè)置值hard 指的是系統(tǒng)中所能設(shè)定的最大值
ulimit -n

4 修改進(jìn)程文件描述符限制
| 用戶級(jí)限制 (只對(duì)通過PAM登錄的用戶有效,對(duì)systemd的service資源不生效) |
系統(tǒng)級(jí)限制 | |
|---|---|---|
| 查看 | ulimit -n | 1.sysctl -a | grep -i file-max 2.cat /proc/sys/fs/file-max |
| 修改 (重啟失效) |
ulimit -SHn 65535 | 1.sysctl -w fs.file-max=65535 2.echo 65535>/proc/sys/fs/file-max |
| 修改 (永久生效) |
修改配置文件: /etc/security/limits.conf 最后一行加入: * soft nofile 65535 * hard nofile 65535 |
修改配置文件: /etc/sysctl.conf 在任意位置加入: fs.file-max=65535 執(zhí)行(不執(zhí)行則不生效): sysctl -p |
對(duì)于nginx,修改/etc/security/limits.conf就可以,同時(shí)需要在nginx配置文件中修改worker_rlimit_nofile