linux句柄数管理

linux句柄数管理

在linux系统设计里面遵循一切都是文件的原则,即磁盘文件、目录、网络套接字、磁盘、管道等,所有这些都是文件,在我们进行打开的时候会返回一个文件句柄。
如果频繁的打开文件,或者打开网络套接字而忘记释放就会有句柄泄露的现象,从而句柄数量超限,将产生拒绝服务的严重问题。
以下是对linxu句柄数管理的常用命令:

1.查看句柄限制

  • ulimit -a : 查看所有限制
  • ulimit -n : 一个进程打开的最大打开文件句柄数,这个句柄数包含socket连接的数量,进而影响Mysql的并发数量限制,默认值是1024.
       [dev@iZ2310wqq66Z ~]$ ulimit -n
       65533
       [dev@iZ2310wqq66Z ~]$ ulimit -n 65535
       -bash: ulimit: open files: cannot modify limit: Operation not permitted
       [dev@iZ2310wqq66Z ~]$ ulimit -n 65532
       [dev@iZ2310wqq66Z ~]$

ulimit命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效
查看整个系统当前句柄数量:

       cat /proc/sys/fs/file-nr
       或:
       cat /proc/sys/fs/file-max

2. 查看进程使用的句柄

查看每个进程开了哪个句柄:

       lsof  : 查看所有
       lsof -p pid : 查看某个进程打开的句柄
       lsof |grep pid : 同上,也可以查看某个进程打开的句柄

lsof -p pid的结果如下:

       COMMAND   PID USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
       java    10281 work  cwd    DIR             202,21      4096  8654176 /data/work/runtime/order-web-apache-tomcat/webapps
       java    10281 work  rtd    DIR              202,1      4096        2 /
       java    10281 work  txt    REG             202,21      7718  8653395 /data/work/soft/jdk1.7.0_51/bin/java
       java    10281 work  mem    REG              202,1    157072   269638 /lib64/ld-2.12.so
       java    10281 work  mem    REG              202,1   1926520   270869 /lib64/libc-2.12.so
       java    10281 work  mem    REG              202,1    145936   262166 /lib64/libpthread-2.12.so
       java    10281 work  mem    REG              202,1     22536   270871 /lib64/libdl-2.12.so
       java    10281 work  mem    REG              202,1     47168   270876 /lib64/librt-2.12.so
       java    10281 work  mem    REG              202,1    599392   270878 /lib64/libm-2.12.so
       java    10281 work  mem    REG              202,1     93320   269129 /lib64/libgcc_s-4.4.7-20120601.so.1
       java    10281 work  mem    REG              202,1  99158576  1059653 /usr/lib/locale/locale-archive
       java    10281 work  mem    REG             202,21   3695578  8652829 /data/work/soft/jdk1.7.0_51/jre/lib/charsets.jar
       java    10281 work  mem    REG              202,1    217016   786460 /var/db/nscd/hosts
       java    10281 work  mem    REG             202,21    256462  8652606 /data/work/soft/jdk1.7.0_51/jre/lib/amd64/libsunec.so
       java    10281 work  mem    REG             202,21     45811  8652651 /data/work/soft/jdk1.7.0_51/jre/lib/amd64/libmanagement.so
       java    10281 work  mem    REG             202,21    114742  8652636 /data/work/soft/jdk1.7.0_51/jre/lib/amd64/libnet.so
       java    10281 work  mem    REG             202,21     91178  8652626 /data/work/soft/jdk1.7.0_51/jre/lib/amd64/libnio.so

表头说明 :
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如 cwd、txt等
TYPE:文件类型,如 DIR、REG、IPV4、FIEO等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

3.永久修改最大句柄数:

久修改最大句柄数需要修改/etc/security/limits.conf文件。

       * soft nofile 65535
       * hard nofile 65535

其中星号代表全局,对所有用户生效,可以针对不同的用户做出不同的限制。硬限制是实际的限制,而软限制,是warnning限制,只会做出warning。
修改完后之后重新登录,分别用root用户和普通用户的limit -n查看,进行验证。

你可能感兴趣的:(运维)