Linux下查看及修改进程打开的文件句柄数量

本文介绍了一种解决Tomcat启动后用户无法登录的问题,该问题由文件句柄数量限制引起。文中提供了检查Linux系统文件句柄数量的方法,并详细说明了如何通过修改配置文件来增加文件句柄的数量限制。
源:http://blog.youkuaiyun.com/kobejayandy/article/details/47128349
https://my.oschina.net/pwd/blog/373092?p=1
评:编写的通讯程序,tomcat启动用户无法登录,且报Caused by: java.lang.OutOfMemoryError: unable to create new native thread,问题原因是当前用户文件句柄设置导致,操作系统当时设置为 1024,[b]且需要注意,重新打开shell终端才能ulimit查看生效[/b]


----查看Linux系统默认的最大文件句柄数,系统默认是1024
# ulimit -n
1024
----查看Linux系统某个进程打开的文件句柄数量
# lsof -n | grep 5950 -c
212
----修改Linux系统的最大文件句柄数限制的方法:
1)ulimit -n 65535
针对当前session有效,用户退出或者系统重新后恢复默认值
2)修改profile文件:在profile文件中添加:ulimit -n 65535
只对单个用户有效
3)[b]修改文件:/etc/security/limits.conf[/b],在文件中添加:(立即生效-当前session中运行ulimit -a命令无法显示)
[b]* soft nofile 32768 #限制单个进程最大文件句柄数(到达此限制时系统报警)
* hard nofile 65536 #限制单个进程最大文件句柄数(到达此限制时系统报错)[/b]
4)修改文件:/etc/sysctl.conf。在文件中添加:
fs.file-max=655350 #限制整个系统最大文件句柄数
运行命令:/sbin/sysctl -p 使配置生效

----------------
附录:
附录1:centos 6.*可以修改[b]/etc/security/limits.d/90-nproc.conf[/b]
但,centos 5.*并没有90-nproc.conf这个文件,我这边是通过修改/etc/security/limits.conf,在最后添加
[b]* soft nproc 65535
* hard nproc 65535[/b]
<think>首先,用户的问题是:我想查找在Linux系统中查看一个进程打开文件数量的方法。请问Linux系统查看一个进程打开文件数量的方法? 我需要基于提供的引用信息来回答。引用内容是关于Linux系统中查看文件打开数量的方法,具体包括: - 引用[1]:使用ps -e查看进程号,然后用lsof -p 进程号列出文件,最后用lsof -p 进程号 | wc -l统计数量。 - 引用[2]:提到了lsof命令和/proc/<PID>/fd目录,需要权限,如sudo。 - 引用[3]:讨论了打开文件数量限制,使用ulimit -a查看。 - 引用[4]:描述了文件句柄限制的问题。 用户的问题是专门询问查看一个进程打开文件数量的方法,所以我应该专注于回答这个具体问题。 系统指令要求: - 使用中文回答。 - 结构清晰,逐步解决问题。 - 引用段落末尾自然地添加引用标识,例如[^1]。 - 生成相关问题。 - 使用LaTeX格式:行内数学表达式用$...$,独立公式用$$...$$单独成段。但在这个上下文中,可能没有数学表达,所以可能不需要。 回答结构应该清晰,帮助用户一步步操作。 关键方法是: 1. 获取进程的PID(进程号)。 2. 使用lsof命令或查看/proc目录来列出打开文件。 3. 统计数量。 基于引用: - 引用[1]给出了步骤:使用ps -e找PID,然后用lsof -p PID | wc -l。 - 引用[2]提到了权限问题,需要sudo。 - 引用[3]和[4]是关于限制的,但不是直接查看方法;用户问题是查看数量,不是修改限制。 所以,我应该总结方法: 步骤: 1. 找到目标进程的PID。可以使用ps命令,如ps aux | grep 进程名。 2. 使用lsof命令查看打开文件:lsof -p PID。然后统计行数:lsof -p PID | wc -l。 3. 替代方法:查看/proc/PID/fd目录,用ls /proc/PID/fd | wc -l统计符号链接数量。 需要提到权限:可能需要sudo。 引用来源:[^1]、[^2]。 生成相关问题:回答末尾添加相关问题列表。 例如: §§相关问题§§ 1. 如何修改Linux系统的文件打开数量限制? 2. lsof命令的其他用途是什么? 3. 为什么进程文件打开数量很重要? 确保回答真实可靠,基于引用。 最终回答结构: - 简介。 - 详细步骤。 - 注意事项(如权限)。 - 相关问题。 </think>### Linux系统中查看一个进程打开文件数量的方法 在Linux系统中,查看特定进程打开文件数量是一个常见的系统管理任务,主要用于监控资源使用或诊断“too many open files”等问题。基于您的需求和参考内容,我将分步骤清晰地解释操作流程。核心方法是使用`lsof`命令或直接查看`/proc/<PID>/fd`目录,这两种方式都需要适当的权限(通常需要`sudo`或root用户权限)[^2]。下面是详细步骤: #### 步骤1: 获取目标进程的PID(进程号) 要查看一个进程文件打开数量,首先需要确定该进程的PID。您可以使用`ps`命令结合`grep`来查找进程: - 使用`ps -e`或`ps aux | grep 进程名`命令搜索进程。例如,要查找名为“nginx”的进程: ```bash ps aux | grep nginx ``` 输出结果中,第一列通常是PID(例如,显示为 `1234`)。记下这个PID值。 #### 步骤2: 使用`lsof`命令查看并统计文件数量 `lsof`(list open files)是最常用的工具,它能列出进程打开的所有文件(包括普通文件、套接字、管道等)。引用[^1]和[^2]推荐了以下方法: - 运行`lsof -p PID`列出该进程的所有打开文件: ```bash sudo lsof -p 1234 ``` 注意:此处需使用`sudo`以避免权限错误[^2]。 - 直接统计文件数量,使用管道符结合`wc -l`命令: ```bash sudo lsof -p 1234 | wc -l ``` 输出结果是一个数字,表示该进程当前打开文件总数(包括所有文件描述符)。例如,显示`102`表示有102个打开文件。 #### 步骤3: 替代方法——查看`/proc/<PID>/fd`目录 如果您无法使用`lsof`(如系统未安装该工具),可以通过`/proc`虚拟文件系统实现。该方法更底层且高效: - 进入进程的fd目录: ```bash ls /proc/1234/fd ``` 这个目录包含了所有文件描述符的符号链接(symbolic links)。 - 统计符号链接数量(每个链接对应一个打开文件): ```bash sudo ls /proc/1234/fd | wc -l ``` 输出同样是一个数字,表示文件数量。例如,`98`表示98个打开文件。 #### 注意事项 - **权限要求**:上述命令通常需要管理员权限(使用`sudo`),尤其是当进程由其他用户运行时[^2]。否则可能会报错“Permission denied”。 - **准确性**:`lsof`命令会列出所有打开文件类型(包括网络套接字),而`/proc/fd`目录仅显示文件描述符链接。两者统计结果可能有轻微差异,但通常用于诊断已足够。 - **常见问题**:如果文件数量接近系统限制(默认1024,可通过`ulimit -n`查看[^3]),可能会导致“can't open so many files”错误[^4]。这时需要检查和调整限制(如修改`ulimit`或系统配置文件),但这不属于本次问题的范围。 - **性能影响**:`lsof`可能会稍慢于`/proc`方法,尤其在大量文件时;建议优先使用`/proc/fd`以降低系统负载[^2]。 通过以上步骤,您就能快速查看任意进程文件打开数量。这些方法在大多数Linux发行版(如Ubuntu、CentOS)中通用,且基于实际系统管理实践。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值