首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉勾
V2EX  ›  程序员

关于 /proc/meminfo 里面各项内存参数的意义,有大佬能说清楚嘛?

  •  
  •   Buffer2Disk · 67 天前 · 703 次点击
    这是一个创建于 67 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,最近线上的 Python 多线程的程序碰到了内存激增的问题,见上一篇帖子 https://www.v2ex.com/t/496498

    现在拿到了内存各项参数,请大佬们帮忙分析分析这个内存都用到哪去了?

    下面是 Python 进程的内存使用情况(anon)

    6 回复  |  直到 2018-10-17 15:50:02 +08:00
        1
    sbw   66 天前
    $man proc
        2
    UIXX   66 天前   ♥ 1
    哥们,你可能搞错了重点。你需要的是如何"调试 Python 多线程程序",而不是"看 Linux 的内存参数猜内存暴涨的源头"。

    1、把线上程序拿到测试环境作稳定性测试与压力测试

    2、使用内存监控工具调试疑似出错的部分

    没看到具体代码之前,瞎猜浪费脑子
        3
    luozic   66 天前 via iPhone
    python 各种 pypi lib 好多探测内存泄漏的
        4
    lirau   66 天前
    单纯说 /proc/meminfo 里的各项数据,可以参考这篇文章 http://linuxperf.com/?p=142
        5
    Buffer2Disk   66 天前
    @lirau 看过这个人写的文章,写的挺好的,但是对我最关心的几个参数,好像没有详细的描述
    Active: 1308168 kB
    Inactive: 1758160 kB
    Active(anon): 1010416 kB
    Inactive(anon): 1370480 kB
    Active(file): 297752 kB
    Inactive(file): 387680 kB
        6
    lirau   61 天前
    间接的以及引用的链接(这个 http://linuxperf.com/?p=97 )里还是说了一些的。

    比如你贴的这个数据:
    Active: 1308168 kB = Active(anon): 1010416 kB + Active(file): 297752 kB

    然后 Active(anon) 表示 anonymous pages,Active(file)表示 file-backed pages

    inactive 同理


    详细参考原文,这里做一下零碎的摘抄:

    它们的含义在 manpage 中只给了简单的说明,并未详细解释:

    inact: the amount of inactive memory. (-a option)
    active: the amount of active memory. (-a option)


    fs/proc/meminfo.c:
    ==================
    0023 static int meminfo_proc_show(struct seq_file *m, void *v)
    0024 {
    ...

    0032 unsigned long pages[NR_LRU_LISTS];
    ...

    0051 for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
    0052 pages[lru] = global_page_state(NR_LRU_BASE + lru);
    ...

    0095 "Active: %8lu kB\n"
    0096 "Inactive: %8lu kB\n"
    0097 "Active(anon): %8lu kB\n"
    0098 "Inactive(anon): %8lu kB\n"
    0099 "Active(file): %8lu kB\n"
    0100 "Inactive(file): %8lu kB\n"
    ...

    0148 K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]),
    0149 K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]),
    0150 K(pages[LRU_ACTIVE_ANON]),
    0151 K(pages[LRU_INACTIVE_ANON]),
    0152 K(pages[LRU_ACTIVE_FILE]),
    0153 K(pages[LRU_INACTIVE_FILE]),
    ...

    这段代码的意思是统计所有的 LRU list,其中 Active Memory 等于 ACTIVE_ANON 与 ACTIVE_FILE 之和,Inactive Memory 等于 INACTIVE_ANON 与 INACTIVE_FILE 之和

    Active/inactive memory 是针对用户进程所占用的内存而言的,内核占用的内存(包括 slab )不在其中。

    ACTIVE_ANON 和 ACTIVE_FILE,分别表示 anonymous pages 和 file-backed pages。用户进程的内存页分为两种:与文件关联的内存(比如程序文件、数据文件所对应的内存页)和与文件无关的内存(比如进程的堆栈,用 malloc 申请的内存),前者称为 file-backed pages,后者称为 anonymous pages。File-backed pages 在发生换页(page-in 或 page-out)时,是从它对应的文件读入或写出; anonymous pages 在发生换页时,是对交换区进行读 /写操作。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1179 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 17:21 · PVG 01:21 · LAX 09:21 · JFK 12:21
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1