centos怎样查看系统中有多少个select的fd

nokia0125
二过头 2020-09-22 字数 215

如题,select最多能起1024个fd,我现在连续调用select,起的多了,就是报出:filedescriptor out of range in select(),so我想监控一下系统实时起了多少个fd,做出相应的动作,

那问题来了,我想知道查看select实时起的fd该用啥方法

19 个回复
nokia0125
二过头 2020-09-22

刚才在查了下,select的fd值最大是1024,那我怎样才能查看我系统里select值是否已经达到最大值,用啥样的参数?

【 在 nokia0125 的大作中提到: 】

: 如题,select最多能起1024个fd,我现在连续调用select,起的多了,就是报出:filedescriptor out of range in select(),so我想监控一下系统实时起了多少个fd,做出相应的动作,

: 那问题来了,我想知道查看select实时起的fd该用啥方法

iwannabe
I wanna be 2020-09-23

/proc/<pid>/fd

【 在 nokia0125 (二过头) 的大作中提到: 】

: 刚才在查了下,select的fd值最大是1024,那我怎样才能查看我系统里select值是否已

: 经达到最大值,用啥样的参数?

nokia0125
二过头 2020-09-23
nokia0125
二过头 2020-09-23

pwd

/proc/23917/fd这目录吗,这个目录下都是:

ls -lt

total 0

lrwx------ 1 root root 64 Sep 23 10:24 255 -> /dev/pts/8

lrwx------ 1 root root 64 Sep 23 10:03 0 -> /dev/pts/8

lrwx------ 1 root root 64 Sep 23 10:03 1 -> /dev/pts/8

lrwx------ 1 root root 64 Sep 23 10:03 2 -> /dev/pts/8

lr-x------ 1 root root 64 Sep 23 10:03 3 -> /var/run/utmp

【 在 iwannabe 的大作中提到: 】

: /proc/<pid>/fd

nokia0125
二过头 2020-09-23

看不懂啊

【 在 iwannabe 的大作中提到: 】

: /proc/<pid>/fd

nokia0125
二过头 2020-09-23

在网上仔细看了一下,fd值会累加,最多累加到1024,那我在哪里能看到当前fd值累加到多少了

gameplayer
*.* 2020-09-23

是当前进程,不是整个系统,这些fd是你自己添加到select里的,自己还不知道大小?

/proc/<pid>/fd下是pid对应的进程打开的文件描述符,数字就是fd,链接是fd对应的文件

别整select了,换了吧

【 在 nokia0125 (二过头) 的大作中提到: 】

: 如题,select最多能起1024个fd,我现在连续调用select,起的多了,就是报出:filedescriptor out of range in select(),so我想监控一下系统实时起了多少个fd,做出相应的动作,

: 那问题来了,我想知道查看select实时起的fd该用啥方法

nokia0125
二过头 2020-09-23

fd是自己添加到select里边的,没听懂,我理解fd是随着select调用而递增,最后到了1024就会报出out of range

【 在 gameplayer 的大作中提到: 】

: 是当前进程,不是整个系统,这些fd是你自己添加到select里的,自己还不知道大小?

: /proc/<pid>/fd下是pid对应的进程打开的文件描述符,数字就是fd,链接是fd对应的文件

: 别整select了,换了吧

: ...................

gameplayer
*.* 2020-09-23

fd是确实是系统分配给你的,但调用select前不得自己用FD_SET添加进去吗?你添加的

时候检查一下是不是超过1024不行吗?

【 在 nokia0125 (二过头) 的大作中提到: 】

: fd是自己添加到select里边的,没听懂,我理解fd是随着select调用而递增,最后到了1024就会报出out of range

iwannabe
I wanna be 2020-09-23

FD_SET是把fd进行位操作,所以不能大于1024, 换poll 吧,功能一样

【 在 nokia0125 (二过头) 的大作中提到: 】

: fd是自己添加到select里边的,没听懂,我理解fd是随着select调用而递增,最后到了

: 1024就会报出out of range

wzl12356
wande 2020-09-23

内核配置的参数。 1024是默认值,可以大于1024,但是需要重编内核

发自「今日水木 on iPhone 7」

【 在 nokia0125 的大作中提到: 】

: 如题,select最多能起1024个fd,我现在连续调用select,起的多了,就是报出:filedescriptor out of range in select(),so我想监控一下系统实时起了多少个fd,做出相应的动作,

: 那问题来了,我想知道查看select实时起的fd该用啥方法

: --

nokia0125
二过头 2020-09-23

ok,明白

【 在 wzl12356 的大作中提到: 】

: 内核配置的参数。 1024是默认值,可以大于1024,但是需要重编内核

: 发自「今日水木 on iPhone 7」

adoal
阿豆 2020-09-23

但是一般不建议这么做……

【 在 nokia0125 (二过头) 的大作中提到: 】

: ok,明白

nokia0125
二过头 2020-09-24

好的,明白,谢谢大家

【 在 adoal 的大作中提到: 】

: 但是一般不建议这么做……

ylh1969
没谱 2020-11-13

fd本身<1024即可。

为啥不用epoll?没有限制的。

【 在 nokia0125 的大作中提到: 】

: 刚才在查了下,select的fd值最大是1024,那我怎样才能查看我系统里select值是否已经达到最大值,用啥样的参数?

nokia0125
二过头 2020-11-14

用的是python下的pexpect,它管理底层socket调用,用的是select

【 在 ylh1969 的大作中提到: 】

: fd本身<1024即可。

: 为啥不用epoll?没有限制的。

nokia0125
二过头 2020-11-14

因为用了pexpect远程的方式登陆主机,管理多个socket 链接用的select, 现在问题是pexpect 链接到了一定的数目就再也登不上,提示select out of range,

gameplayer
*.* 2020-11-14

pexpect的spawn有参数use_poll:

The use_poll attribute enables using select.poll() over select.select() for

socket handling. This is handy if your system could have > 1024 fds

https://pexpect.readthedocs.io/en/stable/api/pexpect.html#pexpect.spawn.__in

it__

【 在 nokia0125 (二过头) 的大作中提到: 】

: 因为用了pexpect远程的方式登陆主机,管理多个socket 链接用的select, 现在问题是pexpect 链接到了一定的数目就再也登不上,提示select out of range,

nokia0125
二过头 2020-11-15

ok

【 在 gameplayer 的大作中提到: 】

: pexpect的spawn有参数use_poll:

: The use_poll attribute enables using select.poll() over select.select() for

: socket handling. This is handy if your system could have > 1024 fds

: ...................