如何查找某个进程正在操作的文件?

时间:2009-05-27 17:07:35

标签: linux bash rsyslog

就我而言,它是“rsyslogd”,

我发现它消耗的内存高达170M,这太多了,

我已经检查了位于/etc/rsyslog.conf

的配置文件

然后检查其中写的每个文件,

但徒劳无功。

如何查找当前正在操作的文件并查看正在进行的操作?

[root@slvdb2 log]# lsof -p `pidof rsyslogd`
COMMAND   PID USER   FD   TYPE             DEVICE    SIZE       NODE NAME
rsyslogd 1965 root  cwd    DIR                8,1    4096          2 /
rsyslogd 1965 root  rtd    DIR                8,1    4096          2 /
rsyslogd 1965 root  txt    REG                8,1  259072    2818209 /sbin/rsyslogd
rsyslogd 1965 root  mem    REG                8,1  142176    1097807 /lib64/ld-2.8.so
rsyslogd 1965 root  mem    REG                8,1 1804136    1097817 /lib64/libc-2.8.so
rsyslogd 1965 root  mem    REG                8,1  143096    1097871 /lib64/libpthread-2.8.so
rsyslogd 1965 root  mem    REG                8,1   88976    1097890 /lib64/libz.so.1.2.3
rsyslogd 1965 root  mem    REG                8,1   93416    1097834 /lib64/libgcc_s-4.3.0-20080428.so.1
rsyslogd 1965 root  mem    REG                8,1   53448    1097874 /lib64/librt-2.8.so
rsyslogd 1965 root  mem    REG                8,1   23208    1098015 /lib64/libdl-2.8.so
rsyslogd 1965 root  mem    REG                8,1   11368    4720595 /usr/lib64/rsyslog/imuxsock.so
rsyslogd 1965 root  mem    REG                8,1   23560    4720591 /usr/lib64/rsyslog/imklog.so
rsyslogd 1965 root  mem    REG                8,1   57808    1097853 /lib64/libnss_files-2.8.so
rsyslogd 1965 root  mem    REG                8,1   19504    4720596 /usr/lib64/rsyslog/lmnet.so
rsyslogd 1965 root  mem    REG                8,1    8584    4720598 /usr/lib64/rsyslog/lmtcpclt.so
rsyslogd 1965 root    0u  unix 0xffff880008a31c40            3909712 /dev/log
rsyslogd 1965 root    1w   REG                8,1     435    4014282 /var/log/messages
rsyslogd 1965 root    2w   REG                8,1 7723905    4014355 /var/log/secure
rsyslogd 1965 root    3w   REG                8,1       0    4014356 /var/log/maillog
rsyslogd 1965 root    4w   REG                8,1   58959    4014359 /var/log/cron
rsyslogd 1965 root    5w   REG                8,1       0    4014357 /var/log/spooler
rsyslogd 1965 root    6w   REG                8,1       0    4014358 /var/log/boot.log
rsyslogd 1965 root    7r   REG                0,3       0 4026531849 /proc/kmsg

没有从上述文件中获得任何线索..

7 个答案:

答案 0 :(得分:7)

lsof -p `pidof rsyslogd`

答案 1 :(得分:6)

lsof非常方便,就像热熔器一样。

答案 2 :(得分:3)

你声称rsyslogd正在使用“太多”内存(170MB)。与什么相比太多了?

首先,先阅读article。可能性是rsyslogd没有使用你想象的那么多内存。如果你仍然认为它是,请去了解rsyslogd。您可能还想browse the source

一旦你完成了一些分析,你可能想要与rsyslogd开发人员打开一个对话框,他们可能会更好地回答你的问题。

顺便说一下,多次提出同样的问题是不好的形式 - 你最好还是编辑original question

就个人而言,鉴于您的主要问题似乎是“网站性能”(可能是网站),我建议首先查看为网站提供服务的软件,然后再关注使用的关键操作系统进程每天在数百万台服务器上运行。是的,问题可能是rsyslogd正在尝试将日志消息写入需要轮换的大文件,但它更可能是为每个请求动态生成的内容,当它可以(并且应该)被缓存时。

答案 3 :(得分:2)

lsof -p <pid>应该可以解决问题。

答案 4 :(得分:1)

您可以了解该进程在/proc/[pid_of_process]/fd/中打开的文件。

答案 5 :(得分:1)

应该做的诀窍:

/usr/sbin/lsof | grep rsyslogd

答案 6 :(得分:0)

如果你想“查看”这个过程,看看“发生了什么”,你会想要使用像strace这样的东西。