duanchique1196 2015-01-05 17:38
浏览 610

一种有效的方法来获取Go中某个进程打开的文件句柄数量?

I have a monitoring agent called scollector that is using more cpu on our loadbalancer. Perf says the CPU is mostly due to __d_lookup. One of the things I monitor is the number of open file handles - I do this via the following code:

    fds, e := ioutil.ReadDir("/proc/" + pid + "/fd")
    if e != nil {
        w.Remove(pid)
        continue
    }
    ...
    Add(md, "linux.proc.num_fds", len(fds), tags, metadata.Gauge, metadata.Files, descLinuxProcFd)

When I strace the process, I see it calling lstat on every file in the /fd directory (which is going to be a lot for our active load balancer (at least .5 million fds) - so I hypothesizing that this is the source of the high dentry cache cpu usage for the process.

Anyone have a suggestion on a better way to do this?

  • 写回答

1条回答 默认 最新

  • duankaolei2921 2015-01-05 17:45
    关注

    The trouble with ioutil.Readdir is that it does file.Readdir which says that it does an lstat for every file.

    It seems Readdirnames doesn't do this, returning only the names. And since you only want the count, that should be enough.

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?