如何找到httpd(Apache web服务器)或mysqld(MySQL数据库服务器)等进程使用的所有文件描述符?
您可以使用/proc文件系统或lsof命令来查找进程使用的所有文件描述符。
/proc文件系统示例
首先,使用ps命令找出进程ID,输入:
# ps aux | grep processName # ps aux | grep mysqld
示例输出:
root 3632 0.0 0.0 65944 1296 ? S Jun05 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql --log-error=/var/log --pid-file=/var/run/mysqld --user=mysql mysql 3679 9.0 8.9 1393476 733756 ? Sl Jun05 3448:12 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld --skip-external-locking --socket=/var/lib/mysql root 44723 0.0 0.0 61188 820 pts/0 S+ 17:48 0:00 grep mysqld
您还可以按如下方式使用pidof命令来查找进程id(PID):
# pidof processName # pidof mysqld
示例输出:
3679
记下PID # 3679。
/proc/$pid/fd目录示例
输入下的命令:
# ls /proc/3679/fd # ls -l /proc/3679/fd
示例输出:
total 0 lr-x------ 1 root root 64 Jul 1 13:09 0 -> /dev/null l-wx------ 1 root root 64 Jul 1 13:09 1 -> /var/log lrwx------ 1 root root 64 Jul 1 13:09 10 -> socket:[14667] lrwx------ 1 root root 64 Jul 1 13:09 100 -> /var/lib/mysql/blogdb lrwx------ 1 root root 64 Jul 1 13:09 101 -> /var/lib/mysql/blogdb lrwx------ 1 root root 64 Jul 1 13:09 102 -> /var/lib/mysql/blogdb lrwx------ 1 root root 64 Jul 1 13:09 103 -> /var/lib/mysql/order lrwx------ 1 root root 64 Jul 1 13:09 104 -> /var/lib/mysql/order lrwx------ 1 root root 64 Jul 1 13:09 105 -> /var/lib/mysql/order lrwx------ 1 root root 64 Jul 1 13:09 106 -> /var/lib/mysql/order lrwx------ 1 root root 64 Jul 1 13:09 107 -> /var/lib/mysql/order lrwx------ 1 root root 64 Jul 1 13:09 108 -> /var/lib/mysql/suppor ...... ....... ... (output truncated)
lsof命令示例
输入以下命令:
# lsof -a -p {PID-HERE} # lsof -a -p 3679
示例输出:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME mysqld 3679 mysql cwd DIR 8,2 4096 7667720 /var/lib/mysql mysqld 3679 mysql rtd DIR 8,2 4096 2 / mysqld 3679 mysql txt REG 8,2 7721832 15185707 /usr/libexec/mysqld mysqld 3679 mysql mem REG 8,2 13074466 /lib64 (path inode=13074445) mysqld 3679 mysql mem REG 8,2 13074602 /lib64 (path inode=13074454) mysqld 3679 mysql mem REG 8,2 13074603 /lib64 (path inode=13074461) mysqld 3679 mysql mem REG 8,2 13074608 /lib64 (path inode=13074464) mysqld 3679 mysql mem REG 8,2 13074612 /lib64 (path inode=13074491) mysqld 3679 mysql mem REG 8,2 85928 15193367 /usr/lib64 mysqld 3679 mysql mem REG 8,2 247496 13074620 /lib64 mysqld 3679 mysql mem REG 8,2 95464 13074623 /lib64 mysqld 3679 mysql mem REG 8,2 13074615 /lib64 (path inode=13074500) mysqld 3679 mysql mem REG 8,2 13074618 /lib64 (path inode=13074469) mysqld 3679 mysql mem REG 8,2 13074633 /lib64 (path inode=13074459) mysqld 3679 mysql mem REG 8,2 1366272 13074653 /lib64 mysqld 3679 mysql mem REG 8,2 13074655 /lib64 (path inode=13074496) mysqld 3679 mysql mem REG 8,2 58400 13074610 /lib64 mysqld 3679 mysql mem REG 8,2 10000 13074666 /lib64 mysqld 3679 mysql mem REG 8,2 15193399 /usr/lib64 (path inode=15186140) mysqld 3679 mysql mem REG 8,2 9728 13074658 /lib64 mysqld 3679 mysql mem REG 8,2 15193402 /usr/lib64 (path inode=15186013) mysqld 3679 mysql mem REG 8,2 15193397 /usr/lib64 (path inode=15186147) mysqld 3679 mysql mem REG 8,2 15193400 /usr/lib64 (path inode=15184571) mysqld 3679 mysql mem REG 8,2 976312 15180443 /usr/lib64/libstdc++. mysqld 3679 mysql mem REG 8,2 315032 13074667 /lib64 mysqld 3679 mysql mem REG 8,2 13074479 /lib64 (path inode=13074476) mysqld 3679 mysql 0r CHR 1,3 4102 /dev/null ..... .. ... mysqld 3679 mysql 234u REG 8,2 0 7700867 /var/lib/mysql/order mysqld 3679 mysql 238u REG 8,2 2048 7700637 /var/lib/mysql/email mysqld 3679 mysql 239u REG 8,2 79060 7700593 /var/lib/mysql/email mysqld 3679 mysql 340u REG 8,2 17690624 7766217 /var/lib/mysql/blogdb
要查看所用文件描述符的统计信息,请输入:
# cat /proc/3679/net/sockstat
示例输出:
sockets: used 183 TCP: inuse 5 orphan 0 tw 0 alloc 9 mem 2 UDP: inuse 9 mem 1 UDPLITE: inuse 0 RAW: inuse 0 FRAG: inuse 0 memory 0