ulimit最大文件打开数
1、ulimit -n :单个进程可以打开的最大文件数。
#查看单个进程当前已打开的文件描述符, ls /proc/<PID>/fd | wc -l,如果这个数值接近 ulimit -n 设置的最大值,那就说明进程即将达到限制,需要调整。
2、cat /proc/sys/fs/file-nr:查看系统当前总共打开的文件描述符数量
# 1、当前已分配的文件描述符数量(即系统当前打开的文件数) 2、已分配但未使用的文件描述符(一般不关心)3、系统允许的最大文件描述符数(通常受 fs.file-max 限制)
6553600 cat /proc/sys/fs/file-max: 决定了 整个系统最多可以同时打开的文件描述符总数(所有进程加起来的总和)。
3、lsof -n | wc -l,使用 lsof 统计整个系统已打开文件数,如果这个数值接近 fs.file-max,那么系统可能会出现 “Too many open files” 错误lsof 统计 所有进程 打开的所有文件,包括普通文件(如 /var/log/messages)
Socket(网络连接) FIFO(管道) 设备文件 lsof 统计的文件句柄数 通常比 file-nr 大,因为它包括 socket、管道等。cat /proc/sys/fs/file-nr统计的是 系统级文件描述符总数,但不包括 socket 和管道。lsof -n | wc -l统计的是 所有进程打开的所有文件,包括 socket 和管道,所以通常值更大。
注:如果两者数值差距过大,可能是系统进程创建了大量 socket 或管道(如 Nginx、Redis、MySQL 等),建议用找出占用最多的进程。
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 10
lsof -p PID | awk '{print $5}' | sort | uniq -c | sort -nr 如果 SOCK 特别多,可能是进程创建了大量网络连接(如 Nginx、Redis、MySQL)。如果 REG 特别多,可能是进程打开了大量日志或数据库文件。如果 FIFO 过多,可能是管道泄露。

1、用命令查看句柄占用的最大进程 ,再查看当前占用句柄最大进程的 句柄数是多少 怎么用命令查看
命令1:ls /proc/*/fd | awk -F'/' '{print $3}' | sort | uniq -c | sort -nr | head -n 10
命令2:for pid in $(ps -eo pid --no-headers); do echo -n "$pid "; ls /proc/$pid/fd 2>/dev/null | wc -l; done | sort -nr -k2 | head -n 10 说明: ls /proc/*/fd:列出所有进程的文件描述符目录。 awk -F'/' '{print $3}':提取进程 PID。 sort | uniq -c:统计每个进程的文件描述符数量。 sort -nr:按数量倒序排序,最大的在前。 head -n 10:取前 10 个进程。
5901 55
1060 51
4735 45
4436 40
8289 25
# 进程 5901 打开了 55 个文件描述符,最多。 2、查看该进程具体占用了多少个句柄 ls /proc/PID/fd | wc -l 3、进一步分析占用的句柄 (1)如果想查看 该进程打开了哪些文件: lsof -p PID | less (2)如果想统计该进程打开了多少个不同类型的文件(如 socket、管道、文件等): lsof -p 1234 | awk '{print $5}' | sort | uniq -c | sort -nr 4、监控占用句柄最多的进程 如果你想实时监控占用句柄最多的进程,可以使用: # watch "ls /proc/*/fd | awk -F'/' '{print \$3}' | sort | uniq -c | sort -nr | head -n 10" # watch "lsof | awk '{print \$2}' | sort | uniq -c | sort -nr | head -n 10"

浙公网安备 33010602011771号