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 | less2)如果想统计该进程打开了多少个不同类型的文件(如 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" 

 

  

posted @ 2025-03-18 13:24  LB_运维技术  阅读(127)  评论(0)    收藏  举报