系统参数心得

1.为什么linux最大端口数是65535个

答:因为IP的端口是双字节,所以也就是2*16,所以端口号是0-65536,但是0一般不用,所以是65535个端口,这也是linux本地最大的端口数,因此本地能监听65535个端口

 

2.文件的最大打开数

答:(1)在操作系统中,最大打开文件数有soft和hard限制之分,而soft<=hard,soft限制了打开文件的数值,而hard限制了soft的最大值,实际文件打开数绝不会超过soft的值

  (2)虽然在操作系统中的/etc/security/limits.conf文件中,我们是分用户进行文件打开书限制的,因此,不同的用户最大文件打开数不同,但是,实际上最大文件打开数限制的是用户单个进程的最大打开数。以1024为例,属于普通用户的任意一个进程最大打开文件数都不能超过1024,但是该用户所有的进程加起来文件打开总数是没有限制的,比如总的打开文件数可能是10000,甚至更多。

  (3)即使是用一个程序,多次打开同一个文件,文件打开数也会累加,并不会看作是只有一个打开文件数

 

3.关于网络连接对文件打开数的影响

答:只要有一个listening和established状态的网络连接,就会占用一个文件打开数。所以,在web应用的访问量稍大时,如果是单进程的话,即使不算应用本身打开的常规文件,由于网络连接数过多,也会导致超过设置的最大文件打开数。(根据man文档中的说法,一个打开文件可能是一个常规文件、一个目录、一个块设备文件、一个字符设备文件、一个正在执行的文件引用、一个库、一个流或一个网络文件(网络socket,NFS文件或UNIX socket)。所以,网络连接也算。我估计,这可能是因为在程序中,要访问这些对象时,都有点类似于访问文件那样,需要打开)

 

4.是否修改了/etc/security/limits.conf文件中的ulimit限值(包括打开文件数)后,就能保证它对所有的程序生效?

这是错误的。事实上来说,limits.conf文件中的限值对通过启动脚本来启动的程序并不生效。比如,nginx程序有一个启动脚本/etc/init.d/nginx并设置了开机启动。那么,即便你修改了limits.conf文件中的限值,当服务器重启后,nginx程序自动启动了,它的ulimit限值将还会是默认值,而不会是你设置的值。当然,如果你此时登录进系统,并通过nginx开机启动脚本重启了nginx程序,nginx进程的ulimit限值自然会变为你在limits.conf文件中设置的限值。

关于这个问题的原因,我也没有找到什么权威的资料说明,但我估计可能是这样的。以CentOS 6系统为例,因为系统启动时,系统中的所有进程都是由第一支程序/sbin/init带起的。而limits.conf文件中的限值对/sbin/init程序并不生效,所以/sbin/init进程的ulimit限值仍然是默认值。这就导致它所启动的所有子进程,即系统中的所有其它程序,都继承它的ulimit限值,即默认值。

 

一个程序可以监听n多个端口,这个对与linux的65535个端口是没有关系的,一个网卡监听65535个端口,n个网口就是n * 65535。

 

posted @ 2019-06-21 10:53  爱热闹的杨小厨  阅读(281)  评论(0编辑  收藏  举报