运行 debian jessie。以下操作以 root 身份执行,以避免任何权限问题。首先,我找到程序的 pid,然后检查其打开文件限制以验证它是否设置为 1024。但是当我计算打开文件的数量时,我发现 1851。
$ pgrep -x process_name
673
$ prlimit --pid 673 --nofile
RESOURCE DESCRIPTION SOFT HARD UNITS
NOFILE max number of open files 1024 4096
$ lsof -n -p 673 | grep -c "IPv4"
1851
为了确保万无一失,我检查了该进程是否没有任何可能将文件打开委托给的子进程:
$ pgrep -P 673
# no output
这里出了什么问题?
答案1
因为在您使用的方式中lsof
,您要计算所有内容,而不仅仅是文件描述符,请使用如下方法:
lsof -n -p <pid_number> | awk '$5 ~ /([0-9].+)/'
但更简单的方法是:
ls -l /proc/673/fd | wc -l