根据PID寻找程序源位置--lsof

ulimit其实就是对单一程序的限制,进程级别的

file-max是所有时程最大的文件数

nr_open是单个进程可分配的最大文件数

确认系统设置的最大文件句柄数 
ulimit -a

统计系统中当前打开的总文件句柄数 
lsof|awk '{print $2}' |wc -l

根据打开文件句柄的数量降序排列,其中第二列为进程ID: 
lsof|awk '{print $2}' |sort|uniq -c|sort -nr|more

查看23711进程连接句柄数

lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more|grep 23711

查看系统级别的能够打开的文件句柄的数量,Centos7默认是794168

cat /proc/sys/fs/file-max

 限制整个系统最大文件句柄数,修改文件:/etc/sysctl.conf

fs.file-max=655350 

---------------------------------------------------------------------------------------

当我们得知某个进程的PID后,可以根据PID查找执行程序的路径

进入内存目录,查看对应PID目录下exe文件的信息:

# ls -al /proc/xxxx/exe

这样就找到了进程对应的完整执行程序的路径。

如果也想同时查找到该进程打开的所有文件,当然包括配置文件等,可以使用

# lsof -p xxxx

比较实用的 lsof相关命令:

lsof `which httpd` //那个进程在使用apache的可执行文件
lsof /etc/passwd //那个进程在占用/etc/passwd
lsof /dev/hda6 //那个进程在占用hda6
lsof /dev/cdrom //那个进程在占用光驱
lsof -c sendmail //查看sendmail进程的文件使用情况
lsof -c courier -u ^zahn //显示出那些文件被以courier打头的进程打开,但是并不属于用户zahn
lsof -p 30297 //显示那些文件被pid为30297的进程打开
lsof +d /DIR/ 显示目录下被进程打开的文件 
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长  lsof
-u1000 //查看uid是100的用户的进程的文件使用情况 lsof -utony //查看用户tony的进程的文件使用情况 lsof -u^tony //查看不是用户tony的进程的文件使用情况(^是取反的意思) lsof -i //显示所有打开的端口 lsof -i:80 //显示所有打开80端口的进程 lsof -i -U //显示所有打开的端口和UNIX domain文件 lsof -i UDP@[url]www.akadia.com:123 //显示那些进程打开了到www.akadia.com的UDP的123(ntp)端口的链接 lsof -i tcp@ohaha.ks.edu.tw:ftp -r //不断查看目前ftp连接的情况(-r,lsof会永远不断的执行,直到收到中断信号,+r,lsof会一直执行,直到没有档案被显示,缺省是15s刷新) lsof -i tcp@ohaha.ks.edu.tw:ftp -n //lsof -n 不将IP转换为hostname,缺省是不加上-n参数
原文地址:https://www.cnblogs.com/wjoyxt/p/5145413.html