lsof(list open file)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

1.命令格式

lsof [参数][文件]

2.命令功能

用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 需要访问核心内存和各种文件,所以需要root用户执行。

lsof打开的文件可以是:

  1. 普通文件

  2. 目录

  3. 网络文件系统的文件

  4. 字符或设备文件

  5. (函数)共享库

  6. 管道,命名管道

  7. 符号链接

  8. 网络文件(例如:NFS file、网络socket,unix域名socket)

  9. 还有其它类型的文件,等等

3. 命令参数

-a 列出打开文件存在的进程
-c<进程名> 列出指定进程所打开的文件
-g 列出GID号进程详情
-d<文件号> 列出占用该文件号的进程
+d<目录> 列出目录下被打开的文件
+D<目录> 递归列出目录下被打开的文件
-n<目录> 列出使用NFS的文件
-i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号> 列出指定进程号所打开的文件
-u 列出UID号进程详情
-h 显示帮助信息
-v 显示版本信息

4. 使用实例

  1. 无任何参数
lsof

说明

  • COMMAND 进程的名称

  • PID 进程标识符

  • PPID 父进程标识符(需要指定-R参数)

  • USER 进程所有者

  • PGID 进程所属组

  • FD 文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等

1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改

(2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序

(3)lnn:library references (AIX);

(4)er:FD information error (see NAME column);

(5)jld:jail directory (FreeBSD);

(6)ltx:shared library text (code and data);

(7)mxx :hex memory-mapped type number xx.

(8)m86:DOS Merge mapped file;

(9)mem:memory-mapped file;

(10)mmap:memory-mapped device;

(11)pd:parent directory;

(12)rtd:root directory;

(13)tr:kernel trace file (OpenBSD);

(14)v86  VP/ix mapped file;

(15)0:表示标准输出

(16)1:表示标准输入

(17)2:表示标准错误

一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等

(1)u:表示该文件被打开并处于读取/写入模式

(2)r:表示该文件被打开并处于只读模式

(3)w:表示该文件被打开并处于

(4)空格:表示该文件的状态模式为unknow,且没有锁定

(5)-:表示该文件的状态模式为unknow,且被锁定

同时在文件状态模式后面,还跟着相关的锁

(1)N:for a Solaris NFS lock of unknown type;

(2)r:for read lock on part of the file;

(3)R:for a read lock on the entire file;

(4)w:for a write lock on part of the file;(文件的部分写锁)

(5)W:for a write lock on the entire file;(整个文件的写锁)

(6)u:for a read and write lock of any length;

(7)U:for a lock of unknown type;

(8)x:for an SCO OpenServer Xenix lock on part      of the file;

(9)X:for an SCO OpenServer Xenix lock on the      entire file;

(10)space:if there is no lock.

  • TYPE:文件类型,如DIR、REG等,常见的文件类型
(1)DIR:表示目录

(2)CHR:表示字符类型

(3)BLK:块设备类型

(4)UNIX: UNIX 域套接字

(5)FIFO:先进先出 (FIFO) 队列

(6)IPv4:网际协议 (IP) 套接字
  • DEVICE:指定磁盘的名称

  • SIZE:文件的大小

  • NODE:索引节点(文件在磁盘上的标识)

  • NAME:打开文件的确切名称

  1. 查看谁正在使用某个文件,也就是说查找某个文件相关的进程
lsof /bin/bash

  1. 递归查看某个目录的文件信息
lsof +D /bin

  1. 关键字查找
lsof | grep 'mysql'

  1. 列出某个用户打开的文件信息
lsof -u www

  1. 列出某个进程名打开的文件信息
lsof -c php-fpm

  1. 列出某个进程号打开的文件信息
lsof -p 21996

  1. 根据文件描述列出对应的文件信息
lsof -d 1

  1. 列出特定tcp端口
lsof -i tcp:80

  1. 列出某个用户的所有活跃的网络端口
lsof -a -u www -i

5.调试php脚本

  1. 首先获取进程ID
ps -aux | grep QueryABC.php

sync360  11115  0.0  0.0   6564   864 ?        Ss   14:00   0:00 /bin/sh -c /usr/local/bin/php /home/QueryABC.php BILL99DF 10-8>> /home
sync360  11124  0.0  0.4 361628 17296 ?        S    14:00   0:04 /usr/local/bin/php /home/QueryABC.php BILL99DF 10-8
sync360  25230  0.0  0.0  63384   872 pts/0    S+   15:28   0:00 grep QueryABC.php
  1. strace 查看该进程正在持续的状态
sudo strace -T -tt -e trace=all -p 11124
[sudo] password for ancongcong: 
Process 11124 attached - interrupt to quit
15:33:07.259044 read(9, 
  1. lsof查看进程所有使用的文件
lsof -p 11124

....
php     11124 sync360  mem    REG        8,1    23736    3211320 /lib64/libnss_dns-2.5.so
php     11124 sync360    0r  FIFO        0,6          1522728709 pipe
php     11124 sync360    1w   REG        8,1  4088819    1869737 /home/logs/QueryABC.log
php     11124 sync360    2w  FIFO        0,6          1522728710 pipe
php     11124 sync360    3w   CHR        1,3                 982 /dev/null
php     11124 sync360    4u  IPv4 1522728838                 TCP 211.151.122.234:46004->10.117.128.47:rtmp-port (CLOSE_WAIT)
php     11124 sync360    5wW  REG        8,1        0    2704363 /home/lockfile/QueryABC.php.BILL99DF.10-8
php     11124 sync360    6u  IPv4 1522728841                 TCP 211.151.122.234:51019->10.117.128.46:rtmp-port (CLOSE_WAIT)
php     11124 sync360    7w   REG        8,1 31960384    1869789 /home/logs/XXXX_info.log.20180118
php     11124 sync360    8w   REG        8,1 18151722    1869806 /home/logs/XXXX_QRY_info.log.20180118
php     11124 sync360    9u  IPv4 1522729884                 TCP 211.151.122.234:54976->61.152.114.130:https (ESTABLISHED)
sudo netstat -tunpa | grep 11124
tcp        0      0 211.151.122.234:54976       61.152.114.130:443          ESTABLISHED 11124/php           
tcp        1      0 211.151.122.234:51019       10.117.128.46:3500          CLOSE_WAIT  11124/php           
tcp        1      0 211.151.122.234:46004       10.117.128.47:3500          CLOSE_WAIT  11124/php

可以发现最终是停留在 https 的链接建立,等待获取数据,查看此处代码 :

ini_set('default_socket_timeout',30);
$scOptions = array('connection_timeout' => 30);
$clientObj = new SoapClient( $wsdl , $scOptions);

当前版本 php 较老,这里是有个 bug 的在 https 链接请求时 SOAPClient 的超时时间是不生效。导致一直连接不释放,当请求量上来的时候,会导致服务器陷入高负载状态。

6. 查询php进程状态

所谓状态,指的是我们在启动 PHP 的时候,PHP-FPM 加载的系统库、PHP 扩展、以及其他日志文件等的状态信息。

  1. 查询php-fpm进程的PID
[root@localhost ~]# ps -aux|grep php-fpm
root      1544  0.0  0.8 291448 16244 ?        Ss   Jul30   0:06 php-fpm: master process
www       1545  0.0  0.9 291920 17340 ?        S    Jul30   0:00 php-fpm: pool www
www       1546  0.0  0.9 292136 17856 ?        S    Jul30   0:00 php-fpm: pool www
www       1547  0.0  0.9 291908 17336 ?        S    Jul30   0:00 php-fpm: pool www
www       1548  0.0  0.9 291916 17308 ?        S    Jul30   0:00 php-fpm: pool www
www       1549  0.0  0.9 292272 17880 ?        S    Jul30   0:00 php-fpm: pool www
www       1550  0.0  0.9 292616 18132 ?        S    Jul30   0:00 php-fpm: pool www
......
  1. 查询进程状态
[root@localhost ~]# lsof -p 1544
COMMAND  PID USER   FD      TYPE             DEVICE  SIZE/OFF     NODE NAME
php-fpm 1544 root  cwd       DIR              253,0       271       64 /
php-fpm 1544 root  rtd       DIR              253,0       271       64 /
php-fpm 1544 root  txt       REG              253,0  40770864  1506860 /usr/local/php71/sbin/php-fpm
php-fpm 1544 root  mem       REG              253,0     62184   482957 /usr/lib64/libnss_files-2.17.so
php-fpm 1544 root  mem       REG              253,0   4194305 16881237 /tmp/phptrace.ctrl
php-fpm 1544 root  mem       REG              253,0   1850464    41259 /usr/lib64/libdb-5.3.so
php-fpm 1544 root  mem       REG              253,0     28216 33654797 /usr/lib64/sasl2/libsasldb.so.3.0.0
php-fpm 1544 root  mem       REG              253,0     19968 33654794 /usr/lib64/sasl2/libanonymous.so.3.0.0
php-fpm 1544 root  DEL       REG                0,4              18634 /dev/zero
php-fpm 1544 root  mem       REG              253,0    159600 51987804 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/trace.so
php-fpm 1544 root  mem       REG              253,0   4414480 50968175 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/mongodb.so
php-fpm 1544 root  mem       REG              253,0    851128 50666307 /usr/local/lib/libevent_core-2.1.so.6.0.2
php-fpm 1544 root  mem       REG              253,0    502032 50666311 /usr/local/lib/libevent_extra-2.1.so.6.0.2
php-fpm 1544 root  mem       REG              253,0    116088 50666319 /usr/local/lib/libevent_openssl-2.1.so.6.0.2
php-fpm 1544 root  mem       REG              253,0    883440 52435182 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/event.so
php-fpm 1544 root  mem       REG              253,0    121320    41640 /usr/lib64/libsasl2.so.3.0.0
php-fpm 1544 root  mem       REG              253,0   5662520 51023034 /usr/local/lib/librdkafka.so.1
php-fpm 1544 root  mem       REG              253,0    440512 51861780 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/rdkafka.so
php-fpm 1544 root  mem       REG              253,0   4408400 50919001 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/swoole.so
php-fpm 1544 root  mem       REG              253,0   1426032 52419266 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/yaf.so
php-fpm 1544 root  mem       REG              253,0   3618280 51005421 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/fileinfo.so
php-fpm 1544 root  mem       REG              253,0   1734168 52419246 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/redis.so
php-fpm 1544 root  mem       REG              253,0   1310320 51861871 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
php-fpm 1544 root  mem       REG              253,0   1631520 51851520 /usr/local/php71/lib/php/extensions/no-debug-non-zts-20160303/opcache.so
php-fpm 1544 root  mem       REG              253,0 106070960 50918862 /usr/lib/locale/locale-archive
php-fpm 1544 root  mem       REG              253,0    402384    41228 /usr/lib64/libpcre.so.1.2.0
php-fpm 1544 root  mem       REG              253,0    155784   264930 /usr/lib64/libselinux.so.1
php-fpm 1544 root  mem       REG              253,0     15688    43432 /usr/lib64/libkeyutils.so.1.5
php-fpm 1544 root  mem       REG              253,0     58728  1528050 /usr/lib64/libkrb5support.so.0.1
php-fpm 1544 root  mem       REG              253,0    210840    44058 /usr/lib64/libk5crypto.so.3.1
php-fpm 1544 root  mem       REG              253,0     15848     1299 /usr/lib64/libcom_err.so.2.1
php-fpm 1544 root  mem       REG              253,0    963576   177761 /usr/lib64/libkrb5.so.3.3
php-fpm 1544 root  mem       REG              253,0    320408  1349437 /usr/lib64/libgssapi_krb5.so.2.2
php-fpm 1544 root  mem       REG              253,0    157424     1300 /usr/lib64/liblzma.so.5.2.2
php-fpm 1544 root  mem       REG              253,0    144792   524665 /usr/lib64/libpthread-2.17.so
php-fpm 1544 root  mem       REG              253,0     19384    41444 /usr/lib64/libgpg-error.so.0.10.0
php-fpm 1544 root  mem       REG              253,0    535064    41239 /usr/lib64/libgcrypt.so.11.8.2
php-fpm 1544 root  mem       REG              253,0     11464     1231 /usr/lib64/libfreebl3.so
php-fpm 1544 root  mem       REG              253,0   2173512     1485 /usr/lib64/libc-2.17.so
php-fpm 1544 root  mem       REG              253,0     88720  1499604 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
php-fpm 1544 root  mem       REG              253,0   1419360 51389508 /usr/local/lib/libiconv.so.2.6.0
php-fpm 1544 root  mem       REG              253,0    258344  1577528 /usr/lib64/libxslt.so.1.1.28
php-fpm 1544 root  mem       REG              253,0     57136  1579626 /usr/lib64/libicuio.so.50.1.2
php-fpm 1544 root  mem       REG              253,0  20789896  1579622 /usr/lib64/libicudata.so.50.1.2
php-fpm 1544 root  mem       REG              253,0   1539392  1579636 /usr/lib64/libicuuc.so.50.1.2
php-fpm 1544 root  mem       REG              253,0   2096056  1579624 /usr/lib64/libicui18n.so.50.1.2
php-fpm 1544 root  mem       REG              253,0    691736  1349410 /usr/lib64/libfreetype.so.6.10.0
php-fpm 1544 root  mem       REG              253,0    472672 51303927 /usr/local/lib/libcurl.so.4.4.0
php-fpm 1544 root  mem       REG              253,0   2512832  1528053 /usr/lib64/libcrypto.so.1.0.2k
php-fpm 1544 root  mem       REG              253,0    470360  1528055 /usr/lib64/libssl.so.1.0.2k
php-fpm 1544 root  mem       REG              253,0   1509376    41480 /usr/lib64/libxml2.so.2.9.1
php-fpm 1544 root  mem       REG              253,0    117680   482950 /usr/lib64/libnsl-2.17.so
php-fpm 1544 root  mem       REG              253,0   1139680   177756 /usr/lib64/libm-2.17.so
php-fpm 1544 root  mem       REG              253,0    285296     5399 /usr/lib64/libjpeg.so.62.1.0
php-fpm 1544 root  mem       REG              253,0    179296     5419 /usr/lib64/libpng15.so.15.13.0
php-fpm 1544 root  mem       REG              253,0    995840  1337428 /usr/lib64/libstdc++.so.6.0.19
php-fpm 1544 root  mem       REG              253,0     19776      858 /usr/lib64/libdl-2.17.so
php-fpm 1544 root  mem       REG              253,0    662504 50758820 /usr/local/lib/libmcrypt.so.4.4.8
php-fpm 1544 root  mem       REG              253,0     44448     1254 /usr/lib64/librt-2.17.so
php-fpm 1544 root  mem       REG              253,0    106848   524736 /usr/lib64/libresolv-2.17.so
php-fpm 1544 root  mem       REG              253,0     87368  1577526 /usr/lib64/libexslt.so.0.8.17
php-fpm 1544 root  mem       REG              253,0     90664    41257 /usr/lib64/libz.so.1.2.7
php-fpm 1544 root  mem       REG              253,0     41080      854 /usr/lib64/libcrypt-2.17.so
php-fpm 1544 root  mem       REG              253,0    164240  1517336 /usr/lib64/ld-2.17.so
php-fpm 1544 root  DEL       REG                0,4              20579 /dev/zero
php-fpm 1544 root    0u      CHR                1,3       0t0     1028 /dev/null
php-fpm 1544 root    1u      CHR                1,3       0t0     1028 /dev/null
php-fpm 1544 root    2w      REG              253,0   1998396 36911463 /usr/local/php71/var/log/php71-fpm.log
php-fpm 1544 root    3w      REG              253,0   1998396 36911463 /usr/local/php71/var/log/php71-fpm.log
php-fpm 1544 root    4u     unix 0xffff886c38c9c000       0t0    20580 socket
php-fpm 1544 root    5r     FIFO                0,9       0t0    20585 pipe
php-fpm 1544 root    6u     unix 0xffff886c38c9d400       0t0    20581 socket
php-fpm 1544 root    7u     unix 0xffff886c38c9c800       0t0    20582 /dev/shm/php71-cgi.sock
php-fpm 1544 root    8u  a_inode               0,10         0     6123 [eventpoll]

通过以上信息,我们可以明确知道我们的这个进程对应的 PHP-FPM 的绝对路径。以及它加载了系统的哪些类库,和加载了 PHP 的哪些类库。

php-fpm 1544 root    0u      CHR                1,3       0t0     1028 /dev/null
php-fpm 1544 root    1u      CHR                1,3       0t0     1028 /dev/null
php-fpm 1544 root    2w      REG              253,0   1998396 36911463 /usr/local/php71/var/log/php71-fpm.log

通过此项,我们可以看到,标准输出(0u)丢弃了(/dev/null)。标准转入(1u)也丢弃了(/dev/null)。标准的错误(2w)转出到了 /usr/local/php71/var/log/php71-fpm.log 文件。

Scroll to Top