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

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

  •  
  •   Buffer2Disk · 2018-10-11 21:50:59 +08:00 · 3651 次点击
    这是一个创建于 2233 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    没看到具体代码之前,瞎猜浪费脑子
    luozic
        3
    luozic  
       2018-10-12 09:49:19 +08:00 via iPhone
    python 各种 pypi lib 好多探测内存泄漏的
    lirau
        4
    lirau  
       2018-10-12 11:54:07 +08:00
    单纯说 /proc/meminfo 里的各项数据,可以参考这篇文章 http://linuxperf.com/?p=142
    Buffer2Disk
        5
    Buffer2Disk  
    OP
       2018-10-12 21:24:48 +08:00
    @lirau 看过这个人写的文章,写的挺好的,但是对我最关心的几个参数,好像没有详细的描述
    Active: 1308168 kB
    Inactive: 1758160 kB
    Active(anon): 1010416 kB
    Inactive(anon): 1370480 kB
    Active(file): 297752 kB
    Inactive(file): 387680 kB
    lirau
        6
    lirau  
       2018-10-17 15:50:02 +08:00
    间接的以及引用的链接(这个 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 在发生换页时,是对交换区进行读 /写操作。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:49 · PVG 04:49 · LAX 12:49 · JFK 15:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.