linux下查看系统进程占用的句柄数

---查看系统默认的最大文件句柄数,系统默认是1024

# ulimit -n

1024

 

----查看当前进程打开了多少句柄数

# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

131 24204 

57 24244  

57 24231   ........

其中第一列是打开的句柄数,第二列是进程ID。

可以根据ID号来查看进程名。

# ps aef|grep 24204

nginx  24204 24162 99 16:15 ?    00:24:25 /usr/local/nginx/sbin/nginx -s

 

Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:

# ulimit -HSn 4096

以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后.


查看进程占用的句柄数有几种办法:

1) 通过cat/proc/pid/fd可以查看线程pid号打开的线程;

2) 通过lsof命令, /usr/sbin/lsof-p 21404 命令结果如下:

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
vas 21404 root cwd DIR 8,3 4096 30195729 /home/users/root/vas
vas 21404 root rtd DIR 8,2 4096 2 /
vas 21404 root txt REG 8,3 112201650 30195914 /home/users/root/vas

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

另外通lsof命令也可以查看占用端口(下面查看的是9001端口被哪个进程占用)的进程:

/usr/sbin/lsof-i :9001


你可能感兴趣的:(linux实用方法)