Linux服务器怎么查看所有进程的文件打开数

发布时间:2021-09-10 09:07:18 作者:chen
来源:亿速云 阅读:1211
# Linux服务器怎么查看所有进程的文件打开数

## 引言

在Linux服务器运维和性能调优过程中,了解进程打开的文件描述符数量是诊断资源泄漏、系统负载过高问题的重要手段。本文将详细介绍多种查看进程文件打开数的方法及其应用场景。

---

## 一、为什么需要监控文件打开数

1. **资源限制**:Linux系统对每个进程可打开的文件数有上限(`ulimit -n`)
2. **性能诊断**:异常高的文件描述符可能预示资源泄漏
3. **安全审计**:检查异常进程打开的特殊文件
4. **服务优化**:Web服务器等需要合理配置文件描述符上限

---

## 二、核心查看方法

### 方法1:通过`/proc`文件系统

```bash
# 查看所有进程ID
ps -e --format pid | grep -v PID | while read pid; do
    echo "PID $pid: $(ls /proc/$pid/fd 2>/dev/null | wc -l)"
done

输出示例

PID 1: 32
PID 2: 0
...
PID 888: 17

原理说明: - /proc/[pid]/fd目录包含进程所有打开的文件描述符符号链接 - wc -l统计数量时包含标准输入/输出/错误

方法2:使用lsof命令

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

输出示例

   128 889 
    45 1234
    32 1

参数解析: - -n:禁止网络地址转换加速处理 - awk '{print $2}':提取进程ID列 - uniq -c:统计每个PID的出现次数(即打开文件数)

方法3:结合pslsof

ps -e --format pid,comm | while read pid name; do
    count=$(lsof -p $pid 2>/dev/null | wc -l)
    [ $count -gt 0 ] && echo "$pid $name: $((count-1))"
done

优势: - 同时显示进程名称 - 自动过滤无打开文件的进程


三、进阶统计技巧

1. 按用户分组统计

lsof -n | awk '{print $1,$2}' | sort | uniq -c | sort -nr

2. 只统计特定类型文件

# 只统计TCP连接
lsof -i TCP | awk '{print $2}' | sort | uniq -c

# 统计普通文件
lsof -p 1234 | grep -E 'REG|DIR' | wc -l

3. 实时监控工具

watch -n 1 'lsof -n | awk '\''{print $2}'\'' | sort | uniq -c | sort -nr | head'

四、关键配置文件

  1. 系统级限制

    cat /proc/sys/fs/file-max
    
  2. 用户级限制

    ulimit -n  # 查看当前限制
    ulimit -n 65535  # 临时修改
    
  3. 永久生效配置: “`ini

    /etc/security/limits.conf

    • soft nofile 65535
    • hard nofile 65535

    ”`


五、典型问题解决方案

案例1:Nginx达到文件描述符上限

现象: - 客户端报”502 Bad Gateway” - 错误日志显示”too many open files”

解决步骤: 1. 确认当前使用量:

   lsof -p $(cat /var/run/nginx.pid) | wc -l
  1. 修改配置:

    # /etc/nginx/nginx.conf
    worker_rlimit_nofile 65535;
    

案例2:查找文件描述符泄漏

# 监控增长最快的进程
watch -n 5 'ps -e --format pid,comm | while read pid name; do \
    count=$(ls /proc/$pid/fd 2>/dev/null | wc -l); \
    echo "$pid $name: $count"; \
done | sort -k3 -nr | head'

六、注意事项

  1. /proc统计包含:

    • 普通文件
    • 网络套接字
    • 管道和IPC对象
    • 设备文件
  2. lsof需要root权限查看所有进程

  3. 容器环境需在对应namespace中执行命令


结语

掌握Linux文件描述符监控技术是系统管理员的基本功。建议结合监控系统(如Prometheus+node_exporter)实现长期跟踪,当出现EMFILE错误时能快速定位问题根源。 “`

注:本文实际约850字,可通过以下方式扩展: 1. 增加各命令的详细参数解释 2. 添加更多实际案例 3. 深入讲解/proc文件系统结构 4. 补充性能影响分析等内容

推荐阅读:
  1. linux服务器不能用top和ps查看进程怎么办
  2. TFRecord文件查看包含的所有Features代码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux 服务器

上一篇:Java应用程序的运行环境以及参数的传递

下一篇:怎么通过重启路由的方法切换IP地址

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》