暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

资源限制命令详解及实践指南

老柴杂货铺 2025-04-11
102
一、核心功能
命令功能适用场景
ulimit
设置或显示用户进程资源限制(如文件描述符、CPU时间等)
控制进程资源占用,防止资源耗尽
lsof
列出系统当前打开的文件及关联进程
诊断文件泄漏、网络端口占用等问题

二、ulimit 使用与优化

1. 核心参数与用法

查看当前限制:

    ulimit -a          # 显示所有资源限制
    ulimit -n          # 查看文件描述符限制(默认1024)

    设置限制:

      ulimit -n 65535    # 临时设置当前会话的文件描述符上限为65535

      持久化配置:

      用户级:修改 /etc/security/limits.conf,例如:

        * soft nofile 65535
        * hard nofile 65535

        系统级:修改 /etc/sysctl.conf,例如:

          fs.file-max=1000000   # 系统全局文件描述符上限
          sysctl -p             # 生效配置

          2. 常见问题与解决

          错误示例:EMFILE (Too many open files)

          原因:进程打开文件数超过 ulimit -n 限制。

          排查:

            lsof -p <PID> | wc -l   # 统计指定进程的打开文件数

            解决:

            增大 ulimit -n 或修改 /etc/security/limits.conf。

            检查代码中未关闭的文件句柄(如循环中未释放资源)。 

            三、lsof 使用与注意事项

            1. 核心功能

            查看所有打开文件:

              lsof                    # 列出所有进程的打开文件
              lsof -i :80             # 查找占用80端口的进程
              lsof -u root            # 查看root用户打开的文件

              2. 常见误区与正确方法

              误区:使用 lsof | wc -l 统计文件描述符数可能不准确,因为:

              lsof 包含内存映射文件(FD 列标记为 mem)。

              不同 Linux 版本输出格式差异(如 CentOS 7 按线程显示)。

              正确统计方法:

                cat /proc/sys/fs/file-nr       # 系统全局已用/最大文件描述符数
                find /proc -name fd | wc -l    # 精确统计所有进程的fd总数

                四、联合使用案例

                场景:解决文件描述符耗尽问题

                检查系统限制:

                  ulimit -n                    # 用户级限制
                  cat /proc/sys/fs/file-max    # 系统级限制

                  定位泄漏进程:

                    sudo find /proc -print | grep -P '/proc/\d+/fd/' | awk -F '/' '{print $3}' | uniq -c | sort -rn | head

                    分析具体文件:

                      lsof -p <PID>                # 查看进程打开的文件详情

                      五、最佳实践总结

                      维度建议
                      ulimit
                      生产环境通过 /etc/security/limits.conf
                       持久化配置,避免依赖临时调整。
                      lsof
                      优先使用 /proc
                       文件系统统计 fd,避免因版本差异导致误判。
                      容器环境
                      Docker 中需通过 --ulimit
                       参数显式设置限制,覆盖宿主机默认值。
                      监控工具
                      结合 Prometheus + Grafana 监控系统级文件描述符使用趋势。

                      六、Windows 系统中的对应命令

                      1.ulimit 在 Linux 中用于设置进程资源限制(如文件描述符数量、内存等)。Windows 没有直接等效的命令,但可通过以下方式实现类似功能:

                      1)文件描述符限制

                      默认限制:Windows 没有全局文件描述符限制,但 MSVC 运行时库(如 msvcrt.dll)对单个进程的默认限制为 2048(可通过修改运行时库源码调整,但需重新编译)

                      系统级调整:通过注册表或组策略修改系统资源分配,例如:

                        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota

                        修改此键值可调整进程句柄数上限 

                        2)内存与 CPU 限制

                        任务管理器:手动限制进程的内存或 CPU 使用率(需针对每个进程设置)。

                        PowerShell:通过 Set-ProcessMitigation 控制进程资源使用 

                        3)开发框架支持

                        在代码中主动控制资源释放(如文件流关闭),避免依赖系统级限制。例如:

                          with open("file.txt""r"as f:  # 使用上下文管理器自动关闭文件
                              data = f.read()

                          2.lsof 在 Linux 中用于查看进程打开的文件和网络连接。Windows 的替代工具如下:

                          1)内置命令 openfiles

                          查询打开文件:

                            openfiles /query /v         # 显示所有打开文件的详细信息(需管理员权限)
                            openfiles /query /fo CSV    # 输出为 CSV 格式便于解析

                            断开文件连接:

                              openfiles /disconnect /id 1234  # 根据文件 ID 断开进程

                              2.PowerShell 脚本

                              通过 Get-Process 和 Get-NetTCPConnection 组合查询网络连接,结合脚本可实现自动化监控

                                Get-Process | Select-Object Name, Id, Path | Where-Object { $_.Path -like "*chrome*" }
                                Get-NetTCPConnection | Where-Object { $_.State -eq "Established" }

                                文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论