嵌入式Linux用户空间内存优化

时间:2021-01-04 11:05:48   收藏:0   阅读:0

(都是自己敲出来的,想到哪里写到哪里,面对的是有一定基础的朋友,有问题、建议的朋友可以留言,我不定期答疑;可以随便转发,只求更多人知道)

(至2020已工作10年了,一直在忙着分析问题、解决问题,现在每解决一个问题就写一篇,分享给有需要的人)

继上一篇《Linux Userspace Kernelspace内存分布》之后,在分析一下内存优化的方法。

https://www.cnblogs.com/tangtangworld/p/11738090.html

后面还有一篇进程空内存使用分布进一步分析的方法,看后面有没有时间,这几天被几个Kernel Panic绊住了,在分析net子系统的代码。(MTK的SDK到处是坑)

 

通过对/proc/meminfo的分析,初步看去可以优化的地方不多:

1,tmpfs:/tmp下文件数目: Active(anon), Inactive(anon)

2,各个进程打开的文件:Active(file), Inactive(file)

3,进程:进程的堆、栈:Active(anon), Inactive(anon)

  分析进程中内存的分布,尝试回答下面的问题,之后对进程的内存进行优化。注意要对业务比较熟悉,内存优化就是减少不需要的操作,通过优化数据结构和算法来达到目的。(后面可能会写几篇关于数据结构和算法的心得)

下面以bash为例进行解说,首先看到的是size命令的输出:

   text    data     bss     dec     hex filename
1127387   47356   40056 1214799  12894f /usr/bin/bash

 通过size命令可以看到bash的代码段、数据段、bss段的大小。

 进程的内存分为代码段、数据段、BSS段、heap、内存映射、stack,在0~3GB的虚拟地址空间上,依次由低地址到高地址非连续排列。

root@VirtualBox# cat /proc/129473/maps
558d518a4000-558d518d1000 r--p 00000000 08:05 1835663                    /usr/bin/bash
558d518d1000-558d51982000 r-xp 0002d000 08:05 1835663                    /usr/bin/bash
558d51982000-558d519b9000 r--p 000de000 08:05 1835663                    /usr/bin/bash
558d519b9000-558d519bd000 r--p 00114000 08:05 1835663                    /usr/bin/bash
558d519bd000-558d519c6000 rw-p 00118000 08:05 1835663                    /usr/bin/bash
558d519c6000-558d519d0000 rw-p 00000000 00:00 0
558d51b9c000-558d51c41000 rw-p 00000000 00:00 0                          [heap]
7f971e273000-7f971e294000 rw-p 00000000 00:00 0
7f971e294000-7f971e297000 r--p 00000000 08:05 1837196                    /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so
7f971e297000-7f971e29e000 r-xp 00003000 08:05 1837196                    /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so
7f971e29e000-7f971e2a0000 r--p 0000a000 08:05 1837196                    /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so
7f971e2a0000-7f971e2a1000 r--p 0000b000 08:05 1837196                    /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so
7f971e2a1000-7f971e2a2000 rw-p 0000c000 08:05 1837196                    /usr/lib/x86_64-linux-gnu/libnss_files-2.31.so
7f971e2a2000-7f971e2a8000 rw-p 00000000 00:00 0
7f971e2bb000-7f971eb2b000 r--p 00000000 08:05 1837771                    /usr/lib/locale/locale-archive
7f971eb2b000-7f971eb2e000 rw-p 00000000 00:00 0
7f971eb2e000-7f971eb53000 r--p 00000000 08:05 1837188                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f971eb53000-7f971eccb000 r-xp 00025000 08:05 1837188                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f971eccb000-7f971ed15000 r--p 0019d000 08:05 1837188                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f971ed15000-7f971ed16000 ---p 001e7000 08:05 1837188                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f971ed16000-7f971ed19000 r--p 001e7000 08:05 1837188                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f971ed19000-7f971ed1c000 rw-p 001ea000 08:05 1837188                    /usr/lib/x86_64-linux-gnu/libc-2.31.so
7f971ed1c000-7f971ed20000 rw-p 00000000 00:00 0
7f971ed20000-7f971ed21000 r--p 00000000 08:05 1837189                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f971ed21000-7f971ed23000 r-xp 00001000 08:05 1837189                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f971ed23000-7f971ed24000 r--p 00003000 08:05 1837189                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f971ed24000-7f971ed25000 r--p 00003000 08:05 1837189                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f971ed25000-7f971ed26000 rw-p 00004000 08:05 1837189                    /usr/lib/x86_64-linux-gnu/libdl-2.31.so
7f971ed26000-7f971ed34000 r--p 00000000 08:05 1841972                    /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2
7f971ed34000-7f971ed43000 r-xp 0000e000 08:05 1841972                    /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2
7f971ed43000-7f971ed51000 r--p 0001d000 08:05 1841972                    /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2
7f971ed51000-7f971ed55000 r--p 0002a000 08:05 1841972                    /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2
7f971ed55000-7f971ed56000 rw-p 0002e000 08:05 1841972                    /usr/lib/x86_64-linux-gnu/libtinfo.so.6.2
7f971ed56000-7f971ed58000 rw-p 00000000 00:00 0
7f971ed64000-7f971ed6b000 r--s 00000000 08:05 2498817                    /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
7f971ed6b000-7f971ed6c000 r--p 00000000 08:05 1837183                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f971ed6c000-7f971ed8f000 r-xp 00001000 08:05 1837183                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f971ed8f000-7f971ed97000 r--p 00024000 08:05 1837183                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f971ed98000-7f971ed99000 r--p 0002c000 08:05 1837183                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f971ed99000-7f971ed9a000 rw-p 0002d000 08:05 1837183                    /usr/lib/x86_64-linux-gnu/ld-2.31.so
7f971ed9a000-7f971ed9b000 rw-p 00000000 00:00 0
7fff0c34e000-7fff0c36f000 rw-p 00000000 00:00 0                          [stack]
7fff0c395000-7fff0c398000 r--p 00000000 00:00 0                          [vvar]
7fff0c398000-7fff0c399000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]

  

//ToDo增加一个案例,分析内存和优化

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!