一、limit浅析之inode
inode 或i节点是指对文件的索引,即属性记录目录。如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等。就像书本的目录一样,便于查找和管理。这目录是操作系统需要的,用来找文件或叫管理文件。许多操作系统都用到这个概念,如linux, 某些嵌入式文件系统等。当然,对某个系统来说,有许多i节点。所以对i节点本身也是要进行管理的。
在linux中,内核通过inode来找到每个文件,但一个文件可以被许多用户同时打开或一个用户同时打开多次。这就有一个问题,如何管理文件的当前位移量,因为可能每个用户打开文件后进行的操作都不一样,这样文件位移量也不同,当然还有其他的一些问题。所以linux又搞了一个文件描述符(file descriptor)这个东西,来分别为每一个用户服务。每个用户每次打开一个文件,就产生一个文件描述符,多次打开就产生多个文件描述符,一一对应,不管是同一个用户,还是多个用户。该文件描述符就记录了当前打开的文件的偏移量等数据。所以一个i节点可以有0个或多个文件描述符。多个文件描述符可以对应一个i节点。
1.1 limit 怎么进行修改
最近在搞RabbitMQ 集群(一种消息中间件),遇到了个是就是每次打开的句柄数很少默认1024,可以使用 ulimit -n 查看你当前系统的nofile 数:
[root@rabbit1 ~]# ulimit -n
1024
想要修改文件句柄数,有两种方式
方法一 、使用 ulimit -n number(期待的句柄数)
[root@rabbit1 ~]# ulimit -n 65536
[root@rabbit1 ~]# ulimit -n
65536
此时,只需要重新启动你的RabbitMQ 即可生效,但是重启后失效。
方法二、通过修改配置文件,永修生效
1.修改文件 /etc/sysctl.conf
[root@rabbit1 ~]# cat /etc/sysctl.conf
# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
fs.file-max=1610391 #number 修改需要的
[root@rabbit1 ~]# sysctl -p
fs.file-max = 1610391
2.修改limit 配置文件 vim /etc/security/limits.conf
[root@rabbit1 ~]# tail -n 15 /etc/security/limits.conf
root soft nproc 655350 #soft 进程数
root hard nproc 655350 #hard 进程数
root soft nofile 6555 #soft 文件句柄数
root hard nofile 6555 #hard 文件句柄数
# End of file
[root@rabbit1 ~]#
** 注: root 可以写成 * 即所有用户,同时也可以指定具体用户名,如rabbitmq
退出当前用户登录,重新登陆终端,并重新重启 RabbitMQ 将会永久生效。
[root@rabbit1 ~]# ulimit -n
6555
通过重新登录Web UI 查看当前的file 、Socket 句柄数都相应的得到了扩展。
到此,也就简单的介绍了Linux 系统修改句柄数的方法。热爱分享、交流。欢迎讨论!