【问题标题】:how to look up which files a certain process is manipulating?如何查找某个进程正在操作哪些文件?
【发布时间】:2010-10-29 08:27:53
【问题描述】:

就我而言,它是“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

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

【问题讨论】:

标签: linux bash rsyslog


【解决方案1】:

lsof 和 fuser 一样非常方便。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        lsof -p `pidof rsyslogd`
        

        【讨论】:

        • pidof 非常酷,但似乎不足以对其进行调查。
        【解决方案5】:

        如果您想“深入了解”流程并查看“发生了什么”,您将需要使用类似 strace 的工具。

        【讨论】:

        • 很高兴看到您使用 strace 进行调查的演示
        • strace -o strace.out -p <pid> 开始,然后查看 strace.out 中的输出。
        【解决方案6】:

        应该做的伎俩:

        /usr/sbin/lsof | grep rsyslogd
        

        【讨论】:

          【解决方案7】:

          您断言 rsyslogd 正在使用“太多”内存 (170MB)。与什么相比太多了?

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

          完成更多分析后,您可能希望与 rsyslogd 开发人员展开对话,他们可能更适合回答您的问题。

          顺便说一句,多次问同一个问题是一种糟糕的形式——你最好编辑original question

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-09
            • 1970-01-01
            • 2013-06-20
            • 1970-01-01
            • 2013-03-08
            • 2012-03-25
            相关资源
            最近更新 更多