首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Go中获取进程打开的文件句柄数量的有效方法?

在Go中获取进程打开的文件句柄数量的有效方法?
EN

Stack Overflow用户
提问于 2015-01-06 01:38:47
回答 1查看 1.3K关注 0票数 3

我有一个名为scollector的监控代理,它在负载均衡器上使用更多的cpu。Perf表示,CPU的主要原因是__d_lookup。我监控的一件事是打开文件句柄的数量--我通过下面的代码来实现:

代码语言:javascript
复制
    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)

当我堆叠进程时,我看到它在/fd目录中的每个文件上调用lstat (这对于我们的活动负载均衡器(至少是.5百万fd)来说是很大的)-所以我假设这是该进程的高dentry缓存cpu使用率的来源。

有没有人有更好的建议呢?

EN

回答 1

Stack Overflow用户

发布于 2015-01-06 01:45:54

ioutil.Readdir的问题是它做了file.Readdir,也就是说它对每个文件做了lstat

看起来Readdirnames并没有这样做,只返回名字。既然你只想要计数,这应该就足够了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27784844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档