linux 文件句柄数查看命令

本文介绍如何解决服务器因并发过大导致的“toomanyopenfiles”问题,包括检查和调整Linux系统的文件句柄限制。

当你的服务器在大并发达到极限时,就会报出“too many open files”。

查看线程占句柄数

ulimit -a

输出如下:
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 59367
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 59367
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

其中:
open files                      (-n) 1024         代表每个

查看系统打开句柄最大数量

more /proc/sys/fs/file-max

查看打开句柄总数

lsof|awk '{print $2}'|wc -l

根据打开文件句柄的数量降序排列,其中第二列为进程ID:

lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more

根据获取的进程ID查看进程的详情

ps -ef |grep 

修改linux单进程最大文件连接数

修改linux系统参数。vi /etc/security/limits.conf 添加
*  soft  nofile  65536
*  hard  nofile  65536
修改以后保存,注销当前用户,重新登录,执行ulimit -a ,ok ,参数生效了:
<think>嗯,用户现在想查找用于查看用户占用文件句柄数命令。之前他们提到了`ps -eLf |wc-l`,但这次是关于文件句柄数的。根据提供的引用,我需要整理相关的命令。首先,引用[1]提到用`lsof`命令查看打开的文件句柄数,比如`lsof |awk'{print$2}' |wc-l`统计总数,还有根据进程ID排序的方法。用户可能需要按用户来统计,所以应该用`lsof`结合用户过滤。然后,引用[2]和[3]讨论了ulimit设置和文件句柄数的限制,但用户的问题不是设置,而是查看。不过这些引用中的命令可能对用户有帮助,比如`ulimit-n`显示当前限制,但用户需要的是实际占用数,而不是限制。 所以,核心命令应该是`lsof -u username`来列出特定用户打开的文件,然后通过管道统计。例如,`lsof-uroot| wc -l`统计root用户的句柄数。或者使用`lsof -u username| awk'{print$2}' |sort |uniq-c`来查看每个进程的情况。 另外,用户可能需要系统级别的总句柄数,如`cat/proc/sys/fs/file-nr`,但用户明确要求按用户查看,所以重点在`lsof`的用户过滤选项。 还需要注意,`lsof`可能需要root权限才能查看所有信息,普通用户可能看不到其他用户的进程。因此,在命令前可能需要sudo。 然后,如何汇总不同用户的句柄数?可以用`lsof`输出中的第三列是用户,所以可以用`lsof |awk '{print $3}'| sort| uniq -c`来统计每个用户的句柄数。不过这个方法可能不够准确,因为可能包括不同列中的用户信息,需要确认`lsof`输出的列位置。根据`lsof`的默认输出,第三列确实是用户,所以正确的命令应该是`lsof |awk '{print $3}'| sort| uniq -c |sort -nr`,这样就能按用户统计打开的句柄数,并按数量降序排列。这样用户就能看到每个用户占用的文件句柄数了。 总结一下,用户需要的是按用户查看文件句柄数命令,所以主要使用`lsof`结合`awk`处理,按第三列统计。同时,可能需要处理标题行的问题,比如使用`tail -n +2`来跳过标题,确保统计准确。另外,引用中提到的`/proc/sys/fs/file-max`是系统总限制,而用户的问题是关于具体用户的占用情况,所以这个可能作为补充信息提及,但主要回答应集中在`lsof`的命令上。</think>### Linux 查看用户文件句柄数命令详解 --- #### 1. **按用户统计文件句柄数** 使用 `lsof` 命令结合用户过滤和统计: ```bash lsof | awk '$3 == "<用户名>" {count++} END {print count}' # 统计指定用户的句柄数[^1] ``` 或列出所有用户的句柄数分布: ```bash lsof | awk '{print $3}' | sort | uniq -c | sort -nr # 按用户分组统计并降序排列[^1] ``` - **输出示例**: ``` 1024 root 768 mysql 512 nginx ``` - **说明**:第三列 `$3` 表示用户名,`uniq -c` 统计重复项数量[^1] --- #### 2. **查看进程级句柄数分布** 对特定用户(如 `nginx`)的进程进行深度分析: ```bash lsof -u nginx | awk '{print $2}' | sort | uniq -c | sort -nr # 统计用户nginx的各进程句柄数[^1] ``` - **输出含义**: ``` 256 12345 (PID=12345的进程占256个句柄) 128 67890 (PID=67890的进程占128个句柄) ``` --- #### 3. **系统级句柄数监控** - **查看系统总句柄数**: ```bash cat /proc/sys/fs/file-nr # 输出格式:$A $B $C$,其中$B$为已分配句柄数[^1] ``` 数学关系:$B \leq C$($C$为`file-max`定义的系统最大值) - **查看系统限制**: ```bash cat /proc/sys/fs/file-max # 系统最大句柄数[^1] ``` --- #### 4.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值