码迷,mamicode.com
首页 > 其他好文 > 详细

lsof__强大的系统监控、诊断命令

时间:2015-10-23 00:18:23      阅读:483      评论:0      收藏:0      [点我收藏+]

标签:lsof 磁盘满 df du

 lsof 意思是‘List Open Files’它可以列出各种进程打开的文件的信息,centos6.4中默认是不带lsof这个命令的.要想使用它首先的通过yum -y install lsof 安装。

技术分享

lsof 默认不带任何参数,将输出所有进程打开的所有文件.当然这个不是我们所需要的


1.lsof  文件名|设备名:    查看文件、设备被哪些进程使用

   lsof /usr/local/tomcat/conf/server.xml

   技术分享


2.出某个目录下被打开的文件

  lsof +D /var/log

 技术分享


3.指定进程号查看该进程打开的文件

  lsof -p 1612

技术分享


4.查看指定用户所打开的所有进程跟文件

   lsof -u root

  技术分享


5.查看指定端口有哪些进程在使用

  lsof -i:22

 技术分享


6.例出所有的tcp、udp连接

  lsof -i tcp

  lsof -i upd

技术分享


7.查看指定网口有哪些进程在使用

   lsof -i@192.168.1.207

   技术分享


8.查看指定程序打开的文件

  lsof -c java

  技术分享


9.lsof 组合逻辑查询

  -a 与

  -o 或

  ^ 非

  lsof -a -u mysql -c java

  技术分享

 lsof -o -u mysql -c java

  技术分享

 lsof -u ^root



10.生产环境中用lsof解决问题的一则案例

   朋友前段时间跟我说他有台服务器/dev/sda1挂载的那个目录满了,然后他清了一批日志之类的东西,过了不久又满了。他用df -h查看确实使用率为100%,容量50G使用50G ,而当他用du -sh  /dev/sda1的时候,使用才20多G,但是确实是写不进去文件了..

  让他用lsof -n | grep deleted 看一下,该命令会把所有未释放文件句柄的进程例出来.朋友一查,mongodb 日志占了20多G.重启mongodb进程,把日志配置到磁盘容量大的目录,然后做日志滚动问题解决。


  为什么df命令跟du命令会出有如此大的差异呢?这就跟他们的实现原理有关系了.

    du 命令根据指定文件系统中的所有目录、符号连接、和文件使用的块数累加得到文件系统使用容量的总和,文件系统记录自身的数据如i节点、磁盘分布图、超级块等等这些数据du命令是不统计的。du命令是用户级程序,只能获取文件系统的部分情况.

    df命令则是通过磁盘分布图得出的总块数和使用块数,获得的是真正的文件系统数据.linux下面文件只是一个指向inode的链接,inode链接包含了文件的所有属性,如权限和所有者等,当我们删除一个文件,实际上只是删除了指向inode的链接,并没有删除inode的内容,前面引用的进程还可以引用,只有当链接完全移除,这些inode才能被写入新的内容。


本文出自 “左手右手” 博客,请务必保留此出处http://mofeihu.blog.51cto.com/1825994/1705356

lsof__强大的系统监控、诊断命令

标签:lsof 磁盘满 df du

原文地址:http://mofeihu.blog.51cto.com/1825994/1705356

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!