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查看,进行验证。